1. sshd_config 中 AllowTcpForwarding 如何控制 SSH 端口转发权限?
sshd_config 中的 AllowTcpForwarding 如何控制 SSH 端口转发?为什么"no"仍是推荐的安全配置,与 PermitOpen、GatewayPorts 如何配合?
- 三种取值:yes/no/local(仅本地转发)/remote(仅远程转发)
- 端口转发被滥用的风险(隧道穿透、代理跳板)
- 与 PermitOpen 白名单、GatewayPorts 的配合
AllowTcpForwarding 控制 SSH 会话是否允许端口转发:yes 允许本地(-L)与远程(-R)转发;no 全部禁止;local 仅允许本地转发;remote 仅允许远程转发。安全视角:端口转发把 SSH 通道变成任意 TCP 隧道,是穿透防火墙、访问隔离网络、搭建跳板代理的常用手段——一旦账户泄露或业务被滥用,攻击者可通过转发进入内网任意目标,因此生产环境默认推荐 no(除非明确需要隧道场景)。注意:即使 no,SFTP 会话本身的流量不受影响(它是通道内部协议),且 no 不影响已认证用户使用 X11 转发(由 X11Forwarding 单独控制)。
配合参数:PermitOpen 可指定允许转发的目标白名单(如 PermitOpen 127.0.0.1:3306,仅允许转发到本地 MySQL),比整体 yes 更精细;GatewayPorts 控制远程转发是否绑定到所有接口(yes 会暴露到外部网络,风险更大,默认 no)。最小权限实践:能 no 则 no,确需转发时用 PermitOpen 收窄目标,并在防火墙层面同步限制;变更后需重启 sshd 或重载配置生效。
本题考察 SSH 隧道功能的安全治理。回答要点:三种取值语义、端口转发被滥用的风险与推荐 no 的理由、PermitOpen/GatewayPorts 的配合收窄方法,体现"默认最小化 + 按需开放"的安全配置思路。
# /etc/ssh/sshd_config
AllowTcpForwarding no
PermitOpen 127.0.0.1:3306
GatewayPorts no
sshd -t && systemctl reload sshd