iptables 所在的服务器 web1 web2 客户端
eth0:192.168.100.10 eth0:192.168.100.254 eth0:192.168.100.253 192.168.200.156
eth1:192.168.200.158
web1中httpd.conf里Listen:80
web2中httpd.conf里Listen:8888
目的:客户端访问192.168.100.10:80 端得到192.168.100.254的web界面,访问192.168.100.10:8888端得到的是192.168.100.253:8888的web界面,从而实现
端口转发功能
#清楚默认规则
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
#修改数据包目的地址
iptables -t nat -A PREROUTING -p tcp -d 192.168.200.158 --dport 80 -j DNAT --to 192.168.100.254:80
iptables -t nat -A PREROUTING -p tcp -d 192.168.200.158 --dport 8888 -j DNAT --to 192.168.100.253:8888
#修改数据包来源地址
iptables -t nat -A POSTROUTING -p tcp -d 192.168.100.254 --dport 80 -j SNAT --to 192.168.100.10
iptables -t nat -A POSTROUTING -p tcp -d 192.168.100.253 --dport 8888 -j SNAT --to 192.168.100.10
#FORWARD设置
iptables -A FORWARD -p tcp -d 192.168.100.254 --dport 80 -j ACCEPT
iptables -A FORWARD -p tcp -d 192.168.100.253 --dport 8888 -j ACCEPT
分析:
1)当客户端192.168.200.156访问192.168.200.158:80时,首先客户端发的数据包会经过PREROUTING链,根据上面iptables配置可知,目的地址被改为192.168.100.254:80
r再经过路由判断数据包会经过上图B,然后经过FORWARD链,有iptables配置知此数据包会被放行,然后经过POSTROUTING链,有iptables配置可知,来源被修改为192.168.100.10
然后数据包通过iptables所在的服务器转发到了web1
2)web1通过分析客户端发来的数据包,可知web1发送的数据包目的地址为192.168.100.10,首先此数据包会经过PREROUTING链,此时Iptables配置里没有对来自
192.168.100.254:80的规则,则放行,经过路由判断,目的地址为192.168.100.10正好是iptables所在的机器此时经过端口好等一系列的映射就能返回到客户端手中(具体过程不清楚,web返回的数据只要知道目的地址192.168.100.10就能返回)