禁用 SSH 的 TCP 转发需修改服务端 /etc/ssh/sshd_config,确保 AllowTcpForwarding no、GatewayPorts no、PermitTunnel no、X11Forwarding no 四行未注释,重启 sshd 后用 sshd -T 验证全为 no,并实测 ssh -L 应报“administratively prohibited”。

禁用 SSH 的 TCP 转发,核心是关闭服务端的底层转发能力,仅靠客户端操作无效。只要服务端开启,攻击者换工具就能绕过。
修改服务端配置文件
编辑 /etc/ssh/sshd_config,确保以下四行明确存在且未被注释:
- AllowTcpForwarding no —— 禁用本地(-L)、远程(-R)和动态(-D)三类端口转发
- GatewayPorts no —— 防止远程端口转发绑定到非 127.0.0.1 地址(如 0.0.0.0)
- PermitTunnel no —— 关闭 SSH 内置的 tun/tap 隧道功能
- X11Forwarding no —— 一并禁用 X11 转发(虽非 TCP 类型,但属同类风险面)
重启服务并验证生效
保存配置后必须重启 SSH 守护进程:
- 执行 sudo systemctl restart sshd
- 验证是否生效:sudo sshd -T | grep -E "allowtcpforwarding|gatewayports|permitunnel|x11forwarding"
- 每项输出应为 no,而非 yes 或空值
检查并清理残留配置
有些系统升级或模板配置可能保留旧策略,需人工确认:
- 运行 grep -i "^allowtcpforwarding" /etc/ssh/sshd_config,若输出为 AllowTcpForwarding yes 或无输出(即按默认值),必须显式写入 no
- 避免依赖注释行,例如 #AllowTcpForwarding no 不生效,必须是未注释的完整行
- 重启后建议用普通用户实测:ssh -L 8080:localhost:80 user@host,应直接失败并提示“administratively prohibited”
不复杂但容易忽略:改完不重启、注释写错位置、或只关了 X11 却漏掉 AllowTcpForwarding,都会让防护形同虚设。


















