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 的端口?)并阻止所有其他流量。
所以我的问题是:
ebtables
以执行我想要的操作?ebtables
该工作的最佳工具和/或是否有任何抽象层使其更易于配置?(我在想ferm
的iptables
。)ebtables
以阻止所有流量栏 DHCP?是的,您需要 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)