Linux

阻止 ICMP 不可達的傳出數據包

  • December 4, 2019

我正在嘗試使用 iptables 規則來阻止以下流量;這是對無法訪問的主機的響應。

17:50:11.140992 IP 10.1.1.93 > 72.21.91.29: ICMP host 10.1.1.93 unreachable, length 48
17:50:11.140997 IP 10.1.1.93 > 72.21.91.29: ICMP host 10.1.1.93 unreachable, length 48

我添加了以下規則

[admin@user ~]# iptables -I OUTPUT -p icmp -m icmp --icmp-type 3/1 -s 10.1.1.93 -j DROP
[admin@user ~]# iptables -nL 
Chain INPUT (policy DROP)
...
...
Chain OUTPUT (policy DROP)
target     prot opt source               destination         
DROP       icmp --  10.1.1.93            0.0.0.0/0            icmptype 3 code 1
ACCEPT     all  --  0.0.0.0/0            8.8.8.8              /* COMMENT */

還嘗試阻止所有 icmp 類型 3 數據包,但不知何故我仍然在 tcpdump 中看到數據包。有人可以幫助我在這裡做錯了嗎?

[admin@user ~]# iptables -I OUTPUT -p icmp -m icmp --icmp-type 3 -s 10.1.1.93 -j DROP

編輯:我看到的最接近的問題是這個還沒有答案的問題。https://unix.stackexchange.com/questions/217750/undesired-icmp-destionation-unreachable-message

由於10.1.1.93不是任何介面的地址並且您有 SNAT 規則,我猜想 ICMP 數據包是使用不同的源地址生成的,因此您的iptables規則不匹配。

要擺脫這些Destination Host Unreachable數據包,您可以將正確的地址添加到iptables規則中或根本不添加地址:

iptables -I OUTPUT -p icmp -m icmp --icmp-type host-unreachable -j DROP

但是,我會致力於他們的事業:有人試圖連接到一個只能出現在傳出連接上的地址,而不是傳入連接。像這樣的規則:

iptables -A FORWARD -d 10.1.1.93 -m conntrack --ctstate NEW -j DROP

應該可以解決您的問題。備註:它在FORWARD表中,因為這些連接不會到達INPUT.

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