iptables 模組 recent 防字典(Brute force)與port scan等攻擊

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筆


更多内容 http://ssorc.tw/rewrite.php/read-1053.html#ixzz1kvGzL8Oy

留言

這個網誌中的熱門文章

vim 的取代置換功能「s」

Wi-Fi Multimedia (WMM)

CoAP基礎