我正在尝试在应用程序层上编写蠕虫过滤实用程序。使用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