iptables dhcp 監聽
我在我的本地 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(例如分接頭)網路介面來充當交換機/“路由器”。你應該做的是過濾
FORWARD
鏈ebtables
: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 上轉發的組件)。