我正在阅读这个howto,并且有这样的东西:
我们可以允许已建立的会话接收流量:
Run Code Online (Sandbox Code Playgroud)$ sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT上述规则在 ESTABLISHED,RELATED 中的逗号两侧没有空格
如果上面的行不起作用,您可能在一个阉割的 VPS 上,其提供商没有提供扩展,在这种情况下,可以使用劣质版本作为最后的手段:
Run Code Online (Sandbox Code Playgroud)$ sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
是否有之间的工作一个显著差异-m conntrack --ctstate和-m state --state?他们说一个可能行不通,但他们没有说为什么。为什么我应该更喜欢一个?
slm*_*slm 115
我并不声称自己是iptables规则专家,但第一个命令是使用连接跟踪扩展 ( conntrack),而第二个命令是使用state扩展。
根据本文档,conntrack扩展名已被state.
Obsolete extensions:
• -m state: replaced by -m conntrack
Run Code Online (Sandbox Code Playgroud)
即便如此,我还是发现这个 SF 问答题为:关于国家和政策的防火墙问题?OP声称在#iptables@freenode的IRC上问过这个问题。在那里讨论之后,他得出的结论是:
从技术上讲,conntrack 匹配取代了 - 因此过时了 - 状态匹配。但实际上状态匹配并没有以任何方式过时。
最后我发现了这个 SF 问答题:Iptables,-m state 和 -m conntrack 之间有什么区别?. 从这个问题的答案很可能是如何看待的使用最好的证据,提供咨询conntrack和state。
摘抄
两者都在下面使用相同的内核内部结构(连接跟踪子系统)。
xt_conntrack.c 的标题:
Run Code Online (Sandbox Code Playgroud)xt_conntrack - Netfilter module to match connection tracking information. (Superset of Rusty's minimalistic state match.)所以我会说——状态模块更简单(可能更不容易出错)。它在内核中也更长。另一方面,Conntrack 有更多选项和功能[1]。
如果您需要它的功能,我的呼吁是使用 conntrack,否则坚持使用状态模块。
[1]非常有用,例如
"-m conntrack --ctstate DNAT -j MASQUERADE"路由/DNAT 修复;-)
我从 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 更花哨的功能,那么它只是一个更简单的版本