1. 程式人生 > >iptables中關於limit和limit-burst的解釋 【轉】

iptables中關於limit和limit-burst的解釋 【轉】

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 1?1. Limit match options

Match
--limit
Example
iptables -A INPUT -m limit --limit 3/hour
Explanation
limit match設定最大平均匹配速率,也就是單位時間內limit match能匹配幾個包。他的形式是個數值加一個時間單位,能是/second /minute /hour /day 。預設值是每小時3次(使用者角度),即3/hour ,也就是每20分鐘一次(iptables角度)。
Match
--limit-burst
Example
iptables -A INPUT -m limit --limit-burst 5
Explanation
這裡定義的是limit match
的峰值,就是在單位時間(這個時間由上面的--limit指定)內最多可匹配幾個包(由此可見,--limit-burst的值要比--limit的大)。預設值是5。

假設如下的規則:
iptables -A INPUT -p icmp -m limit --limit 6/m --limit-burst 5 -j ACCEPT
iptables -P INPUT DROP
然後從另一部主機上ping這部主機,就會發生如下的現象:
首先我們能看到前四個包的迴應都非常正常,然後從第五個包開始,我們每10秒能收到一個正常的迴應。這是因為我們設定了單位時間(在這裡是每分鐘)內允許通過的資料包的個數是每分鐘6個,也即每10秒鐘一個;其次我們又設定了事件觸發閥值為5,所以我們的前四個包都是正常的,只是從第五個包開始,限制規則開始生效,故只能每10秒收到一個正常回應。
假設我們停止ping,30秒後又開始ping,這時的現象是:
前兩個包是正常的,從第三個包開始丟包,這是因為在這裡我的允許一個包通過的週期是10秒,如果在一個週期內系統沒有收到符合條件的包,系統的觸發值就會恢復1,所以如果我們30秒內沒有符合條件的包通過,系統的觸發值就會恢復到3,如果5個週期內都沒有符合條件的包通過,系統都觸發值就會完全恢復。