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


85

我正在阅读此方法手册,并且类似以下内容:

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

$ sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

上面的规则在ESTABLISHED中已显示,逗号两侧没有空格

如果上面的行不起作用,您可能正在使用cast割的VPS,其提供程序尚未提供扩展功能,在这种情况下,劣等版本可以用作最后的选择:

$ sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

是否有之间的工作一个显著差异-m conntrack --ctstate-m state --state?他们说可能没有用,但没有说为什么。为什么我要一个比另一个更好?



我明白了,我应该删除这个问题吗?
Mikhail Morfikov 2014年

1
@ John1024-重复项仅在单个SE站点内。只要Q在管理特定SE网站的规则之内,就可以在多个SE网站上发布类似的问题,这是完全可以的!
slm

1
@MikhailMorfikov-您的问题,尽管与其他SE网站上的其他Q相似,在这里非常好!
slm

1
@Totor-如果您在回答中看到我的“数据点#4”,state则实际上是的别名conntrack。所以没关系。我想在将来的某个时候它们可能会state全部删除,但是暂时使用它并不重要。
slm

Answers:


99

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

数据点#1

根据此文档conntrack扩展名已被取代state

 Obsolete extensions:
  • -m state: replaced by -m conntrack

数据点#2

即便如此,我还是找到了标题为:关于状态和策略的防火墙问题的 SF问题与解答。OP在#iptables @ freenode中声称在IRC上问了这个问题。在讨论之后,他得出以下结论:

从技术上讲,conntrack匹配取代了状态匹配(因此过时了)。但是实际上,状态匹配不会以任何方式被淘汰。

数据点#3

最后,我找到了标题为:Iptables的 SF Q&A ,-m状态和-m conntrack有什么区别?。从这个问题的答案很可能是如何看待的使用最好的证据,提供咨询conntrackstate

摘抄

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

xt_conntrack.c的标题:

xt_conntrack - Netfilter module to match connection tracking
information. (Superset of Rusty's minimalistic state match.)

因此,我想说的是-状态模块更简单(并且可能更少出错)。内核中的时间也更长。另一侧的Conntrack具有更多选项和功能[1]

我的电话是在需要conntrack时使用它的功能,否则请坚持使用state模块。

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

数据点#4

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

摘抄

实际上,我必须同意。为什么我们不保留“状态”作为别名并接受“ conntrack”中的旧语法?

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

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

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

参考文献


3

我不是netfilter专家,但我调查了iptables-extension手册页并感到惊讶,

The "state" extension is a subset of the "conntrack" module.

因此,state是conntrack的一部分,如果您只需要--state而不是conntrack的更高级功能,则它只是它的简单版本

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.