![iptables 和 --tcp-flags](https://linux22.com/image/56541/iptables%20%E5%92%8C%20--tcp-flags.png)
如果我在预路由链的 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