客户端 nat服务器 web服务器
eth0:192.168.200.156 eth0:192.168.200.158 eth0:192.168.100.254
网关:192.168.200.158 eth1:192.168.100.10
所有Ip都在一个交换机下面
iptables 配置如下:
#清除默认规则
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
iptables -t nat -X
iptables -t nat -Z
#默认操作
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
#INPUT基本规则
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -m state --state INVALID -j DROP
#FORWARD基本规则
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -m state --state INVALID -j DROP
#放行所有通过lo的数据包
iptables -A INPUT -i lo -j ACCEPT
#icmp
iptables -A INPUT -p icmp --icmp-type any -s 192.168.200.0/24 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type any -s 192.168.100/24 -j ACCEPT
#sshd
iptables -A INPUT -s 192.168.200.0/24 -i eth1 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 192.168.200.0/24 -i eth1 -p udp --dport 22 -j ACCEPT
#nginx or httpd
iptables -A INPUT -s 192.168.200.0/24 -i eth1 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -s 192.168.200.0/24 -i eth1 -p udp --dport 80 -j ACCEPT
#修改数据包的来源ip
iptables -t nat -A POSTROUTING -s 192.168.200.0/24 -j SNAT --to-source 192.168.100.10
#放行的ip
iptables -A FORWARD -s 192.168.200.156 -j ACCEPT
service iptables save
service iptables restart
#iptables-save 查看规则比iptables -L更好读懂
分析:
1)客户端访问web,mangle表不考虑,首先通过PREROUTING链表,对于192.168.200.156发送的数据包来说,没有对PREROUTING链表的规则,则放行,经过路由判断,目的地址为
192.168.100.254,则通往B,此时会经过FORWARD链表,由下面iptables配置知,这个数据包将被放行,再经过POSTROUTING链表,可知,这个数据包的来源将被改为192.168.100.10,然后被发送出到web
2)web通过客户端发来的数据包,分析到这个数据包的来源为192.168.100.10,则web回应一个数据包给nat服务器,首先经过PREROUTING链表,web知道了192.168.100.10这个ip地址就能将数据包发送到客户端手中只需要 iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT就行,具体原因是怎么将目的地址192.168.100.10改为客户端的ip地址的,估计是nat服务器上有端口映射等原因,不是很清楚