如何禁止 SSH 隧道功能防止服务器被当作跳板机使用?

文章导读
先说结论:禁用 SSH 隧道功能的核心在于服务端配置,客户端命令无法绕过服务端的限制策略。
📋 目录
  1. 核心配置参数
  2. 操作步骤
  3. 验证方法
  4. 紧急恢复方案
  5. 常见风险与注意
A A

先说结论:禁用 SSH 隧道功能的核心在于服务端配置,客户端命令无法绕过服务端的限制策略。

  • 先判断:确认业务是否依赖 SSH 转发,避免误伤正常运维流程。
  • 优先做:修改/etc/ssh/sshd_config,设置 AllowTcpForwarding no 等关键参数。
  • 再验证:保留当前会话,新开终端尝试隧道连接,确认被拒绝后再关闭旧会话。
  • 留后路:操作前确保拥有服务器控制台(VNC/物理机)访问权限,以防配置错误导致无法远程登录。

核心配置参数

以下是需要添加到或修改为 no 的关键配置项,执行后需重启 sshd 服务。

AllowTcpForwarding no
GatewayPorts no
PermitTunnel no
X11Forwarding no

若需针对特定用户或 IP 开放转发权限,可使用 Match 块进行细粒度控制,而非全局开启:

如何禁止 SSH 隧道功能防止服务器被当作跳板机使用?
Match User deploy_user
    AllowTcpForwarding yes
    PermitTunnel no

操作步骤

1. 备份配置文件:修改前务必备份,防止配置错误导致无法登录。

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

2. 编辑配置:使用 vim 或 nano 打开配置文件,找到或添加以下行。

sudo vim /etc/ssh/sshd_config

3. 确认参数:确保以下参数设置为 no,注意不要保留 yes 的注释行。

如何禁止 SSH 隧道功能防止服务器被当作跳板机使用?
  • AllowTcpForwarding no:禁用所有 TCP 端口转发。
  • GatewayPorts no:防止远程转发绑定到非本地地址。
  • PermitTunnel no:禁用点对点隧道设备。
  • X11Forwarding no:关闭图形界面转发。

4. 检查语法并重启:使用 sshd -t 检查配置语法,无误后重启服务。

sudo sshd -t
sudo systemctl restart sshd

验证方法

在另一台机器或当前机器的新终端中,尝试发起一个端口转发请求。例如尝试远程转发:

如何禁止 SSH 隧道功能防止服务器被当作跳板机使用?
ssh -R 8080:localhost:22 user@your-server

如果配置生效,连接后会收到类似 Warning: remote port forwarding failed for listen port 8080 的提示,或者连接直接断开,且服务端没有监听相应端口。

紧急恢复方案

若配置错误导致 SSH 服务无法启动或拒绝所有连接,请按以下步骤恢复:

  1. 使用控制台登录:通过云服务商提供的 VNC 控制台或物理机直接登录服务器,不受 SSH 服务状态影响。
  2. 还原配置文件:将备份的配置覆盖回去。
  3. sudo cp /etc/ssh/sshd_config.bak /etc/ssh/sshd_config
  4. 重启服务:恢复配置后重启 SSH 服务。
  5. sudo systemctl restart sshd
  6. 重新验证:确认 SSH 远程登录恢复正常后,再重新尝试修改配置。

常见风险与注意

  • 不要直接关闭当前会话:修改配置并重启服务前,务必保留一个已登录的终端窗口,确认新配置不会导致无法登录后再退出。
  • 客户端配置无效:客户端的 ssh_config 或命令行参数无法开启服务端已禁用的功能,加固重点永远在服务端。
  • 防火墙配合:仅关闭 SSH 转发不够,建议配合防火墙限制 SSH 端口的访问来源 IP,减少暴露面。
  • 语法检查必做:重启前必须执行 sshd -t,若有报错切勿重启,否则可能导致服务无法启动。