too many INVALID packets

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

 



Hello all.

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.

However on two servers I had to pass INVALID packets through as the users 
complained about hanging connections or being unable to connect at all.
Part of the problem involved Xen, and checksum offloading and was solved by 
turning tx-checksumming off on virtual interfaces. But even after that, this 
server and another one (without xen) see lots (thousands a day on workdays, 
hundreds a day on weekends) of INVALID packets. I do not think they are just 
some weird portscans as they come also from local network and there is 
significant drop on weekends. Most of the invalid packets have ACK FIN or ACK 
RST flags, and seem to be part (end) of regular connections. What can I do 
about these? and what happens if I just drop them?

I wanted to find out more why these packets are marked as INVALID, so I did:
echo 255 > /proc/sys/net/ipv4/netfilter/ip_conntrack_log_invalid

BTW it should be documented somwhere - not only in source code - that you have 
to enter the protocol number you want get logged. Many sources on internet 
suggest echo 1 > /proc/...log_invalid, and it sounds logical that this file 
just swithces logiing on/off. But no, it logs only the protocol you ask 
(1-ICMP, 6-TCP, 17-UDP .. see ./include/linux/in.h)

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?

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 ?

I suspected that problems might be with intel giabit ethernet cards (e1000) 
and their checksum offloading (these are the only servers with such cards) so 
I tried to disable checksum offloading, but anyway there were just a few 
logged packets with wrong checksum. Even when I turned ip_conntrack_checksum 
off situation didn't change much. Anyway, I was wondering if checksum 
offloading has any sense on firewall, as netfilter will calculate and check 
the checkums anyway. Or is there any smart communication between the driver 
and netfilter saying that checksum is ok, or will be calculated later so 
netfilter does not have to care about checksums? 

Is it possible that disabling ip_conntrack_checksums would solve the problem 
with xen machines in the same way as disabling cheksum offloading did?

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?

Thanks in advance for all answers. I tried to RTFM but didn't find these 
details anywhere so if you point me in the right direction I'd be glad.

-- 
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