我正在嘗試在應用程序層上編寫蠕蟲過濾實用程序。使用iptables刪除匹配字符串的數據包將丟失所有後續數據包,但不匹配
我已經設置了以下規則來刪除特定子字符串的tcp數據包。
的iptables -A INPUT -p tcp的-m串--string 「測試」 -j DROP --algo KMP
但是,一旦有匹配的字符串的數據包被發現所有的後續數據包,即使刪除不匹配的字符串,直到我從iptable中清除規則。
我想知道爲什麼會發生這種情況,它的解決方案是什麼。
謝謝
我正在嘗試在應用程序層上編寫蠕蟲過濾實用程序。使用iptables刪除匹配字符串的數據包將丟失所有後續數據包,但不匹配
我已經設置了以下規則來刪除特定子字符串的tcp數據包。
的iptables -A INPUT -p tcp的-m串--string 「測試」 -j DROP --algo KMP
但是,一旦有匹配的字符串的數據包被發現所有的後續數據包,即使刪除不匹配的字符串,直到我從iptable中清除規則。
我想知道爲什麼會發生這種情況,它的解決方案是什麼。
謝謝
tcp是面向連接的可靠的協議,它保持了發送數據的順序。它一直試圖改變特定的有效載荷直到它到達那裏,所以你不能發送其他後續的有效載荷,直到到達較舊的有效載荷,這就是爲什麼你覺得所有後續的數據包都被丟棄。
如果您爲udp設置了類似規則,則不會發生這種情況,您將能夠接收到與該字符串不匹配的所有後續數據包。這是因爲udp是一個無連接,不可靠的協議。
這裏稍晚,但看到有類似問題的人。避免這種情況的一種方法是在RAW鏈中執行此規則。所有數據包將在任何類型的conntrack被放置在數據包之前打在這裏,因此最好在這裏進行過濾。
iptables -A PREROUTING -t raw -p tcp -m string --string "test" -j DROP --algo kmp
我thik那在serverfault.com上,這將被視爲一個很好的問題。 – innaM 2009-05-06 12:00:33