recent 是 iptables 的一個模組,可以用來作一段時間阻擋某些連線,

recent 所搭配的參數有

–name XXX  # 記錄資訊的檔案名稱,它會存在 /proc/net/ipt_recent/XXX,以下簡稱資料庫

–set # 指定符合條件的,加入或更新於XXX內

–rcheck #與資料庫比對,但不會修改更新

–update #與資料庫比對,會作修改更新

–remove # 與資料庫比對,存在就刪,不存在則否

–seconds X # 比對小於這個秒數的記錄才作動作,看是要更新還是刪除

–hitcount X # 重覆發生幾次連線

來個範例:

第一種

iptables -A INPUT -p icmp –icmp-type 8 -m recent –name ICMP_check –rcheck –seconds 60 –hitcount 6 -j DROP
iptables -A INPUT -p icmp –icmp-type 8 -m recent –set –name ICMP_check

第二種

iptables -A INPUT -p icmp –icmp-type 8 -m recent –name ICMP_check –update –seconds 60 –hitcount 6 -j DROP
iptables -A INPUT -p icmp –icmp-type 8 -m recent –set –name ICMP_check

這兩個的差別在於 –update 與 –rcheck,這先要提到 –seconds 的設定是條件觸發生時會去檢查最近60秒內的記錄,只要符合的話(多於6個ping),第七個ping會被drop掉,

而 –update 會一直更新記錄,–rcheck不會一直更新時間只會檢查而已

所以

第一種ping的結果

PING 10.10.10.168 (10.10.10.168) 56(84) bytes of data.
64 bytes from 10.10.10.168: icmp_seq=0 ttl=64 time=0.318 ms
64 bytes from 10.10.10.168: icmp_seq=1 ttl=64 time=0.293 ms
64 bytes from 10.10.10.168: icmp_seq=2 ttl=64 time=0.294 ms
64 bytes from 10.10.10.168: icmp_seq=3 ttl=64 time=0.286 ms
64 bytes from 10.10.10.168: icmp_seq=4 ttl=64 time=0.311 ms
64 bytes from 10.10.10.168: icmp_seq=5 ttl=64 time=0.271 ms
64 bytes from 10.10.10.168: icmp_seq=60 ttl=64 time=0.312 ms
64 bytes from 10.10.10.168: icmp_seq=61 ttl=64 time=0.286 ms
64 bytes from 10.10.10.168: icmp_seq=62 ttl=64 time=0.629 ms
64 bytes from 10.10.10.168: icmp_seq=63 ttl=64 time=0.271 ms
64 bytes from 10.10.10.168: icmp_seq=64 ttl=64 time=0.299 ms
64 bytes from 10.10.10.168: icmp_seq=65 ttl=64 time=0.285 ms

第二種ping的結果

PING 10.10.10.168 (10.10.10.168) 56(84) bytes of data.
64 bytes from 10.10.10.168: icmp_seq=0 ttl=64 time=0.318 ms
64 bytes from 10.10.10.168: icmp_seq=1 ttl=64 time=0.293 ms
64 bytes from 10.10.10.168: icmp_seq=2 ttl=64 time=0.294 ms
64 bytes from 10.10.10.168: icmp_seq=3 ttl=64 time=0.286 ms
64 bytes from 10.10.10.168: icmp_seq=4 ttl=64 time=0.311 ms
64 bytes from 10.10.10.168: icmp_seq=5 ttl=64 time=0.271 ms

第一種會一直在每一次的60秒過後再回應ping,第二種不會,因為–rcheck是會在第7個ping就停止更新記錄,過了60秒後,才再次更新,此時發現是過了60秒了,就可以再有ping的回應了,

而–update是會一直更新為最新的時間點,除非你停止ping,否則會一直ping不到,直到停止後過了60秒。

那如果這樣子設定的話,就是把 –set 放在前面,其資料庫的記錄會隨時更新

iptables -A INPUT -p icmp –icmp-type 8 -m recent –set –name ICMP_check
iptables -A INPUT -p icmp –icmp-type 8 -m recent –name ICMP_check –rcheck –seconds 60 –hitcount 6 -j DROP

or

iptables -A INPUT -p icmp –icmp-type 8 -m recent –set –name ICMP_check
iptables -A INPUT -p icmp –icmp-type 8 -m recent –name ICMP_check –update –seconds 60 –hitcount 6 -j DROP

/proc/net/ipt_recent/XXX 的內容長這樣子

src=10.10.10.165 ttl: 64 last_seen: 306003766 oldest_pkt: 2 306003766, 306003766, 305994749, 305994749, 305995750, 305995750, 305996752, 305996752, 305997752, 305997752, 305998756, 305998756, 305999760, 305999760, 306000762, 306000762, 306001763, 306001763, 306002764, 306002764

src=10.10.10.165  # 就是來源IP囉
last_seen: 306003766 # 從英文字面看來是最新的時間記錄,但這個數值怎麼算,不了 !!!!
oldest_pkt: 2 # 記錄幾個連線,20一次回圈,從0開始
在 oldest_pkt: 2 之後的數值跟 last_seen的數值是同屬性的,可以記錄20個,如果要改變這個儲存的量要這麼作 → modprobe ipt_recent ip_pkt_list_tot=50
那可以記錄幾筆來源ip呢,預設是 100,modprobe ipt_recent ip_list_tot=1024 可以改成1024筆

最後修改日期: 2010 年 03 月 16 日

作者

留言

撰寫回覆或留言

發佈留言必須填寫的電子郵件地址不會公開。