内网穿透场景下 SSH 隧道配置优化与安全建议是什么

文章导读
在内网穿透场景下,最稳妥的做法是基于密钥认证建立反向隧道,并严格限制转发权限。这种方案适合需要长期稳定访问内网服务且具备公网服务器的场景,核心在于“最小权限原则”与“网络层隔离”。
📋 目录
  1. 安全配置实施步骤
  2. 建立与保持隧道
  3. 验证与排查
  4. 关键风险规避
A A

在内网穿透场景下,最稳妥的做法是基于密钥认证建立反向隧道,并严格限制转发权限。这种方案适合需要长期稳定访问内网服务且具备公网服务器的场景,核心在于“最小权限原则”与“网络层隔离”。

先说结论:优先使用密钥认证配合权限限制,避免直接暴露内网端口给公网,适合远程维护或访问内部特定服务。

  • 先判断:确认公网服务器是否允许端口转发及具体策略。
  • 优先做:配置专用用户、禁用密码登录、限制转发目标、配置防火墙。
  • 再验证:通过日志和端口状态确认隧道连通且无异常访问。

安全配置实施步骤

以下是基于 Linux 环境的标准实施流程,建议在测试环境验证后再应用于生产。

1. 创建专用隧道用户

不要在公网服务器上直接使用 root 或主账号做隧道中转。创建一个仅用于隧道的用户,并限制其 Shell 权限。由于我们将禁用密码认证,因此无需设置密码。

useradd -m -s /bin/false tunnel_user
# 注意:无需执行 passwd tunnel_user,避免密码认证风险

2. 配置 SSH 服务端权限

编辑公网服务器的 /etc/ssh/sshd_config,针对该用户做限制。关键点包括禁用密码登录、限制转发目标以及控制端口监听范围。

Match User tunnel_user
    ForceCommand true
    PermitOpen 内网服务 IP:内网服务端口
    AllowTcpForwarding yes
    X11Forwarding no
    PermitTunnel no
    PasswordAuthentication no
    # 若需外网访问隧道端口,开启 GatewayPorts,但必须配合防火墙限制
    # GatewayPorts yes

修改后重启 SSH 服务:systemctl restart sshd

3. 生成并部署密钥

在内网机器生成密钥对,将公钥放入公网服务器对应用户的 authorized_keys 中。确保私钥权限为 600。

ssh-keygen -t ed25519
ssh-copy-id -i ~/.ssh/id_ed25519.pub tunnel_user@公网服务器 IP

4. 防火墙安全配置

内网穿透场景下 SSH 隧道配置优化与安全建议是什么

若开启了 GatewayPorts 或需要限制访问来源,必须在防火墙层面进行限制。以下是 ufwiptables 的示例。

使用 ufw 限制特定 IP 访问隧道端口:

ufw allow from 可信外部 IP to any port 远程端口

使用 iptables 限制特定 IP 访问:

iptables -A INPUT -p tcp -s 可信外部 IP `--dport` 远程端口 -j ACCEPT
iptables -A INPUT -p tcp `--dport` 远程端口 -j DROP

建立与保持隧道

使用以下命令发起连接。添加 -o ServerAliveInterval=60 等参数保持连接活跃,防止因空闲断开。

ssh -N -R 远程端口:内网服务 IP:内网服务端口 -o ServerAliveInterval=60 -o ServerAliveCountMax=3 tunnel_user@公网服务器 IP

若需要保持隧道长期稳定,可结合 autossh 工具,并配置为 systemd 服务:

autossh -M 0 -N -R 远程端口:内网服务 IP:内网服务端口 -o ServerAliveInterval=60 tunnel_user@公网服务器 IP

验证与排查

1. 检查端口监听

在公网服务器上执行:

ss -tlnp | grep 远程端口

确认端口处于 LISTEN 状态。若未开启 GatewayPorts,默认只监听 localhost;若开启,则监听 0.0.0.0,此时必须确认防火墙规则生效。

2. 检查连接日志

查看 /var/log/auth.log/var/log/secure,确认只有预期的密钥登录记录,无密码爆破尝试。若发现密码登录尝试,检查 PasswordAuthentication 是否已生效。

内网穿透场景下 SSH 隧道配置优化与安全建议是什么

3. 功能测试

从外部尝试访问公网服务器的监听端口,确认能连通内网服务,且无法访问其他未授权的内网地址。

关键风险规避

1. GatewayPorts 与防火墙联动

默认 SSH 反向隧道只在公网服务器的 localhost 监听。若需外网访问,需开启 GatewayPorts yes,但这会让监听端口对所有 IP 开放。务必配合防火墙(ufw/iptables)限制源 IP,否则内网服务将直接暴露在公网。

2. 认证方式强制限制

严禁允许 root 用户建立隧道,严禁开启密码认证。配置中必须显式设置 PasswordAuthentication no,防止因密钥丢失或配置错误导致密码认证被启用。

3. 隧道断开与自愈

网络波动会导致隧道中断。生产环境建议使用 autossh 或配置 systemd 服务自动重启隧道进程,不要依赖手动维持。同时配置 ServerAliveInterval 检测连接状态。

4. 权限过大风险

未限制 PermitOpen 时,拥有隧道权限的用户可能转发任意内网端口。务必在配置中明确指定允许转发的目标 IP 和端口,并使用 ForceCommand true 禁止用户执行 Shell 命令。