mat*_*att 4 firewall kernel iptables arp netfilter
我在某些网络设备上有一个嵌入式 Linux。因为这个设备非常重要,我必须进行许多网络测试(我有一个单独的设备)。这些测试包括用 ARP 数据包(正常数据包、畸形数据包、不同大小的数据包等)淹没我的设备
我在互联网上阅读了不同的 xx-tables:ebtables、arptables、iptables、nftables 等。我肯定在我的设备上使用 iptables。
什么 xx 表最适合过滤(限制,而不是丢弃)ARP 数据包?
iptables从IP层开始:处理ARP已经来不及了。
虽然专门用于 ARP,但arptables缺乏必要的匹配和/或目标来限制而不仅仅是丢弃ARP 数据包。它不能用于您的目的。
ebtables可以是一个候选(它既可以处理 ARP又可以limit
用来不丢弃所有东西)。
亲:
- 很容易使用
con:
- 它正在以太网桥上工作。这意味着如果您还没有使用桥接器,则必须创建一个桥接器并将您的(可能是唯一的)接口从属于它,以使其完全可用。这需要付出代价,包括配置和可能的一些网络开销(例如:网络接口设置为混杂)。
- 因为它没有iptables的同伴ipset等价物,所以限制流量是粗糙的。它不能对每个源进行即时计量(因此必须在规则中手动添加此类源 MAC 或 IP)。
nft
( nftables )
pro:
- 这个工具的目标是替换其他工具并避免重复代码,比如复制匹配模块(可以想象arptables也可以收到限制匹配,但这只是这种匹配的第三个实现模块,在ip(6)tables 'xt_limit
和ebtables ' 之后ebt_limit
)。因此,它旨在足够通用以在任何层使用相同的功能:它可以在ARP级别限制/计量流量,同时还可以针对每个源而不是全局执行此操作。
con:
- 某些功能可能需要最新的内核和工具(例如:meter 需要内核 >= 4.3 和nftables >= 0.8.3)。
- 因为它的语法更通用,规则可能更难以正确创建。有时文档可能会产生误导(例如:非工作示例)。
tc
(交通管制)?
或许可以使用tc来限制 ARP 流量。由于tc功能在网络堆栈的早期工作,它的使用可能会限制资源的使用。但是这个工具也以其复杂性而闻名。即使将它用于入口流量而不是出口流量也需要步骤。我什至没有尝试如何做到这一点。
CONFIG_IP_NF_ARPFILTER
正如前一点所见,这是没有实际意义的:不能使用arptables。你需要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 的示例
因此,让我们假设您有一个接口,eth0
并希望通过 IP 192.0.2.2/24使用ebtables。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
Run Code Online (Sandbox Code Playgroud)
查看ebtables 的ARP 选项以进行进一步过滤。如上所述,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
Run Code Online (Sandbox Code Playgroud)
还有其他变体,例如创建一个veth对,将 IP 放在一端并将另一端设置为网桥端口,让网桥没有 IP(并使用FORWARD
链过滤,说明哪个接口流量来自,而不是INPUT
)。
要限制为每秒接受一个 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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4687 次 |
最近记录: |