Using u32 together with extension headers (how to jump over them?)

Posted by bortzmeyer on Server Fault See other posts from Server Fault or by bortzmeyer
Published on 2012-10-07T13:54:57Z Indexed on 2012/10/07 15:38 UTC
Read the original article Hit count: 158

Filed under:
|
|

I'm trying to filter on some parts of the payload, for an IPv6 packet with extension headers (for instance Destination Options).

ip6tables works fine with conditions like --proto udp or --dport 109, even when the packet has extension headers. Netfilter clearly knows how to jump over Destination Options to find the UDP header.

Now, I would like to use the u32 module to match a byte in the payload (say "I want the third byte of the payload to be 42). If the packet has no extension headers something like --u32 "48&0x0000ff00=0x2800"` (48 = 40 bytes for the IPv6 header + 8 for the UDP header) works fine, If the packet has a Destination Options, it no longer matches. I would like to write a rule that will work whether the packet has Destination Options or not.

I do not find a way to tell Netfilter to parse until the UDP header (something that it is able to do, otherwise --dport 109 would not work) then to leave u32 parse the rest.

I'm looking for a simple way, otherwise, as BatchyX mentions, I could write a kernel module doing what I want.

© Server Fault or respective owner

Related posts about linux

Related posts about iptables