iptables 刪除長度和 TTL 條件不起作用

iptables 刪除長度和 TTL 條件不起作用

使用iptablesLinux 主機上的實用程式需要建立迷你防火牆。我需要刪除所有套件長度大於 722 且 TTL 大於 22 的傳入連線。僅當兩個條件都為 TRUE 時才刪除。

sudo iptables -N LOGDROP
sudo iptables -A OUTPUT -m ttl --ttl-gt 22 -j LOGDROP
sudo iptables -A INPUT -m ttl --ttl-gt 22 -j LOGDROP
sudo iptables -A LOGDROP -m length --length 722:65535 -j DROP

主機的IP位址10.6.7.9帶有防火牆。

我從這台主機做了 4 次測試,嘗試 ping 另一台主機:

ping -s 10000 -t 250 10.6.7.10 //fail (TTL AND LENGHT are wrong)
ping -s 100 -t 200 10.6.7.10 //success (TTL is wrong)
ping -s 10 -t 10 10.6.7.10 //success (Both are right)
ping -s 10000 -t 10 10.6.7.10 // fail, BUT SHOULD BE TRUE.

為什麼最後一次 ping 不起作用,如何解決?

答案1

如果兩個條件必須同時成立,則應建構以下條件:

sudo iptables -A OUTPUT -m ttl --ttl-gt 22 -m length --length 722:65535 -j DROP

sudo iptables -A INPUT -m ttl --ttl-gt 22 -m length --length 722:65535 -j DROP

答案2

很有可能來自遠端主機的 ping 回應具有較大的 TTL,因為該-t選項僅設定傳出資料包的 TTL。目前常見的預設 TTL 是 64。

另一種可能性是,由於 10000 位元組 ping 必須分段,遠端主機拒絕回覆它。嘗試發送 800 位元組 ping。

另外,如果您這樣做,sudo iptables -L -v它會告訴您該規則已命中多少次。這對於調試很有用。

另一個調試選項是執行以下規則:

sudo iptables -A LOGDROP -m length --length 722:65535 -j LOG

在 DROP 規則之前。這將在丟棄資料包之前將其記錄到內核日誌中(使用 讀取dmesg)。然後您就可以計算出丟失了什麼。

相關內容