【问题标题】:Dropping packets with matching string using iptables drops all the subsequent packets with no match使用 iptables 丢弃具有匹配字符串的数据包会丢弃所有不匹配的后续数据包
【发布时间】:2009-05-06 09:52:26
【问题描述】:

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

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

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

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

我想知道为什么会这样,解决办法是什么。

谢谢

【问题讨论】:

  • 我在 serverfault.com 上认为这是一个很好的问题。

标签: linux-kernel iptables


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多