-m conntrack --ctstate 和 -m state --state 有什么区别

Mik*_*kov 105 iptables

我正在阅读这个howto,并且有这样的东西:

我们可以允许已建立的会话接收流量:

$ sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

上述规则在 ESTABLISHED,RELATED 中的逗号两侧没有空格

如果上面的行不起作用,您可能在一个阉割的 VPS 上,其提供商没有提供扩展,在这种情况下,可以使用劣质版本作为最后的手段:

$ sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

是否有之间的工作一个显著差异-m conntrack --ctstate-m state --state?他们说一个可能行不通,但他们没有说为什么。为什么我应该更喜欢一个?

slm*_*slm 115

我并不声称自己是iptables规则专家,但第一个命令是使用连接跟踪扩展 ( conntrack),而第二个命令是使用state扩展。

数据点 #1

根据本文档conntrack扩展名已被state.

 Obsolete extensions:
  • -m state: replaced by -m conntrack
Run Code Online (Sandbox Code Playgroud)

数据点 #2

即便如此,我还是发现这个 SF 问答题为:关于国家和政策的防火墙问题?OP声称在#iptables@freenode的IRC上问过这个问题。在那里讨论之后,他得出的结论是:

从技术上讲,conntrack 匹配取代了 - 因此过时了 - 状态匹配。但实际上状态匹配并没有以任何方式过时。

数据点 #3

最后我发现了这个 SF 问答题:Iptables,-m state 和 -m conntrack 之间有什么区别?. 从这个问题的答案很可能是如何看待的使用最好的证据,提供咨询conntrackstate

摘抄

两者都在下面使用相同的内核内部结构(连接跟踪子系统)。

xt_conntrack.c 的标题:

xt_conntrack - Netfilter module to match connection tracking
information. (Superset of Rusty's minimalistic state match.)
Run Code Online (Sandbox Code Playgroud)

所以我会说——状态模块更简单(可能更不容易出错)。它在内核中也更长。另一方面,Conntrack 有更多选项和功能[1]

如果您需要它的功能,我的呼吁是使用 conntrack,否则坚持使用状态模块。

[1]非常有用,例如"-m conntrack --ctstate DNAT -j MASQUERADE" 路由/DNAT 修复;-)

数据点 #4

我从 netfilter@vger.kernel.org netfilte/iptables 讨论中找到了这个线程,标题为:state match is obsolete 1.4.17,它几乎说这state只是一个别名,conntrack所以你使用哪个并不重要,在您正在使用的两种情况conntrack

摘抄

事实上,我不得不同意。为什么我们不保留“state”作为别名并接受“conntrack”中的旧语法?

如果内核具有状态,则当前状态被别名并转换为 iptables 中的 conntrack。没有脚本被破坏。

如果别名是在用户空间中完成的,内核部分可以被删除——也许有一天。

别名已经在用户空间中完成了。一种输入“状态”,然后将其转换为“conntrack”,然后将其发送到内核。(因此,据我所知,如果将 ipt_state 等模块别名添加到 conntrack 模块中,甚至可以删除状态内核模块。)

参考


小智 9

我不是 netfilter 专家,但我查看了 iptables-extension 手册页并惊奇地发现它在那里

The "state" extension is a subset of the "conntrack" module.
Run Code Online (Sandbox Code Playgroud)

所以 state 是 conntrack 的一部分,如果你真的只需要 --state 和 conntrack 更花哨的功能,那么它只是一个更简单的版本