zoukankan      html  css  js  c++  java
  • 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
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如有问题或建议,请多多赐教,非常感谢。
  • 相关阅读:
    [转]char、varchar、nchar、nvarchar的区别
    【转】Asp.net 2.0中页的生存周期(Lifecycle)和动态控件 [.Net]
    git免登录sshkey
    ios8,xcode6 周边
    iOS 推送证书
    Lazarus中TreeView导出XML以及XML导入TreeView
    flac文件提取专辑封面手记
    Lazarus解决含中文文件名或路径的使用问题
    使用PowerShell管理Windows8应用
    thbgm拆包【in progress】
  • 原文地址:https://www.cnblogs.com/ccku/p/13683201.html
Copyright © 2011-2022 走看看