iptables 和 --tcp-flags

iptables 和 --tcp-flags

如果我在预路由链的 nat 表中有以下规则:

   0     0 REDIRECT   tcp  --  eth5  any     anywhere             anywhere             tcp flags:FIN,SYN,RST,ACK/SYN redir ports 20000

我的目的是 DNAT 到传入接口(因此是重定向目标),并且我只想重定向设置了 SYN 标志且未设置所有其他标志的数据包。我想知道这个规则是否正确。如果有一个数据包仅设置了 SYN 和 URG 标志,会发生什么情况?或者仅设置 SYN 和 PUSH 标志?据我所知,这不符合上述规则。在这种情况下,数据包不会被重定向。

据我了解,我应该将--tcp-flags规则更改为:

--tcp-flags ALL SYN

在这种情况下,即使设置了 PUSH 和 URG 标志,它也会(编辑:不是!!)被重定向,这就是我想要的。这就是为什么我认为这是正确的。

我的推理正确吗?

编辑:当我思考这个问题时,我变得越来越困惑。反思我刚刚写的内容,是否包含 PUSH 或 URG 标志并不重要,因为似乎在这两种情况下它都不会被重定向。所以从逻辑上来说似乎

FIN,SYN,RST,ACK/SYN is equal to --tcp-flags ALL SYN

相关内容