iptables 手册说
ESTABLISHED 表示该数据包与一个已在两个方向上看到数据包的连接相关联,NEW 表示该数据包已启动新连接,或者与一个在两个方向上都未看到数据包的连接相关联
我不太清楚。我的理解是
对于服务器:
- 在接收到传入的 SYN 数据包时,iptables 认为它是 PREROUTING 链中的新数据包。
- 在接收到 SYN+ACK 数据包时,它会在 PREROUTING 链中建立。
对于客户来说:
- 发送 SYN 数据包时,它在 OUTPUT 链中是 NEW
- 收到 SYN+ACK 数据包后,仍为 NEW
- 在发送 ACk 数据包时,它在 OUTPUT 链中已建立。
是对的吗?
答案1
我想通了
对于服务器:
- 在接收到传入的 SYN 数据包时,iptables 认为它是 PREROUTING 链中的新数据包。
- 在发送 SYN+ACK 数据包时,它在 POSTROUTING 链中已建立。
对于客户来说:
- 在发送 SYN 数据包时,它在 POSTROUTING 链中是 NEW
- 当接收到 SYN+ACK 数据包时,它在 PREROUTING 链中就被建立了。
conntrack/iptables 中的 ESTABLISHED 概念与需要第三次握手的 TCP 不同。这就是我感到困惑的原因。
答案2
处于 RELATED 或 ESTABLISHED 状态的数据包属于已打开的连接。您通常需要接受它们,否则连接将正确建立,但在初始握手之后将无法进行任何传输。
换句话说,这是 Linux 的说法:这个传入数据包是对我们自己主机的合法请求的响应,所以让它通过。
如果您想更深入地了解流程,请参阅 这个答案。