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筆

評論: 0 | 引用: 0 | 閱讀: 1509 | 列印 | 文件 | 轉發

發表評論
暱 稱: 密 碼:
網 址: E - mail:
驗證碼: 驗證碼圖片 選 項:
頭 像:
內 容:
  • 粗體
  • 斜體
  • 底線
  • 插入圖片
  • 超連結
  • 電子郵件
  • 插入引用
  • 表情符號