iptables dhcp 监听

iptables dhcp 监听

我有 ubuntu 和 isc-dhcp-server (DHCPRFC2131)作为我本地 eth 中的“权威”,并且我本地网络的某些用户激活了另一个 dhcp(流氓),从而产生冲突

我没有任何带有“dhcp snooping”功能的 Cisco 或 HP 交换机,可以通过规则阻止 dhcp 流氓行为(例如“ip dhcp snooping”)。这些规则不起作用:

localeth=enp2s0
iptables -I INPUT -i $localeth -p udp -m multiport -sports 67,68 -j DROP
iptables -I FORWARD -i $localeth -p udp -m multiport -dports 67,68 -j DROP
iptables -t mangle -A PREROUTING -i $localeth -p udp -m multiport --dports 67,68 -j DROP
Ubuntu with 
ISC-DHCP-Server
authoritative;
option wpad code 252

如何使用 iptables 规则阻止这个 dhcp 流氓行为?谢谢

更新:

正如所解释的这里, iptables 不是指定用于 DHCP 过滤的那个,但是ebtables,因为据说“用于在较低级别过滤以太网帧的 Linux 工具 (ebtables)“,因此这是我尝试过的规则

macserver=52:54:00:ee:00:11
ipserver=192.168.1.10
ethserver=enp2s0
ebtables=/sbin/ebtables

$ebtables -A INPUT -i $ethserver --protocol ipv4 --ip-proto udp -s ! $macserver --ip-src ! $ipserver --ip-dport 67:68 -j DROP

但不起作用。

PD:github上有一个与这个主题相关的项目叫做ebtables-dhcpsnooping但不确定这是否有效

答案1

这取决于您的主机的连接方式。

如果“权威”DHCP 服务器主机及其(假定的)客户端主机都连接到“物理”/“专用”/“独立”(希望您知道我的意思)交换机/“路由器” ,那么您实际上无法在 DHCP 服务器主机上执行任何操作,因为其他“恶意”DHCP 服务器不通过主机与客户端通信,而仅通过交换机与客户端通信。

但是,如果主机还通过桥接一堆连接到其客户端主机的以太网/L2(例如分接器)网络接口来充当交换机/“路由器”。你应该做的是过滤FORWARDebtables

ebtables -A FORWARD --protocol ipv4 --ip-proto udp --ip-dport 67:68 -j DROP

(实际上,据我所知,68单独应该做。)

您不需要 MAC/IP/接口匹配的原因是,FORWARD链本身已经处理了这一点:它适用于从一个桥接端口到另一个桥接端口的流量,但不适用于源自或目标于桥接的流量主机本身。

你可能不知道真的需要在 L2 或 L3 上对“权威”服务器本身进行过滤 ( INPUT),除非您还在其上运行 DHCP 客户端非特定于接口的方式。可能值得一提的是,如果您确实想使用ebtables (您不必这样做;iptables可以处理这种情况),而不是-i/ --in-interface,您应该使用可能是--logical-in,其值为桥接接口本身。

顺便说一句,来自 shorewall 页面的引用对我来说几乎没有任何意义,因为 ebtables 也是 Netfilter 的一部分。 (它甚至看起来不是一个语法正确的句子。)我想它想说的是,iptables 不会过滤在 L2 上转发的流量(即通过桥从一个端口到另一个端口的流量)。

编辑:显然我在一件事上错了。我刚刚意识到 iptables 既不能阻止入站也不能阻止出站 DHCP 消息。也许这就是海岸墙引文想要表达的意思。然而,您可以使用 ebtables 阻止它们的事实仍然存在。 (请注意,ebtables 规则仅适用于桥接接口,因此--logical-in如果只有一个匹配,则匹配是可选的。)

PS"router"上面提到的事实是,我们所说的路由器通常也由交换机组成(即具有分别在L2和L3上转发的组件。)

相关内容