我想限制特定的 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