Re: Bug in xdp synproxy kernel code

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

 



Hi Vincent, list,

iptables -t filter -A FORWARD \
    -i eth1 -p tcp -m tcp --dport 80 -m state --state INVALID,UNTRACKED \
    -j SYNPROXY --sack-perm --timestamp --wscale 7 --mss 1460
iptables -t filter -A FORWARD \
    -i eth1 -m state --state INVALID -j DROP

I have been unable to get it working by attaching  xdp synproxy to
firewall/router without having target/protected destination IP on
firewall/router by adding rules in filter table INPUT chain, your idea
of adding  rules in filter FORWARD  chain solves my puzzle :)

Glad that that helped! It was something that Minh struggled with too, for a while.

Indeed you need to use the INPUT chain for traffic destined to the host itself (eg when you run this code on a webserver, reverse proxy or something like HAproxy in TCP mode). The FORWARD chain should be used when the host is just a hop in the path, so when it's bridging or routing the traffic, as is the case with a firewall placed in front of one or more servers.

Our use case is a transparent firewall that can be placed in line with traffic to clean it, so probably similar to what you were trying.

On a side note: the presentation [0] that you reference in your repo [1] also gives an example with the FORWARD chain, see pages/slides 12 & 13.


I use the curl command in the client to get the web page from the
server for testing. It is strange for me that after the synproxy code
completes the 3 way handshake tcp with the client, it sends the syn
packet to the server but it drops the SYNACK packet from the server.

I guess maybe originally the synproxy code is not expected to handle
SYNACK from the backend server?

Looking through the code, we thought that it was actually designed to handle this (but not sure how it was tested then, and why this issue hadn't been identified yet).


Now the xdp synproxy kernel code does not drop the SYNACK tcp packet
from the server.

Thanks for the analysis, if this is right and confirmed by other
expert, I guess I should also fix it up in the xdp synproxy  code I
ported to bpf-samples repo
https://github.com/xdp-project/bpf-examples/tree/master/xdp-synproxy.

Well, it would be nice if you can also test and validate our patch - having read through the code numerous times and after several tests in our VM setup (as Minh describes), this change makes the code do what we expect.

It has been accepted into bpf-next [2], so hopefully it will propagate to the relevant upstream repos - and maybe make it into Linux kernel 6.8.


Kind regards,

Jeroen van Ingen Schenau

[0]: https://netdevconf.info/0x15/slides/30/Netdev%200x15%20Accelerating%20synproxy%20with%20XDP.pdf
[1]: https://github.com/xdp-project/bpf-examples/tree/master/xdp-synproxy
[2]: https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git/commit/?id=b6a3451e0847




[Index of Archives]     [Linux Networking Development]     [Fedora Linux Users]     [Linux SCTP]     [DCCP]     [Gimp]     [Yosemite Campsites]

  Powered by Linux