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 DROPor
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筆
留言