IPTables 连接状态

IPTables 连接状态

在大多数默认的 iptables 配置中我读到类似这样的内容:

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[...]
-A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT

我想知道为什么--state NEW经常将其添加到第二条规则中。行为难道不一样吗?如果有新连接,则无论如何都会触发第二条规则,而如果有现有连接,则将应用第一条规则。

答案1

除了 NEW、ESTABLISHED 和 RELATED 状态之外,netfilter 还知道另外两个鲜为人知的状态,INVALID 和 UNTRACKED。

从文档中状态机

无效的
INVALID 状态表示无法识别数据包或数据包没有任何状态。这可能是由于多种原因造成的,例如系统内存不足或 ICMP 错误消息不响应任何已知连接。通常,最好丢弃处于此状态的所有内容。

未追踪
这是 UNTRACKED 状态。简而言之,如果数据包在原始表中被标记为 NOTRACK 目标,则该数据包将在状态机中显示为 UNTRACKED。这也意味着所有 RELATED 连接将不可见,因此在处理 UNTRACKED 连接时必须小心谨慎,因为状态机将无法看到相关的 ICMP 消息等。

对于有效的新连接:

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT 

效果与

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT   
-A INPUT -p tcp --dport 22 -j ACCEPT  

但后者也会接受无效的连接,这可能是您不想要的。

因此,在状态防火墙中,请确保您的规则也了解状态。

相关内容