从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
这两条规则一起,可以有限制没秒通过无线网卡上传包的数目为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
(译者注:为了更好地理解这个匹配操作,我们通过一个比喻来解释一下。原文也做了类似地比喻,但
我觉得对于初学者不易理解,故未采用。)limit match的工作方式就像一个单位大门口的保安,当有人要
进入时,需要找他办理通行证。早上上班时,保安手里有一定数量的通行证,来一个人,就签发一个,当通
行证用完后,再来人就进不去了,但他们不会等,而是到别的地方去(在iptables里,这相当于一个包不符
合某条规则,就会由后面的规则来处理,如果都不符合,就由缺省的策略处理)。但有个规定,每隔一段时
间保安就要签发一个新的通行证。这样,后面来的人如果恰巧赶上,也就可以进去了。如果没有人来,那通
行证就保留下来,以备来的人用。如果一直没人来,可用的通行证的数量就增加了,但不是无限增大的,最
多也就是刚开始时保安手里有的那个数量。也就是说,刚开始时,通行证的数量是有限的,但每隔一段时间 就有新的通行证可用。limit
match有两个参数就对应这种情况,--limit-burst指
定刚开始时有多少通行证可用,--limit指定要隔多长时间才能签发一个新的通行
证。要注意的是,我这里强调的是“签发一个新的通行证”,这是以iptables的角度考虑的。在你自己写规
则时,就要从这个角度考虑。比如,你指定了--limit 3/minute
--limit-burst
5
Table 6-8. Limit match options
Match | --limit |
Example | iptables -A INPUT -m limit --limit 3/hour |
Explanation | 为limit
match设置最大平均匹配速 率,也就是单位时间内limit |
Match | --limit-burst |
Example | iptables -A INPUT -m limit --limit-burst 5 |
Explanation | 这里定义的是limit match的峰值, 就是在单位时间(这个时间由上面的--limit指定)内最多可匹配几个包(由此可 见,--limit-burst的值要比--limit的大)。默认值是5。
为了观察它是如何工作的,你可以启动“只有一条规则的脚本”Limit-
match.txt,然后用不同的时间间隔、发送不同数量的ping数据包。这样,通过返回的 |