SSH 端口转发核查
SSH 端口转发能把某个端口的流量通过加密隧道转发出去,既是运维常用手段,也是绕过边界访问内网资源的常见通道。服务端由 AllowTcpForwarding、GatewayPorts、PermitOpen 控制,客户端用 -L、-R、-D 发起,判断时必须两侧一起看。
基本信息
| 服务端控制项 | AllowTcpForwarding、GatewayPorts、PermitOpen |
|---|---|
| 本地转发 | ssh -L,把本地端口映射到远端服务 |
| 远程转发 | ssh -R,把远端端口映射回本地服务 |
| 动态转发 | ssh -D,提供本地 SOCKS 代理 |
| 生效确认 | sshd -T | grep -i forward |
| 权限要求 | 修改服务端配置需要 root |
典型使用场景
- 排查加密隧道内的横向访问
- 确认服务器是否允许端口转发
- 分析未知监听端口的来源
- 与边界策略对照评估绕过风险
- 加固时按实际需要限制转发能力
最小示例
最小示例
ss -tlnp | grep -i sshd # 是否有 sshd 相关监听
sshd -T 2>/dev/null | grep -Ei 'allowtcpforwarding|gatewayports|permitopen'
grep -Rn 'AllowTcpForwarding\|GatewayPorts\|PermitOpen' /etc/ssh/sshd_config /etc/ssh/sshd_config.d/ 2>/dev/null
ps -ef | grep -E 'ssh .*-[LRD]' | grep -v grep # 检查出向转发进程
ss -tlnp | head -20 # 本机监听端口全貌
journalctl -u sshd --since today | tail -10 # 近期 sshd 相关记录配置与风险
| 配置或行为 | 含义 | 风险 |
|---|---|---|
| AllowTcpForwarding | all 允许、no 禁止,也可分别限制方向 | 开启时隧道可穿透网络边界 |
| GatewayPorts | 决定转发监听是否绑定全部地址 | 为 yes 时暴露面明显扩大 |
| PermitOpen | 限制转发目标地址 | 未设置时转发目标不受限 |
| ssh -L | 本地端口映射到远端服务 | 常用于访问内网数据库 |
| ssh -R | 远端端口映射回本地 | 可把内部服务暴露到外部 |
| ssh -D | 本地 SOCKS 代理 | 被用于搭建通用代理通道 |
GatewayPorts 为 yes 时远程转发会监听全部地址,风险面明显扩大;排查时要把该值与实际监听端口放在一起核对。
客户端一次 -R 或 -L 就能建立通道,本地不一定留下明显文件;结合进程列表与网络连接视图更容易发现。
禁止转发并不等同于禁止登录,反之亦然;加固要按实际需要分别设置转发能力与登录权限。
变更转发相关配置会立即影响现有隧道与业务连接;取证阶段只记录现状,处置动作另按流程执行。