Ale*_*exH 4 security firewall administration iptables
考虑这两组规则:
套餐A
-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A INPUT -j REJECT
-A OUTPUT -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
B组
-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A INPUT -j REJECT
-A OUTPUT -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
以前我的印象是两者在功能上是相同的,但最近有人对我说:
要建立一个ESTABLISHED,RELATED连接,您必须有一个规则,将连接添加到该规则查看的数据库中。这是通过NEW规则完成的。一旦连接被接受,它就会被放入数据库中,因此ESTABLISHED,RELATED规则可以与之匹配。如果没有NEW规则,db 中没有任何内容,因此ESTABLISHED,RELATED将永远不会匹配任何内容。
所以我承认我对内部的iptables
运作方式有点困惑,究竟是如何iptables
根据数据包状态标记数据包的?
[不幸的是,由于消失了,我不得不从下面删除引用,iptables.info
所以你可能不得不相信我的几点。]
如果没有 NEW 规则,db 中没有任何内容,因此 ESTABLISHED,RELATED 将永远不会匹配任何内容。
这是错误的。
有五种用户态状态(内核空间中有更多状态),虽然 ESTABLISHED 或 RELATED 连接在逻辑上确实需要以 NEW 数据包开始,但您不需要任何显式的 NEW 规则来生成这样的连接(您确实需要显式的然而,隐含包含新数据包的接受)。按照逻辑,首先考虑其他四种状态,例如:
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -m state --state INVALID -j REJECT --reject-with icmp-net-prohibited
-A INPUT -m state --state INVALID -j REJECT --reject-with icmp-net-prohibited
Run Code Online (Sandbox Code Playgroud)
我已经遗漏了 NOTRACK,因为它只能由于先前的iptables
规则而存在。猜猜应用这些规则后还剩下什么?只有新数据包。您现在可以根据需要对它们进行排序。它会起作用,我保证,并注意:根本没有新规则。没有任何。
iptables 究竟是如何根据数据包状态标记数据包的?
发送回复后建立连接。协议的性质显然在这里发挥了一些作用(内核也应用了这些规则);例如,当一个新的 SYN TCP 数据包被接受时,一个 SYN/ACK 被发送作为回复并且连接被建立;在最终的 FIN/ACK 之后,它已失效。
一个连接如何被认为是 RELATED 显然进一步取决于所涉及的协议;基本上它涉及到/来自已经具有 ESTABLISHED 连接的主机的连接。请注意,有时您必须加载特殊模块(例如,用于 ftp)才能使其工作。
归档时间: |
|
查看次数: |
3027 次 |
最近记录: |