
如果封包計數每秒大於 2 個(為了測試而減少封包計數),我會嘗試封鎖來自伺服器的 icmp ping。我分別嘗試了這兩條規則,但它們似乎沒有幫助:
iptables -A INPUT -p icmp --icmp-type echo-request -m recent --update --seconds 1 --hitcount 2 -j DROP
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT --match limit --limit 2/s --limit-burst 2
這些規則有什麼問題嗎?
我使用以下命令從另一台伺服器 ping,但 ping 繼續得到回應 -
ping -n -i 0.2 192.168.2.86
另外,當我檢查 iptables -nvL 輸出時 - 規則的資料包計數沒有增加...
使用的機器是centos 6.8
一些進展:我在表末尾添加了預設刪除規則:
iptables -A INPUT -p icmp -m icmp -j DROP
然後新增此規則會丟棄超出限制的 ping
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -m limit --limit 2/second -j ACCEPT -m comment --comment "icmprule1"
仍然無法完全阻止伺服器。
答案1
在這裡,加入一個輔助 ICMPSCAN 鏈(並將跳轉規則放在 INPUT 鏈的第一個位置):
iptables -N ICMPSCAN
iptables -I INPUT -p icmp -m icmp --icmp-type echo-request -j ICMPSCAN
iptables -A ICMPSCAN -m recent --set --name badicmp --rsource
iptables -A ICMPSCAN -m recent --update --seconds 1 --hitcount 2 --name badicmp --rsource -j DROP
注意:設定/更新規則都可以在 INPUT 中設置,而無需輔助,但我更喜歡將這些規則放在不同的鏈中。
注意2:可以在 --set 之後新增一條附加規則來記錄事件...
動態黑名單:
現在,要根據最近的點擊計數觸發器新增永久動態黑名單,我們可以利用 ipset 功能。 ipset 適用於 centos 6.x ,並且 iptables 可以識別 ipset,但您可能需要先安裝它。
這裡的 iptables/ipset 規則可以滿足您的需求:
iptables -F ICMPSCAN
iptables -N ICMPSCAN
ipset -N banned_hosts iphash
iptables -I INPUT -p icmp -m icmp --icmp-type echo-request -j ICMPSCAN
iptables -A ICMPSCAN -m recent --set --name badicmp --rsource
iptables -A ICMPSCAN -m recent --update --seconds 1 --hitcount 2 --name badicmp --rsource -j SET --add-set banned_hosts src
iptables -A ICMPSCAN -m set --set banned_hosts src -j DROP
您可以使用 ipset list 列出目前禁止清單的內容,例如:
# ipset list banned_hosts
Name: banned_hosts
Type: hash:ip
Header: family inet hashsize 1024 maxelem 65536
Size in memory: 8284
References: 2
Members:
192.168.122.1
並管理設定列表,例如刪除 IP 位址,例如:
# ipset del banned_hosts 192.168.122.1
另請參閱此頁面:http://www.linuxjournal.com/content/advanced-firewall-configurations-ipset