我在某些网络设备上有一个嵌入式Linux。因为这个设备非常重要,所以我必须进行许多网络测试(我为此有一个单独的设备)。这些测试包括用 ARP 数据包淹没我的设备(正常数据包、格式错误的数据包、不同大小的数据包等)
我在互联网上阅读了有关不同 xx-tables 的信息:ebtables、arptables、iptables、nftables 等。当然,我在我的设备上使用 iptables。
- 哪些 xx-tables 最适合过滤(限制,而不是丢弃)ARP 数据包?
- 我听说过一些关于 /proc/config.gz 文件的信息,该文件应该包含内核中包含的内容的信息。我检查了 CONFIG_IP_NF_ARPFILTER 不包括在内。所以 - 为了使用 arptables - 我应该在启用 CONFIG_IP_NF_ARPFILTER 选项的情况下编译内核,对吗? ebtables 也是如此吗?
- 我读到,当 iptables 在 OSI 级别 3 上工作时,ebtables 和 arptables 在 OSI 级别 2 上工作。所以我认为在级别 2 上过滤任何内容都比在级别 3 上更好(性能?),对吗?
- 我在这个网站的某个地方找到了使用 ebtables 过滤 ARP 数据包的答案。 ebtables 与 arptables 相比有什么优势吗?
- 额外一。互联网上了解限制/过滤不同类型数据包和协议的网络流量的最佳来源是什么?
答案1
哪些 xx-tables 最适合过滤(限制,而不是丢弃)ARP 数据包?
-
iptables从IP层开始:处理ARP已经来不及了。 -
虽然专门从事 ARP,arp表缺乏必要的匹配和/或目标限制而不仅仅是降低ARP 数据包。它不能用于您的目的。 -
ebtables可以是候选人(它可以是处理ARP并使用
limit
为了不放弃一切)。优点:
- 非常容易使用缺点:
- 它在以太网上运行桥梁。这意味着,如果您尚未使用桥接器,则必须创建一个桥接器并将您的(可能是唯一的)接口置于其上,以便使其完全可用。这需要付出代价,既需要配置,也可能需要一些网络开销(例如:网络接口设置为混杂)。−
因为它没有相当于iptables的同伴IP集,限制流量是粗暴的。它无法对每个源进行动态计量(因此必须在规则中手动添加此类源 MAC 或 IP)。 nft
(nftables)优点:
- 这个工具的目的是取代其他工具并避免重复代码,例如重复匹配模块(可以想象arp表也可能收到了限制匹配,但这只是此类匹配模块的第三次实现,之后ip(6)表'xt_limit
和ebtables'ebt_limit
那些)。因此,它的目的是足够通用,可以在任何层使用相同的功能:它可以限制/计量流量ARP水平同时也在做每个来源而不是全球范围内。缺点:
- 某些功能可能需要最新的内核和工具(例如:meter 需要内核 >= 4.3 且nftables>= 0.8.3)。
− 由于其语法更通用,因此正确创建规则可能更困难。有时文档可能会产生误导(例如:不起作用的示例)。tc
(交通管制)?也许可以使用TC限制 ARP 流量。TC该功能在网络堆栈的早期就起作用,它的使用可能会限制资源使用。但这个工具也因其复杂性而闻名。即使将其用于入口流量而不是出口流量也需要步骤。我什至没有尝试如何做到这一点。
-
CONFIG_IP_NF_ARPFILTER
正如上一点所示,这是没有意义的:arp表不能使用。你需要的是
NF_TABLES_ARP
要不然BRIDGE_NF_EBTABLES
(或者也许如果TC实际上是一个候选人,NET_SCHED
)。这并不意味着它是仅有的作为先决条件,您必须验证还需要什么(至少需要什么才能使这些选项可用,以及限制 ARP 所需的各种匹配内核模块)。什么层最好?
我想说使用最具体的层来完成这项工作是最容易处理的。同时,越早处理,所需的开销越少,但通常处理起来更加粗糙和复杂。我确信这里有很多不同的可能建议。 ARP 几乎可以被认为是在第 2 层和第 3 层之间。它是在第 2 层实现的,但例如等效 IPv6 的 NDP 是在第 3 层实现的(使用多播 ICMPv6)。这不是唯一需要考虑的因素。
ebtables 与 arptables 相比有什么优势吗?
参见第 1 点和第 2 点。
互联网上了解限制/过滤不同类型数据包和协议的网络流量的最佳来源是什么?
抱歉,使用搜索引擎使用正确的词没有什么找不到的。您应该从简单的主题开始,然后再继续更困难的主题。当然SE已经是一个信息源了。
以下是 ebtables 和 nftables 的示例
与 ebtables
假设您有一个界面eth0
并想要使用ebtables其 IP 为 192.0.2.2/24。eth0
一旦接口成为桥接端口,原本打开的 IP将被忽略。它必须从eth0
桥上移走。
ip link set eth0 up
ip link add bridge0 type bridge
ip link set bridge0 up
ip link set eth0 master bridge0
ip address add 192.0.2.2/24 dev bridge0
看着ARP 选项ebtables进行进一步的过滤。如上所述ebtables太粗暴无法限制每个来源除非您通过规则手动声明每个源及其 MAC 或 IP 地址。
限制每秒接受一个 ARP 请求(考虑任何来源)。
ebtables -A INPUT -p ARP --arp-opcode 1 --limit 1/second --limit-burst 2 -j ACCEPT
ebtables -A INPUT -p ARP --arp-opcode 1 -j DROP
还有其他变体,例如创建韦斯一对,将 IP 放在一端并将另一端设置为桥接端口,使桥接没有 IP (并使用链进行过滤FORWARD
,说明流量来自哪个接口,而不是INPUT
)。
与 nftables
限制每秒接受一个 ARP 请求和即时每个 MAC 地址:
nft add table arp filter
nft add chain arp filter input '{ type filter hook input priority 0; policy accept; }'
nft add rule arp filter input arp operation 1 meter per-mac '{ ether saddr limit rate 1/second burst 2 packets }' counter accept
nft add rule arp filter input arp operation 1 counter drop