* Is it possible to access ip fragments with libnetfilter_queue?
@ 2015-04-28 7:39 Michael Fomichev
2015-04-28 19:04 ` Adel Belhouane
0 siblings, 1 reply; 2+ messages in thread
From: Michael Fomichev @ 2015-04-28 7:39 UTC (permalink / raw)
To: netfilter
Hello,
I am using libnetfilter_queue in C to capture packets. I am setting an
iptable rule to queue the incoming packets that would later be
processed by the userspace implementation like this: iptables -A INPUT
-j NFQUEUE --queue-num 0. I used nfqnl_test.c example as a framework
to implement the capture. Everything works as expected. However, I
noticed that it is impossible to inspect the queue on the level of ip
fragments. That is, if a packet is coming in fragments it is first
reassembled before being put into the queue. But I would like to work
with fragments. So is there a way to enforce that kind of behavior?
What I want to have is a queue where I could observe raw incoming
packets (both fragmented and unfragmented) so I would be able to act
on them accordingly.
I read that the reassembly indeed happens before. On the other hand,
with iptables there is -f flag available so there should be a
"fragmentation granularity" which I am looking for. I also tried
adjusting iptable rules (e.g. iptables -t raw -D PREROUTING -i eth0 -j
NFQUEUE --queue-num 0), but the result is still the same. I can only
observe already reassembled packet which I definitely know that
arrives in fragments.
Any help is really appreciated
Best regards,
Michael
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: Is it possible to access ip fragments with libnetfilter_queue?
2015-04-28 7:39 Is it possible to access ip fragments with libnetfilter_queue? Michael Fomichev
@ 2015-04-28 19:04 ` Adel Belhouane
0 siblings, 0 replies; 2+ messages in thread
From: Adel Belhouane @ 2015-04-28 19:04 UTC (permalink / raw)
To: Michael Fomichev, netfilter
Le 28/04/2015 09:39, Michael Fomichev a écrit :
> Hello,
>
> I am using libnetfilter_queue in C to capture packets. I am setting an
> iptable rule to queue the incoming packets that would later be
> processed by the userspace implementation like this: iptables -A INPUT
> -j NFQUEUE --queue-num 0. I used nfqnl_test.c example as a framework
> to implement the capture. Everything works as expected. However, I
> noticed that it is impossible to inspect the queue on the level of ip
> fragments. That is, if a packet is coming in fragments it is first
> reassembled before being put into the queue. But I would like to work
> with fragments. So is there a way to enforce that kind of behavior?
> What I want to have is a queue where I could observe raw incoming
> packets (both fragmented and unfragmented) so I would be able to act
> on them accordingly.
[...]
> "fragmentation granularity" which I am looking for. I also tried
> adjusting iptable rules (e.g. iptables -t raw -D PREROUTING -i eth0 -j
> NFQUEUE --queue-num 0), but the result is still the same. I can only
Defragmentation has the lowest priority in include/uapi/linux/netfilter_ipv4.h:
NF_IP_PRI_CONNTRACK_DEFRAG = -400
This is even before the RAW priority (-300), so iptables can't work before
defragmentation, unless of course nf_defrag_ipv4 isn't loaded, that is you
don't use connection tracking at all, which I'd doubt.
Try with nft/nftables, because you can choose the hook priority with nft. The
nft rules shouldn't interfere with iptables rules, both can be loaded and be
working together. I chose priority -450 because -450 < -400 , so it will run
before nf_defrag_ipv4 and I called it predefrag.
# nft -i
nft> add table filter
nft> add chain filter predefrag { type filter hook prerouting priority -450; }
nft> add filter predefrag meta iif eth0 counter queue num 0 bypass
When I run nfqnl_test, if I switch from ping -s 1472 to ping -s 1473 (ethernet
size from 1500 to 1501) from an other box, I go from 1 packet with
payload_len=1500 to two packets (payload_len 1500 and 21).
With priority -300 I get only one packet with payload_len 1501. Appears to be
working!
Normally (in all the examples...) the priority should be -300. I don't know if
there's any side effect when using -450.
Relevant documentation:
http://wiki.nftables.org/wiki-nftables/index.php/Configuring_chains
http://wiki.nftables.org/wiki-nftables/index.php/Queueing_to_userspace
>
> Any help is really appreciated
>
> Best regards,
>
> Michael
Best regards,
Adel
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2015-04-28 19:04 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-04-28 7:39 Is it possible to access ip fragments with libnetfilter_queue? Michael Fomichev
2015-04-28 19:04 ` Adel Belhouane
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox