
為了防止對 ssh 的暴力攻擊,我添加了一些iptables規則(以下)。問題是:如何列出被封鎖的 IP 位址?
(1)
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 8 --rttl --name SSH -j DROP
答案1
一種選擇是使用以下規則記錄任何丟棄的資料包:
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 8 --rttl -j LOG --log-prefix "FW_DROPPED: "
將其插入到規則之前DROP
。然後,您可以在 syslog 檔案中尋找任何包含「FW_DROPPED」的內容,IP 清單就會出現在其中。日誌檔案中的條目如下所示:
Jun 3 08:05:57 some-machine kernel: [15852451.420557] FW_DROPPED: IN=eth0 OUT= MAC=00:50:ba:4a:d9:e3:00:12:17:3a:e3:64:08:00 SRC=228.23.45.189 DST=192.168.1.1 LEN=48 TOS=0x00 PREC=0x00 TTL=106 ID=10941 PROTO=TCP SPT=58212 DPT=22 WINDOW=65535 RES=0x00 SYN URGP=0
因此,剪掉“SRC=”後面的內容將顯示刪除的 IP。排序,消除重複項,你就會得到你的清單。
我找到了iptables教程成為 iptables/netfilter 最有用的文件。
答案2
您可以在 /proc/net/ipt_recent/SSH 下找到詳細資訊。
本文有更多資訊。
答案3
看著
/proc/net/ipt_recent/YOURNAME
其中 YOURNAME 是您在 iptables 規則中與 --name 選項一起使用的名稱。
答案4
例如,對於輸入位址欺騙,我所做的是定義鏈SPOOF_REJECT
:
iptables -N SPOOF_REJECT
iptables -A SPOOF_REJECT -j LOG --log-prefix "Input spoof detected: "
iptables -A SPOOF_REJECT -j REJECT
如果資料包被欺騙,則將其發送到該鏈:
iptables -A INPUT -i $EXT_DEV1 -s $INT_NET -j SPOOF_REJECT
iptables -A INPUT -i $EXT_DEV2 -s $INT_NET -j SPOOF_REJECT
您可以對您丟棄或拒絕的每種資料包執行類似的操作,以在系統日誌中查找一行,然後定期進行 grep、剪切、排序,以從這些日誌行中取得 IP 位址。
為每個類別使用單獨的鏈的好處是您的配置變得更加簡單並且更容易閱讀您的iptables
配置。隨著您添加越來越多的規則,您會很高興您使用單獨的鏈來執行特定的不同操作。