在 iptables 中匹配多个字符串

在 iptables 中匹配多个字符串

我有 2 个字符串,并且如果数据包包含这两个字符串(例如(“jsh”&&“gjhyg”)),我希望将其排队,我尝试了以下方法,但它们似乎不起作用:

sudo iptables -A INPUT -p tcp -j QUEUE !-f -m 字符串 --string “abc” --algo bm -m 字符串 --string “def” --algo bm

这不起作用,只有当数据包包含字符串“abcdef”时才有效,但我希望排队的数据包在两个不同的位置包含字符串。然后我尝试了另一种方法:

sudo iptables -A INPUT -p tcp -j QUEUE !-f -m 字符串 --string “abc” --algo bm

sudo iptables -A INPUT -p tcp -j QUEUE !-f -m 字符串 --string “def” --algo bm

但这次它的工作方式类似于“或”,它将数据包与字符串“abc”或“def”排队。

答案1

在这种情况下,“和”可以通过用户定义的链来实现

sudo iptables -N my_chain

sudo iptables -A my_chain -p tcp -j QUEUE !-f -m 字符串 --string “def” --algo bm

sudo iptables -A INPUT -p tcp -j my_chain !-f -m 字符串 --string "abc" --algo bm

当输入链处理最后一行并且出现“abc”时,控制跳转到 my_chain,它具有类似的规则,检查是否存在“def”;如果存在“def”,则跳转到 QUEUE。

相关内容