4.iptables的匹配条件(一)

-s选项作为匹配条件,可以匹配报文的源地址,一次指定多个时,用“逗号”隔开即可。

也可以将匹配条件取反,只需要在-s选项前加一个“!”即可

使用“!”取反后表示,报文中源地址只要不是为10.10.10.16即满足条件,就接受报文;那么使用16主机向本机发送ping请求,能得到回应吗?

结果是可以的,因为上述中,filter表的INPUT链中只有一条规则,只要源报文中源IP地址不是10.10.10.16,那么就接受此报文,但没有任何一条规则指明源IP地址是10.10.10.16时,该执行怎样的动作,当来自10.10.10.16的报文经过INPUT链中,并不能匹配上述的规则,于是报文就继续匹配后面的规则,此时只有一条规则,报文就会匹配当前链的默认动作ACCEPT了。

匹配条件:目标IP地址

使用-d选项指定“目标地址”作为匹配条件

拒绝16主机发来的报文,目的地址为本机的15地址,我们可以指定目标地址作为匹配条件:

如果我们不指定任何的目的地址,则目的地址默认为0.0.0.0./0,同理,我们如果不指定源地址,源地址默认为0.0.0.0/0。

与-s选项一样,-d选项也可以指定多个IP地址,使用逗号隔开,也可使用“叹号”取反。

当一条规则中有多个匹配条件时,这些匹配条件,默认存在“与”的关系

匹配条件:协议类型

使用-p选项,指定需要匹配的报文协议类型

示例:拒绝来自16的tcp协议类型的请求

使用ssh连接15主机(ssh协议属于tcp协议类型)

没有收到15主机的任何回应

那么我们使用ping命令(使用icmp协议),验证是否能够ping通15


结果是能够ping通的

-p支持的匹配协议:

# centos6:
tcp, udp, udplite, icmp, esp, ah, sctp
# centos7:
tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh

不使用-p选项指定协议类型时,默认表示所有的协议类型都会被匹配到,与-p all效果相同。

匹配条件:网卡接口

当本机有多块网卡时,可以使用-i选项,匹配报文是通过哪块网卡进入本机。

当前主机的网卡为eth0

假如想要拒绝由网卡eth0流入的ping请求,可以使用如下设置:

-i选项只能用于PREROUTING链、INPUT链、FORWARD链;因为它只是用于判断报文是从哪个网卡流入的,所以只能在“数据流入流向”的链中与"FORWARD"链中存在。

-o选项匹配报文将由哪块网卡流出;所以,只能用于FORWARD链、OUTPUT链
POSTROUTING链。

匹配条件:端口

“源端口”和“目标端口”属于扩展条件;而如果想要使用扩展匹配条件,则需要依赖一些扩展模块。

例如,我们想要使用iptables设置一条规则,拒绝来自10.10.10.16的ssh请求,我们就可以拒绝16主机上的报文能够发往本机的22号端口,这时,就需要用到“目标端口”选项。

--dport选项可以匹配报文的目标端口;使用--dport选项时,必须事先指定了使用哪种协议,即必须先使用-p选项。

上图中,使用--dport选项指定了匹配报文的目标端口,而在--dport之前,使用了-m选项,指定了对应的扩展模块为tcp;也就是说,如果我们想要使用--dport这个扩展匹配条件,则必须依靠某个扩展模块完成。

但在上例中,可以省略-m选项;iptables默认在使用扩展匹配条件时,如果没有使用-m指定使用哪个扩展模块,会默认使用“-m 协议名”。

注意:如果扩展匹配条件与-p对应的协议相同,则可以省略-m选项,否则则不能省略。

--sport选项可以指定源端口

省略了-m tcp选项

扩展匹配条件同样是可以使用“ ! ”进行取反的;比如“! --dport 22”,表示目标端口不是22的报文将会匹配到。

例:拒绝除了目标端口为5901报文之外的所有报文流入本机

指定源端口和目的端口都能够指定端口范围,比如 --dport 22:25表示目标端口为22到25之间的所有端口。

使用“multiport”可以指定多个离散的、不连续的端口,每个端口之间用逗号隔开。

multiport扩展模块只能用于tcp协议和udp协议,即配合 -p tcp-p udp 使用。

命令总结

1.基本匹配条件

-s # 用于匹配报文的源地址

-d # 用于匹配报文的目的地址

-p # 用于匹配报文的协议类型

-i # 用于匹配报文是从哪个网卡接口流入本机的

-o # 用于匹配报文要从哪个网卡接口流出本机

2.扩展匹配条件总结

-p tcp -m tcp --sport # 用于匹配tcp协议报文中的源端口,冒号指定一个连续的端口范围
-p tcp -m tcp --dport # 用于匹配tcp协议报文中的目的端口

-p tcp -m multiport --sport # 用于匹配报文的源端口,可以指定离散的多个端口号,端口号之间用逗号隔开
-p tcp -m multiport --dport # 用于匹配报文的目的端口,可以指定离散的多个端口号,端口号之间用逗号隔开
作者:ccku
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如有问题或建议,请多多赐教,非常感谢。
原文地址:https://www.cnblogs.com/ccku/p/13683201.html