iptables,-m状态和-m conntrack有什么区别?


48

之间的实际区别是什么?

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

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

最好使用哪一个?

谢谢。


9
请注意,对于Linux Kernel 3.7和更高版本,状态已删除。仅conntrack可用。
X先生

我正在运行3.10.0,仍然支持状态...

1
不赞成使用state来支持conntrack,并且可以根据您的内核构建方式进行编译,也可以不进行编译。
迈克尔·汉普顿

Answers:


26

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

xt_conntrack.c的标题:

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

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

我的电话是使用conntrack(如果需要),否则请坚持使用状态模块。

关于netfilter邮件列表的类似问题。

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


8

这两个规则的结果没有区别。两个匹配扩展名都使用相同的数据来匹配连接跟踪状态。state是“旧的”匹配扩展名,而conntrack较新,并且具有比仅匹配连接跟踪状态更多的选择。


1

iptables文档

如文档所述:

conntrack匹配是状态匹配的扩展版本,它使以更精细的方式匹配数据包成为可能。它让您查看在连接跟踪系统中直接可用的信息,而无需任何“前端”系统,例如状态匹配。有关连接跟踪系统的更多信息,请参阅“状态机”一章。


参考不再有效
prosti

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.