如何在允许 DHCP 的同时阻止往返于桥接接口的所有流量?

如何在允许 DHCP 的同时阻止往返于桥接接口的所有流量?

我有一台 PC(运行 Fedora 20),它被用作“软件交换机”,用于控制某些外部设备的网络连接。有八个这样的设备;这台 PC 除了有自己的以太网连接外,还有两个 4 端口以太网卡。默认情况下,八个设备接口会转发到外部接口,不会进行任何过滤。

所需的功能是能够阻止往返于给定设备的所有流量。目前,我们使用 来实现这一点bridge link set dev <device> state 0,它将设备的桥接状态设置为“禁用”。但是,这似乎也会阻止来自设备的 DHCP 流量。网络的 DHCP 服务器可通过外部接口访问,因此看起来桥接器正在阻止此流量,这意味着如果设备尝试更新其 IP,则会失败;就我尝试在设备上执行的测试而言,这是有问题的。

我想做的是阻止所有流量除 DHCP 外对于给定的设备,跨桥接。似乎命令bridge无法做到这一点,所以我可能希望将桥接状态永久保留为“转发”。经过一些研究,它似乎ebtables是我需要的工具,但配置它似乎需要比我更多的 DHCP 和网络知识!通过阅读一些ebtables教程,我认为我需要允许端口 67 和 68 上的流量(我相信这些是用于 DHCP 的唯一端口?)并阻止所有其他流量。

我的问题是:

  1. 是否可以配置ebtables来做我想要的事情?
  2. 这是ebtables完成这项工作的最佳工具吗?和/或它之上是否有任何抽象层可以使其更容易配置?(我正在考虑fermiptables
  3. 假设我朝着正确的方向前进,我该如何配置ebtables以阻止所有 DHCP 流量?

答案1

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

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

您可以配置 ebtables 来允许您想要的流量,然后明确丢弃任何其他流量。

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

相关内容