用于指定新连接的现代 iptables 语法

用于指定新连接的现代 iptables 语法

我是 iptables 的新手,对这些年来 CLI 的变化感到困惑。我看到很多例子似乎做同样的事情但具有不同的语法。

这些是完全一样,或者它们之间有一些细微差别:

  • -p tcp -m state --state NEW
  • -p tcp -m conntrack --ctstate NEW
  • -p tcp -m tcp --syn/-p tcp --syn

如果它们完全相同,我将使用-p tcp --syn,这将简化/缩短我的配置。

答案1

man iptables-extensions

状态

“state”扩展是“conntrack”模块的子集。 “state”允许访问该数据包的连接跟踪状态。

[!] --state 状态

其中 state 是要匹配的连接状态的逗号分隔列表。仅识别“conntrack”无法理解的状态的子集:INVALID、ESTABLISHED、NEW、RELATED 或 UNTRACKED。有关它们的描述,请参阅本联机帮助页中的“conntrack”标题。

[...]

连线

该模块与连接跟踪结合使用时,允许访问该数据包/连接的连接跟踪状态。

[!] --ctstate 状态列表

statelist 是要匹配的连接状态的逗号分隔列表。下面列出了可能的状态。 [...]

[...]

传输控制协议

如果指定了“--protocol tcp”,则可以使用这些扩展。它提供以下选项:

[!] --syn

仅匹配 SYN 位设置且 ACK、RST 和 FIN 位清零的 TCP 数据包。此类数据包用于请求 TCP 连接发起;例如,阻止此类数据包进入接口将阻止传入 TCP 连接,但传出 TCP 连接将不受影响。

所以前两个是等价的,最后一个做了不同的事情(你可以用它来堵塞例如,TCP 连接尝试)。

相关内容