必须从服务端配置入手禁用SSH端口转发,核心是确保/etc/ssh/sshd_config中AllowTcpForwarding no、GatewayPorts no、PermitTunnel no、X11Forwarding no四行明确存在且未注释,重启sshd后用sshd -T验证全为no,并实测ssh -L应报“administratively prohibited”。

要真正禁止 SSH 端口转发、防范内网渗透,必须从服务端配置入手,仅改客户端或依赖工具限制毫无意义。核心是关闭 OpenSSH 服务端的四类转发能力,并确保配置生效。
关闭全部 TCP 转发能力
编辑 /etc/ssh/sshd_config,确认以下四行**明确存在、未被注释、值为 no**:
- AllowTcpForwarding no —— 禁用本地(-L)、远程(-R)和动态(-D)三类端口转发
- GatewayPorts no —— 防止远程转发绑定到 0.0.0.0 或其他非回环地址
- PermitTunnel no —— 关闭 SSH 内置 tun/tap 隧道功能(常被用于隐蔽通信)
- X11Forwarding no —— 禁用 X11 转发,避免图形会话泄露或权限提升
注意:#AllowTcpForwarding no 这类注释行无效;X11Forwarding false 也不合法,OpenSSH 只接受 yes/no。
重启并验证配置是否生效
保存后执行:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- sudo systemctl restart sshd(Debian/Ubuntu)或 sudo systemctl restart ssh(RHEL/CentOS)
- 运行 sudo sshd -T | grep -E "allowtcpforwarding|gatewayports|permitunnel|x11forwarding",每项输出必须是 no
- 用普通用户实测:ssh -L 8080:localhost:80 user@host,应立即失败并提示 administratively prohibited
清理潜在干扰项
有些模板或升级残留可能覆盖你的设置:
- 运行 grep -i "^allowtcpforwarding" /etc/ssh/sshd_config,若输出 AllowTcpForwarding yes 或无任何输出(即按默认值),必须手动补全为 AllowTcpForwarding no
- 检查是否存在重复配置(如多处 PermitTunnel 行),OpenSSH 以最后出现的有效行为为准
- 禁用 SSH Agent 转发:AllowAgentForwarding no,防止私钥签名能力被远程劫持
配合其他 SSH 加固措施
单禁端口转发不够,还需切断攻击链路:
- 禁用 root 登录:PermitRootLogin no
- 强制密钥认证:PasswordAuthentication no + PubkeyAuthentication yes
- 限制可登录用户:AllowUsers youruser
- 启用连接超时:ClientAliveInterval 300 和 ClientAliveCountMax 2
不复杂但容易忽略:改完不重启、写错大小写、漏掉 GatewayPorts、或只关了 X11 却留着 AllowTcpForwarding,都会让防护失效。

















