在允许DHCP的情况下,如何阻止桥接接口的所有stream量?

我有一台PC(运行Fedora 20),被用作“软件开关”来控制一些外部设备的networking连接。 有八个这样的设备; PC除了具有与外界的以太网连接之外,还具有两个4端口以太网卡。 缺省情况下,8个设备接口转发到外部接口,不进行过滤。

所需的function是阻止所有来往于给定设备的stream量。 目前,我们正在使用bridge link set dev <device> state 0来设置设备的网状态为“禁用”。 但是,这似乎也阻止来自设备的DHCPstream量。 networking的DHCP服务器可以通过外部接口访问,所以看起来网桥阻塞了这个stream量,这意味着如果设备试图更新它的IP,就会失败。 这在我试图在设备上执行的testing方面是有问题的。

我想要做的是阻止所有的桥梁, 除了DHCP的交通,给定的设备。 看起来bridge命令不能做到这一点,所以我可能想永远离开桥接状态作为“转发”。 经过一番研究,似乎ebtables是我需要的工具,但configuration它似乎需要更多关于DHCP和networking的知识。 从阅读几个ebtables教程,我想我需要允许端口67和68(我相信这些是用于DHCP的唯一端口?)的stream量,并阻止所有其他stream量。

所以我的问题是:

  1. 是否有可能configurationebtables做我想要的?
  2. ebtables是这个工作的最佳工具,还是在它上面有任何抽象层,可以使configuration更容易? (我正在考虑使用iptablesferm 。)
  3. 假设我正朝着正确的方向前进,那么我将如何configurationebtables来阻止所有stream量栏DHCP?

是的,你需要ebtables在网桥上应用netfilter规则。

匹配规则是带有参数--ip-source-port--ip-destination-port ip

你可以configurationebtables来允许你想要的stream量,然后显式的删除任何其他的stream量。

DHCP客户端端口是UDP 68,DHCP服务器端口是UDP 67。

我相信正确的命令语法和顺序是:

 ebtables -I INPUT -i eth0 -o eth0 -p ip -j DROP ebtables -I INPUT -i eth0 -o eth0 -p ip --ip-protocol udp --ip-source-port 67 -j ACCEPT ebtables -I INPUT -i eth0 -o eth0 -p ip --ip-protocol udp --ip-source-port 68 -j ACCEPT ebtables -I INPUT -i eth0 -o eth0 -p ip --ip-protocol udp --ip-destination-port 67 -j ACCEPT ebtables -I INPUT -i eth0 -o eth0 -p ip --ip-protocol udp --ip-destination-port 68 -j ACCEPT ebtables-save