Linux kernel 使用iptables丢弃具有匹配字符串的数据包会丢弃所有不匹配的后续数据包
我正在尝试在应用层编写一个蠕虫过滤实用程序 我设置了以下规则来丢弃带有特定子字符串的tcp数据包 iptables-A INPUT-p tcp-m string--string“test”-j DROP--algokmp 但是,一旦找到了具有匹配字符串的数据包,所有后续数据包(即使是具有不匹配字符串的数据包)都将被丢弃,直到我从iptable刷新规则为止 我想知道为什么会发生这种情况,解决办法是什么Linux kernel 使用iptables丢弃具有匹配字符串的数据包会丢弃所有不匹配的后续数据包,linux-kernel,iptables,Linux Kernel,Iptables,我正在尝试在应用层编写一个蠕虫过滤实用程序 我设置了以下规则来丢弃带有特定子字符串的tcp数据包 iptables-A INPUT-p tcp-m string--string“test”-j DROP--algokmp 但是,一旦找到了具有匹配字符串的数据包,所有后续数据包(即使是具有不匹配字符串的数据包)都将被丢弃,直到我从iptable刷新规则为止 我想知道为什么会发生这种情况,解决办法是什么 感谢tcp是一种面向连接的可靠协议,用于维护发送数据的顺序。它不断尝试更改特定的有效负载,直到到
感谢tcp是一种面向连接的可靠协议,用于维护发送数据的顺序。它不断尝试更改特定的有效负载,直到到达该有效负载,因此在到达较旧的有效负载之前,您无法发送其他后续有效负载,这就是为什么您感觉所有后续数据包都被丢弃的原因
如果为udp设置类似的规则,则不会发生这种情况,您将能够接收与字符串不匹配的所有后续数据包。这是因为udp是一种无连接、不可靠的协议。这里有点晚了,但看到有类似问题的人。规避此问题的一种方法是在原始链中执行此规则。所有数据包都会在数据包上放置任何类型的conntrack之前到达这里,因此最好在这里进行过滤
iptables -A PREROUTING -t raw -p tcp -m string --string "test" -j DROP --algo kmp
我认为在serverfault.com上,这将被认为是一个好问题。