我有一台运行 3.10 内核的 Linux 主机,有两个桥接接口:eth0 和 eth1 作为brid00,没有 IP。
网桥工作正常,但现在我想过滤一些通过网桥的流量,但 iptables 的规则没有触发。
我已启用net.bridge.bridge-nf-call-iptables
(所有流量均为 IPv4)并且net.ipv4.ip_forward
我正在使用物理开发模块进行匹配。
例如,尝试阻止所有 ICMP 请求
iptables -A FORWARD -p icmp -m physdev --physdev-in eth0 --physdev-out eth1 -j DROP
没有影响。有关发生什么事的任何线索吗?我认为这种过滤在不使用 ebtables 的情况下是可能的(我未来的计划是在一些高级过滤中使用 nfqueue,所以我需要 iptables 来触发桥接流量的规则)。
答案1
被认为是内核 3.10 中的一个错误(可能仅在我的架构,arm64 中)。在 4.x 内核中运行良好,并在其中一些内核中进行了测试。根据内核图和文档,内核 3.x 和 4.x 之间的路由是相同的,并且应该在两者中工作,但事实并非如此。
br_netfilter 是内核 4.x 中的一个单独模块,您必须modprobe br_netfilter
启用该功能。