iptables指南:http://man.chinaunix.net/network/iptables-tutorial-cn-1.1.19.html
nat表:转换包的源或目标地址,此表有三条链,分别是: PREROUTING(路由前)、POSTROUTING(路由后)、OUTPUT
iptables -t nat -L -n Chain PREROUTING (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
PREROUTING链:主要做DNAT
POSTROUTING链:主要做SNAT (包括MASQUERADE [伪装])
OUTPUT链:从防火墙本身发出的包进行DNAT操作
注意:只有流的第一个包会被这个表的链匹配,其后的包会自动被做相同的处理。
DNAT:目的地址转换,用于发布内网服务器到公网。
SNAT:源地址转换,用于多个私有IP,共用一个公网IP上网。
MASQUERADE:与snat一样,多用于动态IP上网。
简单例子:
1)10.1.1.0/24 192.198.168.0/24 二个网段通过公网IP(222.111.1.2)访问www网站服务器(222.111.1.1)
2)允许公网WWW主机访问LinuxB(10.1.1.2)22端口
源地址转换
[root@fw /]# iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -j SNAT --to-source 222.111.1.2
[root@fw /]# iptables -t nat -A POSTROUTING -s 192.168.198.0/24 -j SNAT --to-source 222.111.1.2
目的地址转换
[root@fw /]# iptables -t nat -A PREROUTING -d 222.111.1.2 -p tcp --dport 22 -j DNAT --to-destination10.1.1.2:22
[root@fw /]# iptables -t nat -L -n
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- 0.0.0.0/0 222.111.1.2 tcp dpt:22 to:10.1.1.2:22
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
SNAT all -- 10.1.1.0/24 0.0.0.0/0 to:222.111.1.2
SNAT all -- 192.168.198.0/24 0.0.0.0/0 to:222.111.1.2
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
验证:
1.win7(192.168.198.1) 访问 222.111.1.1 的web服务
因为这台机是物理机,所以需要在cmd下设置:route add 222.111.1.1 192.168.198.250
route print
222.111.1.1 255.255.255.255 192.168.198.250 192.168.198.1 23
在www网站服务器抓包:tcpdump -i eth1 -vv
ping 222.111.1.1,从数据包看到,snat转换成功,是222.111.1.2与www服务通迅
telnet 222.111.1.1 80
2、在www使用ssh连接到内网主机10.1.1.2 的22端口
sslh 222.111.1.2这台机,其实是进入10.1.1.2这台主机