进行iptables转发设置时,主要涉及nat表和filter表的FORWARD链。nat表用于网络地址转换(NAT),而filter表的FORWARD链用于控制经过系统的数据包的转发。编写转发规则之前,需要明确哪些网络流量需要被转发,包括源地址、目的地址、协议类型、端口号等。
#假设我们需要将到达防火墙(假设IP为192.168.1.1)的TCP 8080端口的流量转发到内网服务器(IP为192.168.10.10)的80端口上。
步骤1:启用IPv4转发
#可以通过修改/etc/sysctl.conf文件来实现:
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
步骤2:添加NAT规则
#在nat表的PREROUTING链中添加规则,将到达防火墙8080端口的流量重定向到内网服务器的80端口:
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.10.10:80
步骤3:添加FILTER规则
#在filter表的FORWARD链中添加规则,允许转发的流量通过:
iptables -A FORWARD -p tcp -d 192.168.10.10 --dport 80 -j ACCEPT
#同时,还需要设置默认策略,以确保其他未经允许的流量被丢弃:
iptables -P FORWARD DROP
#大多数情况下,我们还需要设置返回流量的NAT规则,以便内网服务器能够回复外部请求。这通常是通过在POSTROUTING链中添加SNAT或MASQUERADE规则来实现的:
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j MASQUERADE
(这里假设eth0是防火墙连接外网的接口)
#应用上述规则后,能够在外网通过访问防火墙的8080端口来访问内网服务器的80端口服务。可以使用curl或ping等工具进行测试(注意:HTTP服务通常不响应ICMP回显请求,因此ping可能不是测试HTTP服务的最佳方式)。