根據資料包的選項或類型刪除資料包

根據資料包的選項或類型刪除資料包

出於測試原因,我想根據特定資料包的選項或類型來封鎖它們。

例如,在 DHCP DORA 交易中,我只想阻止 DHCP ACK 封包。

是否可以使用 iptables 來做到這一點?如果不是,有哪些可能性?

答案1

您可以使用該u32模組。 (參見線上說明頁iptables-extensions)。它不太用戶友好,但應該可用。

DHCP 解析起來有點困難,因為部分資料(包括 DHCP 訊息類型)位於選項中,可以採用任意順序。儘管訊息類型選項可能是第一個。

DHCP 選項從 UDP 封包中的偏移量 236 開始,IP 和 UDP 標頭的長度為 20+8 位元組。因此,我們對從偏移量 264 開始的位元組感興趣。類型代碼是0x35,長度始終是0x01DHCPACK值是0x05。 (這DHCP 封包格式在 tcpipguide.com 上有描述

所以 的表達式u32可以是:

--u32 '268 >> 8 = 0x350105'

這只是意味著讀取偏移量 268 處的 4 個位元組(作為大端數字),將它們向右移動 8 位元(以保留前三個位元組),並將其與預期值進行比較。

我們也可以檢查幻數:

--u32 '264 = 0x63825363 && 268 >> 8 = 0x350105'

使用常規規則更容易檢查我們是否確實有一個 UDP 封包發送到正確的端口iptables,因此我們將使用類似以下內容來匹配預期的 DHCP 封包。

iptables -A foo -m udp --dport bootpc -m u32 --u32 '264 = 0x63825363 && 268 >> 8 = 0x350105'

不過,如前所述,DHCP 選項可以按任何順序排列,因此這不是一個可靠的方法,特別是當有人積極嘗試解決它時。但也許對於測試來說它可以。另外,我假設 IP 標頭不包含任何選項。

相關內容