如何在允许 DHCP 的同时阻止进出桥接接口的所有流量?

All*_*wis 4 networking dhcp iptables bridge

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

所需的功能是能够阻止进出给定设备的所有流量。目前,我们正在使用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?

sup*_*ami 6

是的,您需要 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
Run Code Online (Sandbox Code Playgroud)