禁用x11转发和端口转发必须在服务端配置,核心操作是编辑/etc/ssh/sshd_config,显式设置x11forwarding no、allowtcpforwarding no、gatewayports no、permittunnel no,并重启sshd服务;客户端设置无法替代服务端策略,且需清理display等环境变量以防误触发。

禁用 X11 转发和端口转发,核心是修改服务端 /etc/ssh/sshd_config 并重启 sshd —— 客户端设置无法替代服务端策略,只要服务端开着,攻击者换工具就能绕过。
确认当前 X11Forwarding 状态
别猜,直接查配置:
- 运行
grep -i "^x11forwarding" /etc/ssh/sshd_config - 输出为
X11Forwarding yes(且未被注释)→ 必须改 - 无输出或只有
#X11Forwarding no→ 实际按默认值no运行,但建议显式写入,防升级覆盖
禁用 X11 转发(服务端强制关闭)
编辑 /etc/ssh/sshd_config,确保这一行存在且生效:
-
X11Forwarding no(注意:不是#X11Forwarding no,也不是false或off) - 可追加
X11UseLocalhost yes,进一步限制绑定地址 - 重启服务:
sudo systemctl restart sshd(CentOS/RHEL/Ubuntu 22.04+) - 验证:
sudo sshd -T | grep x11forwarding应返回x11forwarding no
禁用所有 TCP 端口转发能力
仅关 X11 不够,攻击者可用 ssh -R、ssh -L 或 ssh -D 做内网穿透。需同步关闭底层支持:
-
AllowTcpForwarding no—— 禁用本地、远程、动态三类端口转发 -
GatewayPorts no—— 防止远程转发绑定到非 127.0.0.1 地址 -
PermitTunnel no—— 关闭 SSH 内置的 tun/tap 隧道 - 改完同样需
systemctl restart sshd,否则不生效
客户端配合清理(防残留变量触发风险)
服务端禁用后,客户端仍可能保留 DISPLAY 或 XAUTHORITY,某些脚本会误触发本地 X Server 连接:
- 登录后立即执行:
unset DISPLAY XAUTHORITY XDG_SESSION_TYPE - 写入
~/.bashrc持久化:if [ -n "$DISPLAY" ]; then unset DISPLAY XAUTHORITY; fi - 检查:
env | grep -i "display\|xauth"应无输出 - SSH 客户端配置(如
~/.ssh/config)中添加:ForwardX11 no和ForwardX11Trusted no











