Linux Netfilter discussions
 help / color / mirror / Atom feed
From: Florian Westphal <fw@strlen.de>
To: Jerome Barotin <jbn@s4e.fr>
Cc: netfilter@vger.kernel.org
Subject: Re: How to understand causes of invalid state for an OUPUT SYNACK packet
Date: Fri, 21 Jan 2022 13:40:59 +0100	[thread overview]
Message-ID: <20220121124059.GA14018@breakpoint.cc> (raw)
In-Reply-To: <20220121122332.1501d9ba@glazard>

Jerome Barotin <jbn@s4e.fr> wrote:
> I've got a specific device (industrial computer) where its
> TCP connection are always blocked by netfilter when it tries to
> connect to my server. 
> 
> Exactly the SYN packet is forwarded to my local process, but, the
> SYN-ACK answer is always tagged as invalid by the conntrack
> module, 

Its not, the message is misleading.

> I noticed this behaviour in the following line in kern.log :
> 
> Jan 14 11:26:15 myhostname kernel: [260283.271861] nf_ct_proto_6:
> invalid packet ignored in state SYN_RECV  IN= OUT= SRC=10.1.1.4
> DST=10.1.1.3 LEN=52 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=TCP SPT=21
> DPT=64004 SEQ=1624381780 ACK=2190670817 WINDOW=64240 RES=0x00 ACK SYN
> URGP=0 OPT (020405B40101040201030307) 

Maybe we should just axe this message.  The packet is *ignored*, not
marked as invalid.  Such packet will NOT trigger -m conntrack --ctstate
INVALID.  The wording was slightly changed in 5.12 kernel, where this is
now:

nf_ct_proto_6: packet (index 1) in dir 1 ignored, state SYN_RECV IN=...

> The corresponding pcap file can be found here :
> https://filebin.net/yazmmekhrdiu4dh8/capture_not_work_ano.pcap

Thanks, lets see (trimmed line length):
.3.64004 > 10.1.1.4.21: Flags [S], seq 2190670816, win 8192, options [mss 1330,nop,wscale 8,nop,nop,sackOK], length 0

This packets gets us to SYN_SENT state:
tcp      6 116 SYN_SENT src=10.1.1.3 dst=10.1.1.4 sport=64004 dport=21 [UNREPLIED] src=10.1.1.4 dst=10.1.1.3 sport=21 dport=64004 mark=0 use=1

... packet would match --ctstate NEW.

.4.21 > 10.1.1.3.64004: Flags [S.], seq 1624381780, ack 2190670817, win 64240, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0

This packet gets us to SYN_RECV state.
... packet would match --ctstate ESTABLISHED.

.4.21 > 10.1.1.3.64004: Flags [S.], seq 1624381780, ack 2190670817, win 64240, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0

This packet produces the 'ignored' message quoted above, its ignored
because we already saw such packet before, so packet matches ESTABLISHED
state.

.4.21 > 10.1.1.3.64004: Flags [S.], seq 1624381780, ack 2190670817, win 64240, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0

This repeats the message, no other side effects.

.3.64004 > 10.1.1.4.21: Flags [S], seq 2190670816, win 65535, options [mss 1330,nop,nop,sackOK], length 0

Similar message, this is for 'index 0'

4.21 > 10.1.1.3.64004: Flags [S.], seq 1624381780, ack 2190670817, win 64240, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0

> Also, I do not understand how this connection could be in SYN_RECV
> conntrack state. This state means that SYN-ACK packet has already been
> received and I'm sure that no such packet has already been submitted.

Where was that dump taken?  Its what I used to tcpreplay into a vm.

> Do I miss something ? Anybody has got idea to help me understand (and
> fix) this case ?

Is the conntrack machine forwarding or an endpoint?

If forwarding, can you provide pcaps from the inbound
and outbound interfaces?

You could also -j LOG packets in state INVALID to pinpoint which
packet really does get marked as INVALID, but afaict its not a
packet contained in the provided pcap.

  reply	other threads:[~2022-01-21 12:40 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-01-21 11:23 How to understand causes of invalid state for an OUPUT SYNACK packet Jerome Barotin
2022-01-21 12:40 ` Florian Westphal [this message]
2022-01-21 16:58   ` Jerome Barotin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220121124059.GA14018@breakpoint.cc \
    --to=fw@strlen.de \
    --cc=jbn@s4e.fr \
    --cc=netfilter@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox