Re: too many INVALID packets

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wednesday 18 of June 2008, you wrote:
> Hello,

Thanks for quick reply.

> On Wed, 18 Jun 2008, Vladislav Kurz wrote:
> > I have a couple of questions about netfilter conntrack and INVALID
> > packets.
> >
> > I'm administrator of couple of servers, some of them still running 2.4
> > kernels, some running (upgraded or new install) to 2.6.18 (Debian
> > packaged kernels). On all of them I have firewall beginning with these
> > rules:
> >
> > iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j
> > ACCEPT iptables -t filter -A INPUT -m state --state INVALID -j DROP
> >
> > and the same in FORWARD chain.
> >
> > Machines with 2.4 kernel see almost no INVALID packets in the long run.
> > Machines with 2.6 kernel see hundreds of INVALID packets every day.
> > I suppose that the logic deciding what is INVALID has changed a lot a now
> > catches more stuff than before.
>
> Yes, the main difference (from conntrack point of view) is that TCP window
> tracking was added to netfilter in 2.6. However if I recall correctly,
> 2.6.18 has got some TCP window tracking related bugs. So you should
> upgrade your kernel.

Is there any site where can I find more info on this issue?

> > Now I see log entries like:
> >
> > ip_ct_tcp: invalid packet ignored IN= OUT= SRC=a.b.c.d DST=x.y.z.q LEN=48
> > TOS=0x00 PREC=0x00 TTL=118 ID=57462 DF PROTO=TCP SPT=2745 DPT=110
> > SEQ=1241333208 ACK=0 WINDOW=65535 RES=0x00 SYN URGP=0 OPT
> > (020405B401010402) (most of them have SYN flag)
> >
> > Interesting thing is that these log entries do not match those logged by
> > iptables -t filter -A INPUT -m state --state INVALID -j LOG
> >
> > Can someone tell why these two logs do not match, and what happens with
> > packets logged by (ip_ct_tcp) ip_conntrack_log_invalid?
>
> TCP conntrack tries very hard to keep track of the connections.
>
> The packets which are logged as 'invalid packet ignored' looks to
> conntrack as invalid, because it holds a connections and the packet does
> not fit into the stream. But at the same time it might be that conntrack
> holds a dead connection and the packet is a real, new,
> connection-initiating packet (SYN flag is on). So conntrack ignores the
> seemingly invalid packet, flags it as 'ESTABLISHED' (not 'INVALID') and
> lets it through. The reply packet will tell conntrack what should it do:
> delete the old dead connection or keep it as real.
>
> ip_conntrack_log_invalid logs the "magic", which can help to identify
> possible problems in TCP connection tracking: ignored packets or packets
> dropped by conntrack itself. All else is flagges as NEW, ESTABLISHED,
> RELATED or INVALID.

So does that mean that some packets are dropped before they enter iptables?
Which ones?

>
> > I noticed that iptables offers new match: -m conntrack --ctstate
> > which has also NEW, RELATED, ESTABLISHED and INVALID states. Are they
> > somehow different from those matched by -m state --state ?
>
> The conntrack match offers more internal flags (like SNAT, DNAT) above
> the state match.

Ok, thats documented,what I wanted to know is if the four states NEW, RELATED, 
ESTABLISHED and INVALID are equal in -m conntrack and -m state.

> > At last I would like to know if conntrack cares about TCP flags? Does it
> > check if NEW (and RELATED) TCP packets have SYN flag set and if not
> > treats them as INVALID? I tried this:
> >
> > iptables -t filter -A INPUT -m state --state NEW -p tcp ! --syn -j LOG
> >
> > and it catches quite a lot of packets, but still it seems that conntrack
> > knows about TCP connections being opened (SYN) and closed (FIN). Is there
> > any reason for NEW packets without SYN to be allowed through?
>
> Yes, it's a (well known) feature of netfilter. This way we can catch up
> connections already established. If you do not want to support it, use
> the last rule you wrote.

I thought it might be useful to block some weird portscans (e.g. nmap xmas 
scan).

> Back to the INVALID packets: enable ip_conntrack_tcp_be_liberal:
>
> # echo 1 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_be_liberal
>
> If the INVALID packets disappear, it can indicate the TCP window tracking
> bug and then you should use a newer kernel release (or run with
> ip_conntrack_tcp_be_liberal enabled).

Yep, I had this enabled on those servers. Now I turned it off on one of them 
and get more logs of this type: 

ip_ct_tcp: SEQ is under the lower bound (already ACKed data retransmitted) IN= 
OUT= SRC=192.168.1.10 DST=192.168.2.122 LEN=40 TOS=0x00 PREC=0x00 TTL=64 
ID=44558 DF PROTO=TCP SPT=3128 DPT=2140 SEQ=2998644047 ACK=4173779699 
WINDOW=62780 RES=0x00 ACK FIN URGP=0 UID=13

ip_ct_tcp: ACK is under the lower bound (possible overly delayed ACK) IN= OUT= 
SRC=192.168.2.122 DST=192.168.1.10 LEN=40 TOS=0x
00 PREC=0x00 TTL=128 ID=46970 DF PROTO=TCP SPT=2140 DPT=3128 SEQ=4173779699 
ACK=2998644048 WINDOW=64313 RES=0x00 ACK URGP=0

INVALID: IN=eth0 OUT= MAC=00:1a:64:6d:96:3f:00:13:d3:ed:6e:c7:08:00 
SRC=192.168.2.122 DST=192.168.1.10 LEN=40 TOS=0x00 PREC=0x00
 TTL=128 ID=46970 DF PROTO=TCP SPT=2140 DPT=3128 WINDOW=64313 RES=0x00 ACK 
URGP=0

Last line is logged by iptables. What I wonder is that there is corresponding 
log from iptables to "ACK is under the lower bound" but not to "SEQ is under 
the lower bound". I get also quite a few "ACK/SEQ is over the upper bound" 
bith with corresponding log from iptables. Does that mean that packets 
with "SEQ under the lower bound" are ESTABLISHED ? Thinking more about it, 
they should - ACK might be lost, so retransmitting already ACKed data is ok.

Where can I find which ip_ct_tcp log entries get flagged as INVALID and which 
as other states? 


-- 
Regards
        Vladislav Kurz
--
To unsubscribe from this list: send the line "unsubscribe netfilter" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Netfilter Development]     [Linux Kernel Networking Development]     [Netem]     [Berkeley Packet Filter]     [Linux Kernel Development]     [Advanced Routing & Traffice Control]     [Bugtraq]

  Powered by Linux