Linux

根據數據包計數使用 iptables 阻止來自伺服器的 Ping

  • March 10, 2018

如果數據包計數大於每秒 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

引用自:https://serverfault.com/questions/900884