杂学记录:iptables中限速的limit,limit-burst功能研究

从iptables指南上看出limit和limit-burst最初不是拿来限速的。是拿来限制日志记录的次数的(iptables的logging功能),比如一秒1w个包,通过iptables的匹配了logging规则,都记录下来,log信息会无比庞大。

在logging的规则中加上limit之后,可以有每秒/分/小时记录多少次的效果

而利用iptables限速,可以把limit规则加到INPUT OUTPUT的规则上

比如 iptables -A INPUT -i wlan0 -m limit --limit 1000/s -j ACCEPT

   iptables -A INPUT -i wlan0 -j DROP

这两条规则一起,可以有限制没秒通过无线网卡上传包的数目为1000,因为INPUT 进来的包,进行ACCEPT的次数被限制为1000次每秒

OUTPUT也是如此。

另外需要注意的是第二条规则iptables -A INPUT -i wlan0 -j DROP  如果没有它,限速不成功。

因为在iptables里,一个包不符合某条规则,就会由后面的规则来处理,如果都不符合,就由缺省的策略处理。所以如果limit后面没规则了,默认规则就是全量ACCEPT,也就是每秒ACCEPT规则匹配超过1000次之后,那些包,都由默认规则(ACCEPT)来处理,所以无法限速。


关于limit-burst

從剛才的例子中,大家已經察覺到首5個封包能順利進入網絡,這是因為「--limit-burst」 的預設值為5。「--limit-burst」代表起首共有多少個封包能符合此規則,它是一個累減器,每當有一個合符規則的封包經過時,這個累減器便會自 動減一,直到零為止便否定本來符合規則的封包。此後就會根據「--limit」來限制封包流量,如上一節所提及一般。


个人理解limit-burst是个初始值..匹配次数过了这个初始值,之后的就由limit xxx/s来控制了 


下面是iptables指南中的解释

6.4.3.1. Limit match

这个匹配操作必须由-m limit明确指定才能使用。有了它的帮助,就可以对指定 的规则的日志数量加以限制,以免你被信息的洪流淹没哦。比如,你可以事先设定一个限定值,当符合条件 的包的数量不超过它时,就记录;超过了,就不记录了。我们可以控制某条规则在一段时间内的匹配次数 (也就是可以匹配的包的数量),这样就能够减少DoS syn flood攻击的影响。这 是它的主要作用,当然,还有很多其他作用(译者注:比如,对于某些不常用的服务可以限制连接数量,以 免影响其他服务)。limit match也可以用英文感叹号取反,如:-m limit ! --limit 5/s表示在数量超过限定值后,所有的包都会被匹配。

(译者注:为了更好地理解这个匹配操作,我们通过一个比喻来解释一下。原文也做了类似地比喻,但 我觉得对于初学者不易理解,故未采用。)limit match的工作方式就像一个单位大门口的保安,当有人要 进入时,需要找他办理通行证。早上上班时,保安手里有一定数量的通行证,来一个人,就签发一个,当通 行证用完后,再来人就进不去了,但他们不会等,而是到别的地方去(在iptables里,这相当于一个包不符 合某条规则,就会由后面的规则来处理,如果都不符合,就由缺省的策略处理)。但有个规定,每隔一段时 间保安就要签发一个新的通行证。这样,后面来的人如果恰巧赶上,也就可以进去了。如果没有人来,那通 行证就保留下来,以备来的人用。如果一直没人来,可用的通行证的数量就增加了,但不是无限增大的,最 多也就是刚开始时保安手里有的那个数量。也就是说,刚开始时,通行证的数量是有限的,但每隔一段时间 就有新的通行证可用。limit match有两个参数就对应这种情况,--limit-burst指 定刚开始时有多少通行证可用,--limit指定要隔多长时间才能签发一个新的通行 证。要注意的是,我这里强调的是“签发一个新的通行证”,这是以iptables的角度考虑的。在你自己写规 则时,就要从这个角度考虑。比如,你指定了--limit 3/minute --limit-burst 5 ,意思是开始时有5个通行证,用完之后每20秒增加一个(这就是从iptables的角度看的,要是以用户 的角度看,说法就是每一分钟增加三个或者每分钟只能过三个)。你要是想每20分钟过一个,只能写成--limit 3/hour --limit-burst 5,也就是说你要把时间单位凑成整的。

Table 6-8. Limit match options

Match--limit
Exampleiptables -A INPUT -m limit --limit 3/hour
Explanationlimit match设置最大平均匹配速 率,也就是单位时间内limit match可以匹配几个包。它的形式是一个数值加一个时 间单位,可以是/second /minute /hour /day 。默认值是每小时3次(用户角度),即3/hour ,也就是每20分钟一次(iptables角度)。
Match--limit-burst
Exampleiptables -A INPUT -m limit --limit-burst 5
Explanation这里定义的是limit match的峰值, 就是在单位时间(这个时间由上面的--limit指定)内最多可匹配几个包(由此可 见,--limit-burst的值要比--limit的大)。默认值是5。 为了观察它是如何工作的,你可以启动“只有一条规则的脚本”Limit- match.txt,然后用不同的时间间隔、发送不同数量的ping数据包。这样,通过返回的 echo replies就可以看出其工作方式了。


本文章由作者:佐须之男 整理编辑,原文地址: 杂学记录:iptables中限速的limit,limit-burst功能研究
本站的文章和资源来自互联网或者站长的原创,按照 CC BY -NC -SA 3.0 CN协议发布和共享,转载或引用本站文章应遵循相同协议。如果有侵犯版权的资 源请尽快联系站长,我们会在24h内删除有争议的资源。欢迎大家多多交流,期待共同学习进步。

相关推荐