iptables的--limit和--limit-burst规则匹配的使用

 一. 前言

        --limit和--limit-burst规则匹配是iptables对数据包众多的匹配的方式中的一种,使用之前需要用"-m limit",表示使用limit模块。limit模块主要是用于限制一个时间段内进入系统的数据包,主要的用途是减少泛洪攻击的影响。

        --limit和--limit-burst是配合使用的,如果iptables规则只使用了--limit,则表示使用--limit-burst的默认值为5。如果只指定了--limit-burst,则--limit默认值3/hour。如下所示:

[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type echo-reply -m limit --limit 3/m  -j DROP
[root@localhost ~]# iptables -A INPUT -m limit --limit-burst 8 -j DROP 
[root@localhost ~]# 
[root@localhost ~]# iptables -nvL
Chain INPUT (policy ACCEPT 12 packets, 792 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DROP       icmp --  *      *       0.0.0.0/0            0.0.0.0/0            icmptype 0 limit: avg 3/min burst 5
    8   668 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            limit: avg 3/hour burst 8

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 7 packets, 996 bytes)
 pkts bytes target     prot opt in     out     source               destination 

二. --limit和--limit-burst的使用

        还是使用示例效果的方式来讲解--limit和--limit-burst的作用。

示例如下

iptables -A INPUT -p icmp --icmp-type echo-reply -m limit --limit 3/minute --limit-burst 5 -j DROP

        指令的-p icmp --icmp-type echo-reply表示该指令是处理本主机向外ping的主机返回的数据包,--limit指定的单位时间是每分钟3个包,--limit-burst指定为5,指令的动作是对匹配的包丢弃。  

效果如下所示

[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type echo-reply -m limit --limit 3/minute --limit-burst 5 -j DROP
[root@localhost ~]# 
[root@localhost ~]# ping 192.168.1.105
PING 192.168.1.105 (192.168.1.105) 56(84) bytes of data.
64 bytes from 192.168.1.105: icmp_seq=6 ttl=64 time=0.266 ms
64 bytes from 192.168.1.105: icmp_seq=7 ttl=64 time=0.161 ms
64 bytes from 192.168.1.105: icmp_seq=8 ttl=64 time=0.164 ms
64 bytes from 192.168.1.105: icmp_seq=9 ttl=64 time=0.176 ms
64 bytes from 192.168.1.105: icmp_seq=10 ttl=64 time=0.176 ms
64 bytes from 192.168.1.105: icmp_seq=11 ttl=64 time=0.162 ms
64 bytes from 192.168.1.105: icmp_seq=12 ttl=64 time=0.175 ms
64 bytes from 192.168.1.105: icmp_seq=13 ttl=64 time=0.175 ms
64 bytes from 192.168.1.105: icmp_seq=14 ttl=64 time=0.160 ms
64 bytes from 192.168.1.105: icmp_seq=15 ttl=64 time=0.160 ms
64 bytes from 192.168.1.105: icmp_seq=16 ttl=64 time=0.171 ms
64 bytes from 192.168.1.105: icmp_seq=17 ttl=64 time=0.177 ms
64 bytes from 192.168.1.105: icmp_seq=18 ttl=64 time=0.165 ms
64 bytes from 192.168.1.105: icmp_seq=19 ttl=64 time=0.162 ms
64 bytes from 192.168.1.105: icmp_seq=20 ttl=64 time=0.156 ms
64 bytes from 192.168.1.105: icmp_seq=22 ttl=64 time=0.132 ms
64 bytes from 192.168.1.105: icmp_seq=23 ttl=64 time=0.193 ms
64 bytes from 192.168.1.105: icmp_seq=24 ttl=64 time=0.185 ms
64 bytes from 192.168.1.105: icmp_seq=25 ttl=64 time=0.162 ms
64 bytes from 192.168.1.105: icmp_seq=26 ttl=64 time=0.181 ms
64 bytes from 192.168.1.105: icmp_seq=27 ttl=64 time=0.177 ms
64 bytes from 192.168.1.105: icmp_seq=28 ttl=64 time=0.152 ms
64 bytes from 192.168.1.105: icmp_seq=29 ttl=64 time=0.136 ms
64 bytes from 192.168.1.105: icmp_seq=30 ttl=64 time=0.135 ms
64 bytes from 192.168.1.105: icmp_seq=31 ttl=64 time=0.170 ms
64 bytes from 192.168.1.105: icmp_seq=32 ttl=64 time=0.156 ms
64 bytes from 192.168.1.105: icmp_seq=33 ttl=64 time=0.162 ms
64 bytes from 192.168.1.105: icmp_seq=34 ttl=64 time=0.173 ms
64 bytes from 192.168.1.105: icmp_seq=35 ttl=64 time=0.206 ms
64 bytes from 192.168.1.105: icmp_seq=36 ttl=64 time=0.155 ms
64 bytes from 192.168.1.105: icmp_seq=37 ttl=64 time=0.150 ms
64 bytes from 192.168.1.105: icmp_seq=38 ttl=64 time=0.175 ms
64 bytes from 192.168.1.105: icmp_seq=39 ttl=64 time=0.194 ms
64 bytes from 192.168.1.105: icmp_seq=40 ttl=64 time=0.173 ms
64 bytes from 192.168.1.105: icmp_seq=42 ttl=64 time=0.163 ms
64 bytes from 192.168.1.105: icmp_seq=43 ttl=64 time=0.181 ms
64 bytes from 192.168.1.105: icmp_seq=44 ttl=64 time=0.194 ms
64 bytes from 192.168.1.105: icmp_seq=45 ttl=64 time=0.182 ms

        从结果来看,前面的5个icmp包都没有收到回复,并且第21和41个包没有收到回复。

结果解析

        在这里需要引入一个令牌桶的概念,一个令牌桶中可以装若干个令牌。--limit-burst表示令牌桶的容量以及装有默认的令牌的数量,当令牌桶中有令牌时,将会匹配到数据包,并且令牌桶中的令牌的数量减1,所以,可以看到因为令牌桶中的数量默认为5,前面的5个包icmp回包都被匹配到了,都被DROP了。

        --limit 3/minute表示每分钟向令牌桶中加入3个令牌,所以每20秒,向令牌桶中加入一张令牌,所以我们可以看到,第21和41个包都被匹配到了。注意,令牌每隔20秒会向令牌桶中加入一张令牌,如果当前没有匹配的数据包,令牌不会减少,而是会增加到--limit-burst指定到令牌数量,因为--limit-burst指定的是令牌桶的大小,所以,数量增加--limit-burst指定到令牌数量后,不会继续增加。可知本例中在20*5 = 100秒后,令牌桶的数量会重新装满。

三. 总结

        limit模块引入了令牌桶的机制,使用--limit-burst指定令牌桶的大小,当令牌桶中有令牌时,则可以匹配到数据包,如果没有了令牌,则需要等到--limit指定的时间单位间隔向令牌桶加入令牌,才能继续匹配数据包。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值