对不起作用的 ebtables 规则感到困惑:仅允许本地 LAN 流量

对不起作用的 ebtables 规则感到困惑:仅允许本地 LAN 流量

我想限制特定的 MAC 仅与本地 LAN 上的设备进行通信。这是我的尝试("ebtables -t nat -L"命令的输出)

Bridge table: nat

Bridge chain: PREROUTING, entries: 0, policy: ACCEPT

Bridge chain: OUTPUT, entries: 0, policy: ACCEPT

Bridge chain: POSTROUTING, entries: 1, policy: ACCEPT
-d f0:de:f1:1e:e4:83 -j LOCAL

Bridge chain: LOCAL, entries: 1, policy: DROP
-p IPv4 --ip-src 192.168.6.0/24 -j OKAY

Bridge chain: OKAY, entries: 1, policy: ACCEPT
-j ACCEPT

当这些规则到位时,Linux 路由器将无法从 IP 地址为 192.168.6.70 的设备 f0:de:f1:1e:e4:83 访问。 ICMP ping 与所有其他服务一起停止。

如果我将名为 LOCAL 的链上的策略更改为“ACCEPT”,则所有服务将恢复为 f0:de:f1:1e:e4:83 工作。这告诉我 POSTROUTING 规则正在运行,我们正在评估 LOCAL 规则,该规则应该只允许来自 LAN 的数据包通过。

那么为什么"-p IPv4 --ip-src 192.168.6.0/24 -j OKAY"不允许 192.168.6.70 和 192.168.6.254 之间进行 ICMP ping 交换呢?

答案1

事实证明,以太网(由 ebtables 控制)支持 IPV4 之外的许多协议。至关重要的是,ARP 数据包被上面 LOCAL 链中的默认策略丢弃。

修复方法是仅将 IPv4 数据包发送到 POSTROUTING 中的 LOCAL 链,并允许 POSTROUTING 中的默认 ACCEPT 允许 ARP 以太网帧通过网桥。

Bridge chain: POSTROUTING, entries: 1, policy: ACCEPT
-p IPv4 -d f0:de:f1:1e:e4:83 -j LOCAL

相关内容