iptables实现端口转发
实现使用防火墙9898端口访问内网front主机的22端口(ssh连接)
1. 防火墙配置(lb01)
# 配置iptables
# 这条命令的作用是将所有目的地为192.168.100.155且目标端口为19898的TCP数据包的目标IP地址改为10.0.0.148,并将目标端口改为22
iptables -t nat -A PREROUTING -d 192.168.100.155 -p tcp --dport 19898 -j DNAT --to-destination 10.0.0.148:22
# 注意!需要配置一条出来的SNAT
# 没有这一条SNAT,进出流量的端口是不匹配的,因为iptables没有会话保持功能,是包匹配的
iptables -t nat -A POSTROUTING -d 192.168.100.148 -p tcp --dport 22 -j SNAT --to-source 192.168.100.155:19898
- iptables:这是用来设置、维护和检查Linux内核防火墙的命令行工具。
- -t nat:指定要操作的是nat表。iptables有多个表,每个表包含不同的链,nat表用于处理网络地址转换。
- -A PREROUTING:-A表示向链中添加一条规则,PREROUTING链在所有数据包进入本机之前应用,这是设置DNAT的理想位置。
- -d 192.168.100.155:指定目标IP地址为192.168.100.155,即只有目的地址为这个IP地址的数据包才会受到这条规则的影响。
- -p tcp:指定协议为TCP。
- –dport 9898:指定目标端口为9898,即只有目标端口为9898的TCP数据包才会受到这条规则的影响。
- -j DNAT:-j表示跳转目标,DNAT表示执行目标地址转换。
- –to-destination 10.0.0.148:指定转换后的目标IP地址为10.0.0.148。这意味着
所有目的地为192.168.100.155且目标端口为9898的TCP数据包
,在经过NAT转换后,它们的目标IP地址都会被改为10.0.0.148:22
。
2. 内网服务器配置(front)
无需配置
测试
-
未配置策略
ssh连接请求超时
-
已配置策略
ssh正常访问成功
需要注意的是,必须配置回程的SNAT,因为iptables没有会话保持功能,是包过滤防火墙。若不配置,会导致来回的端口不一致而被丢弃。