iptables -m physdev
为了使iptables能够过滤bridge中的数据包,引入了bridge_netfilter,简称bridge_nf。bridge_netfilter在链路层Bridge代码中插入了几个能够被iptables调用的钩子函数,Bridge中数据包在经过这些钩子函数时,iptables规则被执行。
sysctl -a | grep bridge
net.bridge.bridge-nf-call-arptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-filter-pppoe-tagged = 0
net.bridge.bridge-nf-filter-vlan-tagged = 0
net.bridge.bridge-nf-pass-vlan-input-dev = 0
使用iptables -m physdev
来导入相应的模块,操作对象是Bridge上的某个接口。
参数 | 说明 |
---|---|
-m physdev | 匹配桥端口的进入和出去的设备。这只在内核版本 2.5.44 以上有效 |
--physdev-in [!] name | 收到数据包的 bridge port 的名字,只对 INPUT, FORWARD and PREROUTING 链有效。可以添加 "+" 来做头部部分匹配。如果数据包不是从桥设备接收到的,则匹配不成功。 |
--physdev-out [!] name | 数据包要发到的 bridge port name,只对 FORWARD, OUTPUT and POSTROUTING 有效 |
[!] --physdev-is-in | 在数据包是通过一个桥interface进入的时候会匹配成功 |
[!] --physdev-is-out | 在数据包将要通过一个桥的interface出去时匹配成功 |
[!] --physdev-is-bridged | 在数据包是正被桥接的而不是正被路由时匹配成功。它只对 FORWARD and POSTROUTING 有效 |