如何关闭OpenSSH端口转发以避免内网穿透风险?
- 内容介绍
- 文章标签
- 相关推荐
本文共计501个文字,预计阅读时间需要3分钟。
请勿使用OpenSSH。
确认并修改sshd_config关键参数
编辑OpenSSH服务端主配置文件:
sudo vim /etc/ssh/sshd_config
确保以下几行存在且设置为no:
-
AllowTcpForwarding no—— 禁用所有TCP端口转发(含-L、-R、-D) -
GatewayPorts no—— 防止远程转发绑定到非127.0.0.1地址(即使AllowTcpForwarding被绕过也无效) -
PermitTunnel no—— 禁用SSH内置的点对点隧道(如tun设备) -
X11Forwarding no—— 关闭图形转发,避免X11相关侧信道利用
重启服务并验证是否生效
保存配置后必须重启sshd才能生效:
sudo systemctl restart sshd(Ubuntu/Debian/CentOS 7+)
或
sudo service ssh restart(旧版系统)
验证方式:在另一台机器上尝试执行远程转发命令,例如:
ssh -R 8080:localhost:22 user@your-server
如果返回类似Warning: remote port forwarding failed for listen port 8080或连接后无监听,说明已成功禁用。
补充加固建议
仅关端口转发还不够,需配合其他权限控制防止绕过:
- 禁用密码登录:
PasswordAuthentication no,强制使用密钥认证 - 限制可登录用户:
AllowUsers admin@192.168.10.0/24,只允许可信网段的指定用户 - 禁止root直连:
PermitRootLogin no,避免高权限账户成为跳板入口 - 检查防火墙策略:确保SSH端口(默认22)不对外网全开放,仅限运维IP白名单访问
注意客户端配置不影响服务端策略
客户端的ssh_config或命令行参数(如-o PermitLocalCommand=yes)无法开启已被服务端禁用的功能。所有转发能力最终由sshd进程根据sshd_config裁定。因此加固重点永远在服务端,而非管控每台客户端。
本文共计501个文字,预计阅读时间需要3分钟。
请勿使用OpenSSH。
确认并修改sshd_config关键参数
编辑OpenSSH服务端主配置文件:
sudo vim /etc/ssh/sshd_config
确保以下几行存在且设置为no:
-
AllowTcpForwarding no—— 禁用所有TCP端口转发(含-L、-R、-D) -
GatewayPorts no—— 防止远程转发绑定到非127.0.0.1地址(即使AllowTcpForwarding被绕过也无效) -
PermitTunnel no—— 禁用SSH内置的点对点隧道(如tun设备) -
X11Forwarding no—— 关闭图形转发,避免X11相关侧信道利用
重启服务并验证是否生效
保存配置后必须重启sshd才能生效:
sudo systemctl restart sshd(Ubuntu/Debian/CentOS 7+)
或
sudo service ssh restart(旧版系统)
验证方式:在另一台机器上尝试执行远程转发命令,例如:
ssh -R 8080:localhost:22 user@your-server
如果返回类似Warning: remote port forwarding failed for listen port 8080或连接后无监听,说明已成功禁用。
补充加固建议
仅关端口转发还不够,需配合其他权限控制防止绕过:
- 禁用密码登录:
PasswordAuthentication no,强制使用密钥认证 - 限制可登录用户:
AllowUsers admin@192.168.10.0/24,只允许可信网段的指定用户 - 禁止root直连:
PermitRootLogin no,避免高权限账户成为跳板入口 - 检查防火墙策略:确保SSH端口(默认22)不对外网全开放,仅限运维IP白名单访问
注意客户端配置不影响服务端策略
客户端的ssh_config或命令行参数(如-o PermitLocalCommand=yes)无法开启已被服务端禁用的功能。所有转发能力最终由sshd进程根据sshd_config裁定。因此加固重点永远在服务端,而非管控每台客户端。

