什么是基于iptables和SSH跳板机的转发?简而言之,这是利用Linux内核的网络地址转换(iptables/netfilter 的 NAT 功能)与SSH的端口转发功能(本地转发-L、远端转发-R、ProxyJump-J)相结合,实现从公网或跳板机向内网目标主机安全访问的一组技术。iptables负责在第3层进行端口映射(DNAT/PREROUTING、SNAT/POSTROUTING)并控制流量转发,SSH负责在加密隧道层第7层为特定应用建立安全通道,两者搭配可以满足不同安全和网络拓扑下的访问需求。
为什么要使用iptables与SSH跳板机组合?原因有三点:第一,安全性高:SSH提供加密认证,iptables可实现精细访问控制(仅允许特定源或端口),比直接暴露内网服务更安全。第二,适应性强:在没有VPN或复杂SDN的场景中,通过跳板机+iptables可以快速实现对数据库、管理接口等的临时或长期转发。第三,成本低且可控:使用开源工具(OpenSSH、iptables、autossh)即可搭建,可配合开源堡垒机或云厂商堡垒机进行集中审计,满足合规要求。
怎么实现(步骤与脚本示例)——下面给出常见场景的实现示例,并在适当位置推荐产品与服务以便生产环境使用。
假设跳板机公网IP为1.2.3.4,内网目标主机IP为10.0.0.5,目标服务为22端口(SSH)。在跳板机上执行:
# 开启IP转发(临时)
echo 1 > /proc/sys/net/ipv4/ip_forward
# 永久开启(/etc/sysctl.conf)
# net.ipv4.ip_forward = 1
# 添加DNAT规则:将公网2222端口转发到内网10.0.0.5:22
iptables -t nat -A PREROUTING -p tcp -d 1.2.3.4 --dport 2222 -j DNAT --to-destination 10.0.0.5:22
# 允许转发流量(根据策略限定源IP更安全)
iptables -A FORWARD -p tcp -d 10.0.0.5 --dport 22 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p tcp -s 10.0.0.5 --sport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT
注意:生产环境建议配合源IP白名单、限速、日志与入侵检测(如fail2ban)使用。
如果内网主机在NAT后面,无法被直接DNAT访问,可以从内网主机主动建立到跳板机的反向SSH隧道:
# 在内网主机上(10.0.0.5),建立反向隧道,把本地3306暴露到跳板机的3307端口
ssh -N -R 127.0.0.1:3307:127.0.0.1:3306 user@1.2.3.4
# 如果希望外网也能访问跳板机上的3307(不是仅限loopback),在跳板机的sshd_config中设置:
# GatewayPorts yes
# 然后重启sshd
更可靠的做法是使用autossh维持隧道并用systemd管理:
# 安装autossh,并建立持久化systemd单元(示例)
/etc/systemd/system/autossh-db-tunnel.service:
[Unit]
Description=autossh reverse tunnel for mysql
After=network.target
[Service]
User=dbuser
Environment="AUTOSSH_GATETIME=0"
ExecStart=/usr/bin/autossh -M 0 -N -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -R 0.0.0.0:3307:127.0.0.1:3306 user@1.2.3.4
Restart=always
[Install]
WantedBy=multi-user.target
这样,外部访问跳板机1.2.3.4:3307就能到达内网数据库。
如果只是个人运维访问,在本地使用SSH本地转发即可:
# 将本地3307端口映射到内网数据库(通过jump)
ssh -L 3307:10.0.0.5:3306 -J user@1.2.3.4 user@10.0.0.5
# 或使用ProxyJump简化多跳
ssh -J jumpuser@1.2.3.4 targetuser@10.0.0.5
本地转发适用于临时调试,不需要在跳板机上开放额外端口。
1. 什么:本文介绍的是通过iptables的NAT规则和SSH的端口转发功能,把跳板机作为中介将外部流量安全地引导到内网目标主机的技术组合。iptables负责第3层的DNAT/SNAT和流量策略,SSH负责加密隧道与认证。
2. 为什么:这种组合在没有VPN或复杂网络重构的情况下能够快速实现安全访问,兼顾灵活性与成本,便于运维和审计。
3. 怎么做:提供了三类实现方式——跳板机上的iptables DNAT转发、内网到跳板机的反向SSH隧道(建议用autossh持久化)、以及本地SSH转发/ProxyJump的临时接入。示例脚本包含sysctl开启ip_forward、iptables PREROUTING与FORWARD规则、ssh -R/-L命令和autossh的systemd单元模板。并推荐在生产中配合堡垒机(如JumpServer、云厂商堡垒机)、会话管理工具(Boundary、AWS SSM)以及额外的入侵防护与访问控制。
最后提醒:无论采用哪种方式,都应遵循最小权限原则、使用密钥+MFA、限制IP和端口范围、做好日志与告警,以确保跳板机既能提供便捷访问,也不会成为安全薄弱环节。