在上一篇博客中我已经说了使用-s作为匹配条件,可以匹配单个源地址,但实际上可以匹配多个源地址
iptables -t filter -I INPUT -s 192.168.137.101,192.168.137.102 -j REJECT
#这个表示来自101,102的报文全部拒绝
同样还可以指定网段
iptables -t filter -I INPUT -s 192.168.0.0/16 -j REJECT
#在这个网段的所有都不能访问(注意,如果是ssh访问的可能会掉线)
还可以取反
iptables -t filter -I INPUT ! -s 192.168.137.104 -j ACCEPT
#源地址不是104的都给通过(注意,不代表104就不能通过,104需要额外设定规则,如果不设定则根据默认策略匹配。)
匹配目标地址
比如说本台机器有两个ip,103,110,我们现在要禁止110的接受报文,只允许103的接收来自104的报文
iptables -t filter -I INPUT -s 192.168.137.104 -d 192.168.137.110 -j REJECT
#表示源地址为104,目标地址为103的报文都拒绝
还需要注意,-d也可以进行取反操作,但-d和-c的取反操作和同时指定多个ip的动作不可以同时执行
按照协议匹配
iptables -t filter -I INPUT -s 192.168.137.104 -p tcp -j REJECT
#-p表示来自104的协议为tcp的报文都被拒绝,比如说ssh
(icmp对应的ping)
-p选项都支持哪些协议?
在centos6中:
tcp,udp,udplite,icmp,esp,ah,sctp
centos7中:
tcp,udp,udplite,icmp,icmpv6,esp,ah,sctp,mh
当不适用-p时,默认匹配所有的协议,相当于-p all
网卡接口匹配
由于主机可能拥有多个网卡,所以我们可以通过网卡来匹配
iptables -t filter -I INPUT -i eth0 -p icmp -s 192.168.137.104 -d 192.168.137.103 -j reject
#表示源地址为104,目标地址为103,协议为icmp的报文若是通过eth0访问则拒绝。-i表示指定网卡。
由于-i是判断报文从哪个网卡流入,所以只能用于的链有:
路由前(PREROUTING),进入(INPUT),转发(FORWARD)
同样的-o就很好理解,它时判断从哪个网卡流出,能用的链有:
路由后(POSTROUTING),流出(OUTPUT),转发(FORWARD)
扩展匹配条件
源端口,目标端口
使用选项 –dport可以指定目标端口,–sport指定源端口
在使用扩展匹配条件的时候。必须先指定相应的扩展模块,用-m
iptables -I INPUT -s 192.168.137.104 -p tcp -m tcp --dport 22 -j REJECT
#表示来自104的,若是目标端口为22的报文会被拒绝。 -p为协议,-m为调用的扩展模块。
#另外,若是-m指定的模块与-p的协议名相同,我们可以省略-m
iptables -I INPUT -s 192.168.137.104 -p tcp --dport 22 -j REJECT
扩展匹配条件是可以取反和取连续端口的
iptables -I INPUT -s 192.168.137.104 -p tcp ! --dport 22:25 -j REJECT
#表示,来自104,协议为tcp并且端口不是22:25的报文将被拒绝
指定离散端口
使用-m multiport指定多个离散端口
iptable -I INPUT -d 192.168.137.103 -p udp -m multiport --sport 137,138 -j REJECT