iptables -A INPUT -p tcp -s 10.1.2.187 -j ACCEPT
将10.1.2.187加入允许范围
iptables -t nat -A POSTROUTING -j SNAT --to-source 10.1.2.1
参数——
-A: 添加 (跟链)
-I: 插入
-p: 跟协议
-s: 源IP
-d: 目标IP
-j: 操作行为
-t: 加表
--to-source:SNAT用,表示改成的SNAT源地址
--to-destination:DNAT用,表示改成的DANT目标地址
IPTABLE 分INPUT OUTPUT FORWORD PREROUTING POSTROUTING (链)
具体可在网上查阅。
查看当前iptable列表:
iptables -L
iptables -t nat -L (nat表里内容)
iptables -L -n 显示IP,不自动解析为域名
iptables -L --line-numbers 显示编号 iptables -F 删除filter表内容 iptables -F -t nat 删除nat表内容
SNAT一般用于到外网,出去
DNAT用于从外面进来的
SNAT eg:
iptables -t nat -I POSTROUTING -s 10.1.0.0/24 -j SNAT --to-source 192.168.0.5
将内网10.1网段映射为192.168.0.5出去
也可以这样:
iptables -t nat -I POSTROUTING -s 10.1.0.0/24 -j SNAT --to-source 192.168.0.5-192.168.0.245
将本地映射到一段IP地址上(可以做攻击用^^)
上述例子的同样功能:iptables -t nat -I POSTROUTING -s 10.1.0.0/24 -j NETMAP --to 192.168.0.0/24
DNAT eg:
iptables -t nat -A PREROUTING -d ROUTEIP -p tcp --dport 80 -j DNAT --to-destination WEBIP
ROUTEIP表示防火墙(路由器)的公网IP
WEBIP 表示内网WEB服务器IP
这条规则表示当外网访问本地的HTTP80端口时,自动转到内网的WEB服务器上。等于是把web服务器做了个映射到公网上。 当仅仅需要从外网访问内网时,这样是足够了,但是如果需要从内网机器,通过WEB服务器的外网IP访问WEB服务器的话,还需要加条SNAT规则: iptables -t nat -A POSTROUTING -p tcp -d WEBIP --dport 80 -j SNAT --to ROUTEIP 将访问WEB服务器的数据包的源IP地址强制改为网关IP。否则会出现无法访问的问题。 简单分析下原因: 假设内网 192.168.0.10->需要从外部IP访问WEB的主机 192.168.0.254->WEB服务器内部IP地址 192.168.0.1->网关 (外部IP为202.96.22.22) 当192.168.0.10访问202.96.22.22的WEB服务时,根据网关上的DNAT,数据包的目的IP由202.96.22.22被转为192.168.0.254。254收到数据包后,发现是10发送过来的,那么他会直接回数据包给192.168.0.10,但是10收到包后发现包的来源不是自己想要的202.96.22.22,那这个包就会被直接丢弃。解决办法就是在254不要直接发包给10,而是返回给网关,让网关原路返回给10机器。这样,只要将发往254请求WEB服务的数据包的源IP都改为网关的IP,192.168.0.1,就可以解决这个问题。 即 iptables -t nat -A POSTROUTING -p tcp -d 192.168.0.254 --dport 80 -j SNAT --to 192.168.0.1 还有个更好的解决办法,独立出一个网段,也就是常说的DMZ区,放置各SERVER服务器。 http://www.bkshanghai.com/index.aspx
iptables-save >/usr/local/work/iptables