1

我正在尝试在应用层编写蠕虫过滤实用程序。

我已经设置了以下规则来丢弃带有特定子字符串的 tcp 数据包。

iptables -A INPUT -p tcp -m string --string "test" -j DROP --algo kmp

但是,一旦找到具有匹配字符串的数据包,所有后续数据包,即使字符串不匹配也会被丢弃,直到我从 iptable 刷新规则。

我想知道为什么会发生这种情况以及解决方案是什么。

谢谢

4

2 回答 2

3

tcp 是面向连接的可靠协议,它维护正在发送的数据序列。它会一直尝试更改特定的有效负载,直到它到达那里,因此在到达旧的有效负载之前您无法发送其他后续有效负载,这就是为什么您觉得所有后续数据包都被丢弃的原因。

如果您为 udp 设置了类似的规则,这将不会发生,您将能够接收所有与字符串不匹配的后续数据包。这是因为 udp 是一种无连接、不可靠的协议。

于 2009-05-06T10:21:03.820 回答
1

这里有点晚了,但看到有类似问题的人。避免这种情况的一种方法是在 RAW 链中执行此规则。在任何类型的 conntrack 放置在数据包上之前,所有数据包都会到达这里,因此最好在此处进行过滤。

iptables -A PREROUTING -t raw -p tcp -m string --string "test" -j DROP --algo kmp
于 2016-09-22T04:38:54.937 回答