2009-05-06 68 views
0

我正在嘗試在應用程序層上編寫蠕蟲過濾實用程序。使用iptables刪除匹配字符串的數據包將丟失所有後續數據包,但不匹配

我已經設置了以下規則來刪除特定子字符串的tcp數據包。

的iptables -A INPUT -p tcp的-m串--string 「測試」 -j DROP --algo KMP

但是,一旦有匹配的字符串的數據包被發現所有的後續數據包,即使刪除不匹配的字符串,直到我從iptable中清除規則。

我想知道爲什麼會發生這種情況,它的解決方案是什麼。

謝謝

+1

我thik那在serverfault.com上,這將被視爲一個很好的問題。 – innaM 2009-05-06 12:00:33

回答

2

tcp是面向連接的可靠的協議,它保持了發送數據的順序。它一直試圖改變特定的有效載荷直到它到達那裏,所以你不能發送其他後續的有效載荷,直到到達較舊的有效載荷,這就是爲什麼你覺得所有後續的數據包都被丟棄。

如果您爲udp設置了類似規則,則不會發生這種情況,您將能夠接收到與該字符串不匹配的所有後續數據包。這是因爲udp是一個無連接,不可靠的協議。

0

這裏稍晚,但看到有類似問題的人。避免這種情況的一種方法是在RAW鏈中執行此規則。所有數據包將在任何類型的conntrack被放置在數據包之前打在這裏,因此最好在這裏進行過濾。

iptables -A PREROUTING -t raw -p tcp -m string --string "test" -j DROP --algo kmp