iptables中關於limit和limit-burst的解釋

Limit match
    這個匹配操作必須由-m limit明確指定才能使用。有了它的幫助,就可以對指定的規則的日誌數量加以限制,以免你被信息的洪流淹沒哦。比如,你可以事先設定一個限定值,當符合條件的包的數量不超過它時,就記錄;超過了,就不記錄了。我們可以控制某條規則在一段時間內的匹配次數(也就是可以匹配的包的數量),這樣就能夠減少DoS syn flood攻擊的影響。這是它的主要作用,當然,還有很多其他作用(注:比如,對於某些不常用的服務可以限制連接數量,以免影響其他服務)。limitmatch也可以用英文感嘆號取反,如:-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指南:
http://man.chinaunix.net/network/iptables-tutorial-cn-1.1.19.html#TABLE.LIMITMATCH

假設如下的規則: 
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個週期內都沒有符合條件的包通過,系統都觸發值就會完全恢復。

關於iptables的基本介紹可以參見:
Linux iptables 應用手冊(-):
http://fanqiang.chinaunix.net/system/linux/2006-06-20/4595.shtml
Linux iptables 應用手冊(二):
http://fanqiang.chinaunix.net/system/linux/2006-06-20/4596.shtml
Linux iptables 應用手冊(三):
http://fanqiang.chinaunix.net/system/linux/2006-06-20/4597.shtml
Linux iptables 應用手冊(四):
http://fanqiang.chinaunix.net/system/linux/2006-06-20/4598.shtml
Linux iptables 應用手冊(五):
http://fanqiang.chinaunix.net/system/linux/2006-06-20/4599.shtml
Linux iptables 應用手冊(六):
http://fanqiang.chinaunix.net/system/linux/2006-06-20/4600.shtml

關於iptables拓展功能.例如:comment (備註匹配) ,string(字符串匹配,可以用做內容過濾),iprang(ip範圍匹配),time(時間匹配),ipp2p(點對點匹配),connlimit(同時連接個數匹配),Nth(第n個包匹配),geoip(根據國家地區匹配). ipp2p(點對點匹配), quota(配額匹配)等等,參見:
http://bbs.chinaunix.net/viewthread.php?tid=525493


etho 接外網──ppp0 
eth1 接內網──192.168.0.0/24 
#!/bin/sh 

modprobe ipt_MASQUERADE 
modprobe ip_conntrack_ftp 
modprobe ip_nat_ftp 
iptables -F 
iptables -t nat -F 
iptables -X 
iptables -t nat -X 
###########################INPUT鍵################################### 
iptables -P INPUT DROP 
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 
iptables -A INPUT -p tcp -m multiport --dports 110,80,25 -j ACCEPT 
iptables -A INPUT -p tcp -s 192.168.0.0/24 --dport 139 -j ACCEPT 
#允許內網samba,smtp,pop3,連接 
iptables -A INPUT -i eth1 -p udp -m multiport --dports 53 -j ACCEPT 
#允許dns連接 
iptables -A INPUT -p tcp --dport 1723 -j ACCEPT 
iptables -A INPUT -p gre -j ACCEPT 
#允許外網vpn連接 
iptables -A INPUT -s 192.186.0.0/24 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT 
iptables -A INPUT -i ppp0 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP 
#爲了防止DOS太多連接進來,那麼可以允許最多15個初始連接,超過的丟棄 
iptables -A INPUT -s 192.186.0.0/24 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP 
#爲了防止DOS太多連接進來,那麼可以允許最多15個初始連接,超過的丟棄 
iptables -A INPUT -p icmp -m limit --limit 3/s -j LOG --log-level INFO --log-prefix "ICMP packet IN: " 
iptables -A INPUT -p icmp -j DROP 
#禁止icmp通信-ping 不通 
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.0/24 -j MASQUERADE 
#內網轉發 
iptables -N syn-flood 
iptables -A INPUT -p tcp --syn -j syn-flood 
iptables -I syn-flood -p tcp -m limit --limit 3/s --limit-burst 6 -j RETURN 
iptables -A syn-flood -j REJECT 
#防止SYN攻擊 輕量 
#######################FORWARD鏈########################### 
iptables -P FORWARD DROP 
iptables -A FORWARD -p tcp -s 192.168.0.0/24 -m multiport --dports 80,110,21,25,1723 -j ACCEPT 
iptables -A FORWARD -p udp -s 192.168.0.0/24 --dport 53 -j ACCEPT 
iptables -A FORWARD -p gre -s 192.168.0.0/24 -j ACCEPT 
iptables -A FORWARD -p icmp -s 192.168.0.0/24 -j ACCEPT 
#允許 vpn客戶走vpn網絡連接外網 
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT 
iptables -I FORWARD -p udp --dport 53 -m string --string "tencent" -m time --timestart 8:15 --timestop 12:30 --days Mon,Tue,Wed,Thu,Fri,Sat  -j DROP 
#星期一到星期六的8:00-12:30禁止qq通信 
iptables -I FORWARD -p udp --dport 53 -m string --string "TENCENT" -m time --timestart 8:15 --timestop 12:30 --days Mon,Tue,Wed,Thu,Fri,Sat  -j DROP 
#星期一到星期六的8:00-12:30禁止qq通信 
iptables -I FORWARD -p udp --dport 53 -m string --string "tencent" -m time --timestart 13:30 --timestop 20:30 --days Mon,Tue,Wed,Thu,Fri,Sat  -j DROP 
iptables -I FORWARD -p udp --dport 53 -m string --string "TENCENT" -m time --timestart 13:30 --timestop 20:30 --days Mon,Tue,Wed,Thu,Fri,Sat  -j DROP 
#星期一到星期六的13:30-20:30禁止QQ通信 
iptables -I FORWARD -s 192.168.0.0/24 -m string --string "qq.com" -m time --timestart 8:15 --timestop 12:30 --days Mon,Tue,Wed,Thu,Fri,Sat  -j DROP 
#星期一到星期六的8:00-12:30禁止qq網頁 
iptables -I FORWARD -s 192.168.0.0/24 -m string --string "qq.com" -m time --timestart 13:00 --timestop 20:30 --days Mon,Tue,Wed,Thu,Fri,Sat  -j DROP 
#星期一到星期六的13:30-20:30禁止QQ網頁 
iptables -I FORWARD -s 192.168.0.0/24 -m string --string "ay2000.net" -j DROP 
iptables -I FORWARD -d 192.168.0.0/24 -m string --string "寬頻影院" -j DROP 
iptables -I FORWARD -s 192.168.0.0/24 -m string --string "色情" -j DROP 
iptables -I FORWARD -p tcp --sport 80 -m string --string "廣告" -j DROP 
#禁止ay2000.net,寬頻影院,色情,廣告網頁連接 !但中文 不是很理想 
iptables -A FORWARD -m ipp2p --edk --kazaa --bit -j DROP 
iptables -A FORWARD -p tcp -m ipp2p --ares -j DROP 
iptables -A FORWARD -p udp -m ipp2p --kazaa -j DROP 
#禁止BT連接 
iptables -A FORWARD -p tcp --syn --dport 80 -m connlimit --connlimit-above 15 --connlimit-mask 24 -j DROP 
#只允許每組ip同時15個80端口轉發 
#######################################################################
sysctl -w net.ipv4.ip_forward=1 &>/dev/null 
#打開轉發 
#######################################################################
sysctl -w net.ipv4.tcp_syncookies=1 &>/dev/null 
#打開 syncookie (輕量級預防 DOS 攻擊) 
sysctl -w net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=3800 &>/dev/null 
#設置默認 TCP 連接癡呆時長爲 3800 秒(此選項可以大大降低連接數) 
sysctl -w net.ipv4.ip_conntrack_max=300000 &>/dev/null 
#設置支持最大連接樹爲 30W(這個根據你的內存和 iptables 版本來,每個 connection 需要 300 多個字節)


參考: 
http://liuyude.bokee.com/3190747.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章