Linux

iptables dhcp 監聽

  • July 26, 2021

我在我的本地 eth 中有帶有 isc-dhcp-server (DHCP rfc2131 ) 的 ubuntu 作為“權威”,並且我的本地網路的一些使用者啟動了另一個產生衝突的 dhcp (rogue)

我沒有任何帶有“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,但不確定這是否有效

這取決於您的主機的連接方式。

如果“權威”DHCP 伺服器主機及其(假定為)客戶端主機都連接到“物理”/“專用”/“獨立”(希望您知道我的意思)交換機/“路由器” ,那麼您在 DHCP 伺服器主機上實際上無能為力,因為其他“rouge”DHCP 伺服器不通過主機與其客戶端進行通信,而僅與交換機通信。

但是,如果主機還通過橋接一組連接到其客戶端主機的乙太網/L2(例如分接頭)網路介面來充當交換機/“路由器”。你應該做的是過濾FORWARDebtables

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

(實際上,AFAIK,68一個人就應該這樣做。)

您不需要 MAC/IP/介面匹配的原因是,FORWARD鏈本身已經處理了這一點:它適用於從一個網橋埠到另一個網橋埠的流量,但不適用於源自或以網橋為目標的流量主機本身。

您可能不需要在L2或 L3 上過濾“權威”伺服器INPUT本身(可能值得一提的是,如果您真的想這樣做(您不必這樣做;可以處理這種情況),而不是/ ,您應該使用的可能是,其值是橋接介面本身。ebtables iptables``-i``--in-interface``--logical-in

順便說一句,來自shorewall頁面的引用對我來說幾乎沒有任何意義,因為 ebtables 也是 Netfilter 的一部分。(它甚至似乎不是一個語法正確的句子。)我想它想說的是,iptables 不會過濾在 L2 上轉發的流量(即從一個埠到另一個埠通過橋接的流量)。

編輯:顯然我在一件事上錯了。我剛剛意識到 iptables 既不能阻止入站也不能阻止出站 DHCP 消息。可能這就是海岸牆引述想要表達的意思。但是,您可以使用 ebtables 阻止它們的事實仍然存在。(請注意,ebtables 規則僅適用於橋接介面,因此--logical-in如果只有一個,則匹配是可選的。)

上面的PS"router"是指我們所說的路由器通常也包含一個交換機(即分別在 L2 和 L3 上轉發的組件)。

引用自:https://unix.stackexchange.com/questions/352231