查看iptables表中链的命令,如查看filter表:
iptables -t filter -L
介绍iptables命令
iptables -t table 命令 chain rules -j target
table可以是filter nat mangle 默认为filter
命令
-P 定义默认策略
-A 在规则列表的最后增加一条规则
-I 在指定的位置插入一条规则
-D 删除一条规则
-R 替换规则列表中的某个规则
-F 删除表中所有的规则
以上规则从上往下匹配,匹配到合适的规则数据包则不继续往下匹配,如上图,filter表中匹配到INPUT链的icmp,则下面的规则不走。反之,如果INPUT链下面的规则都不匹配,则匹配默认策略(pollicy ACCEPT)
修改默认策略命令:
iptables -t filter -P FORWARD DROP//将上图的ACCEPT修改为DROP
以下内容请结合上图查看,否则内容可能看不懂
实例:
添加一条命令不允许ping通路由器本身,根据上一篇Netfilter框架可以知道Ping包通过链路层走INPUT链。
规则添加如下:
iptables -t filter -I INPUT -p icmp -j DROP
//-I INPUT表示将该规则插入到INPUT链的第一条规则
iptables -t filter -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP icmp -- anywhere anywhere
REJECT all -- anywhere anywhere
//删除该规则
iptables -t filter -D INPUT 1
iptables 匹配选项
-i 指定数据包从那个网络接口进入,如ppp0,eth0和eth1等
-o 指定数据包从哪个网络接口输出,如ppp0,eth0和eth1等
-p 协议类型 指定数据包匹配的协议,如TCP,UDP,和ICMP等
-s 指定数据包匹配的源地址
-d 指定数据包的目标地址
–sport 指定数据包匹配的源端口,可以使用“起始端口号:结束端口号”的格式指定一个范围的端口
– dport 目标端口号:指定数据包匹配的目标端口号,可以使用”起始端口号:结束端口号“的格式指定一个范围的端口
实例
/*初始环境
路由器LA口网络接口为br0,默认IP为192.168.0.3.
WAN口为eth2.2,上层路由器默认IP为192.168.5.1.默认路由走eth2.2
*/
# ip route
192.168.5.1 via 192.168.5.1 dev eth2.2 metric 1
255.255.255.255 dev br0 scope link
192.168.5.0/24 dev eth2.2 proto kernel scope link src 192.168.5.105 metric 11
192.168.0.0/24 dev br0 proto kernel scope link src 192.168.0.3
default via 192.168.5.1 dev eth2.2 equalize
//1.设置路由器网络接口禁止电脑Ping路由器
iptables -t filter -I INPUT -i eth2.1 -p icmp -j DROP
//因为:电脑ping路由器走的是INPUT链
//2.设置路由器网络接口禁止电脑ping通上层路由器192.168.5.1,但是能ping通路由器本身192.168.0.3
iptables -t filter -I FORWARD -o eth2.2 -p icmp -j DROP
//因为:电脑ping上层路由器,需要192.168.0.3的路由器做路由转发,走的是FORWARD链,然后通过eth2.2接口出去,查找上层路由192.168.5.1,禁止出去的网络接口转发数据即可
//禁止电脑访问192.168.0.3路由器的界面
iptables -t filter -I INPUT -p tcp --dport 80 -j DROP
//因为:http界面的目的端口是80
参考:
http://www.zsythink.net/archives/1764
注意:
只做SNAT时,我们并不用手动进行DNAT设置,iptables会自动维护NAT表,并将响应报文的目标地址转换回来。
配置DNAT时,并不能正常的DNAT,经过测试发现,将相应的SNAT同时配置后,即可正常DNAT。