iptables 中的状态对应的 TCP 状态是什么?(NEW 和 ESTABLISHED)

iptables 中的状态对应的 TCP 状态是什么?(NEW 和 ESTABLISHED)

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 的说法:这个传入数据包是对我们自己主机的合法请求的响应,所以让它通过。

如果您想更深入地了解流程,请参阅 这个答案

相关内容