From 419ed275faff4db5f34878aedf191f31e024caec Mon Sep 17 00:00:00 2001 From: hakansa <43675540+hakansa@users.noreply.github.com> Date: Wed, 5 Mar 2025 20:25:42 +0300 Subject: [PATCH] Handle TCP RST flag to transition connection state to closed (#3432) --- client/firewall/uspfilter/conntrack/tcp.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/client/firewall/uspfilter/conntrack/tcp.go b/client/firewall/uspfilter/conntrack/tcp.go index acf34c49d..1e6364f68 100644 --- a/client/firewall/uspfilter/conntrack/tcp.go +++ b/client/firewall/uspfilter/conntrack/tcp.go @@ -287,17 +287,24 @@ func (t *TCPTracker) updateState(key ConnKey, conn *TCPConnTrack, flags uint8, i conn.State = TCPStateCloseWait } conn.SetEstablished(false) + } else if flags&TCPRst != 0 { + conn.State = TCPStateClosed + conn.SetTombstone() + t.sendEvent(nftypes.TypeEnd, key, conn) } case TCPStateFinWait1: switch { case flags&TCPFin != 0 && flags&TCPAck != 0: - // Simultaneous close - both sides sent FIN conn.State = TCPStateClosing case flags&TCPFin != 0: conn.State = TCPStateFinWait2 case flags&TCPAck != 0: conn.State = TCPStateFinWait2 + case flags&TCPRst != 0: + conn.State = TCPStateClosed + conn.SetTombstone() + t.sendEvent(nftypes.TypeEnd, key, conn) } case TCPStateFinWait2: