Linux
根據數據包計數使用 iptables 阻止來自伺服器的 Ping
如果數據包計數大於每秒 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"
仍然無法完全阻止伺服器。
在這裡,添加一個輔助 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