iptables转发链配合DNAT/SNAT可将公网服务器变为内网服务安全跳板,需启用IP转发、设FORWARD默认DROP策略,通过PREROUTING做DNAT映射,再基于conntrack状态精准放行ESTABLISHED/RELATED及指定NEW连接,并可叠加源IP白名单与connlimit限连加固。

iptables 的转发链(FORWARD)配合 DNAT/SNAT,可以将一台公网服务器变成内网服务的安全跳板,实现访问控制、协议隔离和隐藏后端拓扑。关键不是简单打开转发,而是精准控制“谁、能访问哪个内网服务、走什么协议、是否限速/限连”。
开启 IP 转发并设置 FORWARD 默认策略
Linux 默认禁用 IPv4 转发,需显式启用:
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf && sysctl -p同时将 FORWARD 链默认策略设为 DROP,避免漏放流量:
iptables -P FORWARD DROP后续所有允许规则都必须显式添加,不依赖 INPUT/OUTPUT 链逻辑。
配置 DNAT 将外部请求映射到内网服务
在 PREROUTING 链做目标地址转换,把跳板机的监听端口转给内网真实服务器。例如:把跳板机 2222 端口的 SSH 请求转给 192.168.10.5:22:
iptables -t nat -A PREROUTING -p tcp --dport 2222 -j DNAT --to-destination 192.168.10.5:22注意:DNAT 只改目的 IP 和端口,不解决回程路由问题,必须配合 SNAT 或内网网关路由调整。
放行合法转发连接(状态跟踪是核心)
仅靠 DNAT 不够,FORWARD 链必须明确允许已建立或相关连接。推荐基于 conntrack 状态放行:
- 允许新连接发起者(如外网用户连跳板机端口)→ 需结合 INPUT 链限制源 IP
- 允许 ESTABLISHED,RELATED 流量双向通过 FORWARD 链
- 对 DNAT 后的连接,额外允许从跳板机发出、目标为内网服务的 NEW 连接
典型规则示例:
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPTiptables -A FORWARD -i eth0 -o eth1 -p tcp --dport 22 -m state --state NEW -j ACCEPT
其中 eth0 是外网接口,eth1 是内网接口;实际应替换为真实接口名,并严格限定协议与端口。
可选加固:源 IP 白名单 + 连接限制
跳板机本身应只接受可信运维来源访问,可在 INPUT 和 FORWARD 前置规则中叠加限制:
iptables -A INPUT -i eth0 -s 203.0.113.10/32 -p tcp --dport 2222 -j ACCEPTiptables -A INPUT -i eth0 -j DROP
对高频端口(如 SSH 跳转),还可加入连接数控制防爆破:
iptables -A INPUT -p tcp --dport 2222 -m connlimit --connlimit-above 3 --connlimit-mask 32 -j REJECT这样既保障可用性,又防止横向扫描和暴力尝试穿透跳板。

















