iptables 匹配规则

本文详细介绍iptables防火墙的各种匹配规则,包括源地址、目的地址、协议、网卡、端口、报文内容、时间段、连接数及报文速率等多种匹配方式,并提供实际应用场景示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

iptables 匹配规则

1.    源地址匹配:

    a.    ip地址匹配        

        iptables -t filter -I INPUT -s 192.168.1.111,192.168.1.118 -j DROP

        用“,”分隔多个源地址,地址与“,”之间不能有空格

    b.    网段匹配

        iptables -t filter -I INPUT -s 192.168.1.0/24 -j DROP

    c.    反向匹配

        iptables -t filter -I INPUT ! -s 192.168.1.10 -j ACCEPT

        当源地址不是192.168.1.10时ACCEPT,注意!当源地址是192.168.1.10时,此规则匹配不上,不会因为此规则而拒绝!


2.    目的地址匹配:

    参数 -d ,使用方法与源地址匹配一致


3.    协议匹配:

    参数 -p :protocol

    iptables -t filter -A INPUT -p tcp -j ACCEPT

    -p支持的协议有:tcp, udp, udplite, icmp, icmpv6, ah, sctp等

     其中ping属于icmp协议,ssh属于tcp协议


4.    网卡匹配

     iptables -t filter -I INPUT -i eth0 -j ACCEPT

    参数 -i, -o, 其中-i表示入网卡,-o表示出网卡。-i参数可用于prerouting,forward,input。3个链。-o参数可用于forward,output,postrouting。3个链。也可用使用“!”表示反向匹配

 

5.    扩展匹配

    端口匹配:

    上述4种匹配规则都属于基本匹配,端口匹配属于扩展匹配,需要导入扩展模块并且需要指定匹配协议

    例:    iptables -t filter -I INPUT -p tcp -m tcp --dport 22 -j ACCEPT

    其中 -p 指定协议,-m 指定扩展模块,--dport/--sport 指定目的端口/源端口(注意双中横线)-m可缺省,默认使用与-p相同的模块

    其他用法:

        反向匹配: ! --dport 22       目的端口不等于22

        区间匹配:  --dport 22:25      目的端口在[22,25]之间

                           --dport 22:          目的端口在[22:65535]之间

                           --dport :80          目的端口在[0:80]之间

        离散端口匹配:   iptables -t filter -I INPUT -p tcp -m multiport --dport 1,2,3,4


    连续ip匹配:

    例:    iptables -t filter -I INPUT -m iprange --src-range 1.1.1.1-1.1.1.4 -j DROP

    也可以使用!来取反,如:iptables -t filter -I INPUT -m iprange ! --src-range 1.1.1.1-1.1.1.4 -j DROP


    报文内容匹配:
    例:    iptables -t filter -I INPUT -m string --algo bm --string "XXOO" -j ACCEPT
               含义:当报文中含有“XXOO”时,通过报文。字符串匹配算法使用 bm

               其中: --algo 指定匹配算法。包括bm与kmp。

                          --string 需要匹配的字符串


    时间段匹配:
    例:    iptables -t filter -I INPUT -m time --timestart 09:00:00 --timestop 19:00:00 -p tcp --dport 80 -j ACCEPT

               含义:在09到19点时间内,拒绝所有从80端口进入的tcp请求

                time 模块参数

                --timestart    起始时间

                --timeend    结束时间

                --weekdays    星期n,可选值有1到7,也有Mon,Tue,Wed,Thu,Fri,Sat,Sun。可以使用!取反

                --monthdays    一个月的第几天。可以使用!取反

                --datestart    一个月的起始天数

                --dateend  一个月的结束天数

    例:    iptables -t filter -I INPUT -m time ! --weekdays 6,7 ! --monthdays 22.23 --timestart 09:00:00 --timestop 19:00:00 --datestart 2018-10-10 --datestop 2018-12-12 -p tcp --dport 80 -j ACCEPT

                  含义:当(今天不是星期6或星期7)且(今天不本月的22或23好)且(当前时间在09到19点之间)且(今天的日志在2018-10-10到2018-12-12号之间)且(是TCP协议)且(目标端口是80)则接受请求

             
    连接数匹配:
    例:iptables -I INPUT -m connlimit --connlimit-above 2 --connlimit-mask 24 -j ACCEPT
    含义: 当ip地址是24位掩码,且连接数超过2则接受请求

             --connlimit-above    连接数超过n时

             --connlimit-upto    等价于 !--connlimit-above 当连接数未达到之低昂连接数时


    报文速率限制
    例:iptables -t filter -I INPUT -p icmp -m limit --limit 10/minute -j ACCEPT
    含义:当每分钟收到包数量在10以内,则接受请求

    但是当每分钟数量超过10个时,没有相应逻辑,当想要完成超过10请求每分钟则拒绝请求的逻辑需要配合一条拒绝逻辑使用。如:

    

    参数:

            --limit-brust   表示“令牌桶”算法中令牌的数量,默认为5

            --limit  结合令牌桶算法,可以理解为生成令牌的速率。白话可粗略理解为放过包的速率

                可选速率限制参数:

                    /second,/minute,/hour,/day表示n个请求每秒/分/小时/天

            其中:令牌桶逻辑为:每建立一个请求需要消耗一个令牌,请求释放时销毁令牌。当没有可用令牌时,请求被拒绝。在默认5令牌的情况下,10/minute 不是每6秒接受一个请求,而是每6秒生成一个令牌到令牌桶。只要桶中有令牌请求就可以通过。limit-brust表示令牌桶中的令牌最大值

    icmp协议限制
    常见的使用icmp协议的操作就是ping,可以通过此模块限制ping的接收与发送

    例:iptables -t filter -I INPUT -p icmp -m icmp --icmp-type 8/0 -j REJECT

           含义:不接受ping请求,但是可以执行ping操作

    --icmp-type表示 icmp请求类型,8/0分别表示type/code。细节见下图(来自朱双印先生的博客http://www.zsythink.net/archives/1588)

    请求state限制
    请求有5种状态:NEW,ESTABLISHED,RELATED,INVALID,UNTRACKED五种

    如果我们的机器不希望被别人主动连接,只希望接接受别人对我们的请求做出的相应,可这样做

    iptables -t filter -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

    表示接受ESTABLISHED和RELATED的请求,当然想要达到不响应别人的请求,需要在此之后加一条拒绝所有请求



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值