Hub*_*bro 21 networking linux iptables
我在不同的超级用户回答中看到了这个 iptables 片段:
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
关键是始终允许作为已建立连接的一部分发送的数据包。我想知道的部分是前两行。
对于INPUT链,同时写-m conntrack --ctstate RELATED,ESTABLISHED和 有什么意义-m state --state RELATED,ESTABLISHED。似乎两者都应该做同样的事情?
解释这两者之间的区别会很好。
har*_*ymc 19
主要回答:
Conntrack取代state,但在现代内核中,两者现在没有区别。
如果内核有它,State当前conntrack在 iptables 中被别名和翻译,所以语法-m state --state
实际上被翻译成
-m conntrack --ctstate同一个模块并由它处理。
但是,在某些旧内核上,必须专门启用 contrack。
可能的解释:
在我看来,您引用的规则似乎包含重复项,既适用于旧内核,也适用于新内核。
或者这可能只是Cargo cult 编程的一个例子。
2012年的ServerFault上有这样一个问题:
两者之间的实际区别是什么:
Run Code Online (Sandbox Code Playgroud)iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT和
Run Code Online (Sandbox Code Playgroud)iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT哪一个最好用?
接受的答案是:
两者都使用相同的内核内部结构(连接跟踪子系统)。
标题
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" routing/DNAT fixup;-)
其他答案之一导致了这份关于 的文档iptables。它说:
该
conntrack匹配是匹配的扩展版本state,它使得以更精细的方式匹配数据包成为可能。它可以让您查看连接跟踪系统中直接可用的信息,而无需任何“前端”系统,例如比赛中的系统state。
所以我认为这是真的(来自另一个答案):
这两条规则的结果没有区别。
请注意,该问题下还有一条有趣的评论:
state已被弃用,取而代之的是conntrack,并且可能会也可能不会编译,具体取决于内核的构建方式。
| 归档时间: |
|
| 查看次数: |
18641 次 |
| 最近记录: |