我并不声称自己是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有什么区别?。从这个问题的答案很可能是如何看待的使用最好的证据,提供咨询conntrack
和state
。
摘抄
两者都在下面使用相同的内核内部结构(连接跟踪子系统)。
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模块中,甚至可以删除状态内核模块。)
参考文献