Iptables

如何使用 iptables 刪除無效乙太類型的包?

  • January 31, 2021
19:27:47.782291 98:9b:cb:: > ff:ff:ff:ff:ff:ff, ethertype Unknown (0x88e1), length 60:
       0x0000:  0000 a000 b052 38e5 d57f 0000 0000 0000  .....R8.........
       0x0010:  0000 0000 0000 0000 0000 0000 0000 0000  ................
       0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............
19:27:47.782293 98:9b:cb:: > ff:ff:ff:ff:ff:ff, ethertype Unknown (0x8912), length 60:
       0x0000:  0170 a000 0000 1f84 e5a3 97a2 5553 bef1  .p..........US..
       0x0010:  fcf9 796b 5214 13e9 e200 0000 0000 0000  ..ykR...........
       0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............

我的路由器正在將這些垃圾發送到我的網路中,我想阻止它,因為無法禁用它。事實證明,這樣做iptables比我想像的更具挑戰性:

root@fw:~ # iptables -A INPUT -m mac --mac-source 98:9b:cb:: -p 0x88e1 -j DROP
iptables v1.8.2 (nf_tables): unknown protocol "0x88e1" specified
Try `iptables -h' or 'iptables --help' for more information.

有沒有辦法阻止無效的乙太類型?

似乎iptables不能用於我們的問題。我們必須使用其改進的後繼nftables。它只有一個meta表達式類型可用的表達式protocol = EtherType protocol value。感謝*@Bernard*,他找到了解決他的問題Linux 伺服器在 __netif_receive_skb_core 中丟棄 RX 數據包的方法。他給出了這個例子來刪除未知的 EtherTypes,它必須附加到/etc/nftables.conf

table netdev filter {
   chain ingress {
       type filter hook ingress device eno1 priority 0; policy accept;
       meta protocol {0x8912, 0x88e1} drop
   }
}

在帶有Raspberry Pi OS Buster的 Raspberry Pi 上,我只是這樣做:

rpi ~$ sudo apt install nftables

/etc/nftables.conf現在可用,我在規則中附加了正確的介面名稱,而不是範例中的eno1

rpi ~$ sudo systemctl start nftables.service

並且 tcpdump 告訴我,沒有更多未知的 EtherType 數據包。

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