* Re: Fwd: Issue migrating "iptables -m socket --transparent" into nftables [not found] ` <CAKcfE+anbh1OoHt7vgyYRt89J-fjsKK48Fzy8SCm3RP=HQQcOw@mail.gmail.com> @ 2020-08-18 11:08 ` Nirgal Vourgère 2020-08-19 7:58 ` Pablo Neira Ayuso 0 siblings, 1 reply; 7+ messages in thread From: Nirgal Vourgère @ 2020-08-18 11:08 UTC (permalink / raw) To: pablo, Balazs Scheidler, netfilter [-- Attachment #1: Type: text/plain, Size: 2260 bytes --] On Tuesday, 18 August 2020 11:18:50 CEST Balazs Scheidler wrote: >> Does any one know the proper equivalent to >> iptables -t mangle -A PREROUTING -m socket --transparent -j MARK --set-mark 1 >> using nft? > > The original iptables "socket" match had an extra check so that it wouldn't > match listener sockets, at least by default (that is if --nowildcard is not > specified). > > I don't see however how "outbound masqueraded connection" could be > impacted. The "socket transparent 1" expression should require that the > socket being matched has IP_TRANSPARENT setsockopt set. Are those > connections also initiated by haproxy? > > In any case, I think the check to ignore wildcard bound listener sockets is > definitely missing, however I am not sure how to properly add it to > nftables. If I added it to the socket match implementation that might break > a few currently well behaving use-cases. @pablo@netfilter.org > <pablo@netfilter.org> can you please advise? This is the check that is in > iptables -m socket: > > wildcard = (!(info->flags & XT_SOCKET_NOWILDCARD) && > sk_fullsock(sk) && > inet_sk(sk)->inet_rcv_saddr == 0); > > And then if --transparent is used, these sockets are not accepted / the > rule does not match. That's it I guess: I tried adding --nowildcard to my working iptables rules and I got the same error, https connections from the lan side are not masqueraded toward the wan, but routed locally to the socket listening to *:443. (thanks tcptraceroute for the info) So basically nft > socket transparent 1 meta mark set 1 may be the equivalent of iptables > -m socket --transparent --nowildcard -j MARK --set-mark 1 while I'm looking for *not* having "--nowildcard". Any idea about how work around this? I was thinking of using the "fib" rules to match the wan side packets since they have a destination ip address that match one of the local address, while the wan bound packets don't. Regarding your question about IP_TRANSPARENT setsockopt, I don't quite know how to look at that easily. Attached is a fragment from my haproxy.cfg file, the key points being "source 0.0.0.0 usesrc clientip" and "bind :443 strict-sni transparent". [-- Attachment #2: haproxy.cfg --] [-- Type: text/plain, Size: 1996 bytes --] ############################################################################ # DO NOT EDIT THAT FILE # Notice: That file was generated using: # /root/bin/update-virtualhosts /etc/haproxy/virtualhosts.haproxy # See /etc/haproxy/virtualhosts.haproxy/config ############################################################################ global log /dev/log local0 log /dev/log local1 notice chroot /var/lib/haproxy stats socket /run/haproxy/admin.sock mode 660 level admin stats timeout 30s # user haproxy # transparent proxying requires root privileges group haproxy daemon # Default SSL material locations ca-base /etc/ssl/certs crt-base /etc/ssl/private # Default ciphers to use on SSL-enabled listening sockets. # For more information, see ciphers(1SSL). This list is from: # https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/ # An alternative list with additional directives can be obtained from # https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=haproxy ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS ssl-default-bind-options no-sslv3 defaults source 0.0.0.0 usesrc clientip log global #mode http #option httplog option dontlognull timeout connect 5000 timeout client 50000 timeout server 50000 errorfile 400 /etc/haproxy/errors/400.http errorfile 403 /etc/haproxy/errors/403.http errorfile 408 /etc/haproxy/errors/408.http errorfile 500 /etc/haproxy/errors/500.http errorfile 502 /etc/haproxy/errors/502.http errorfile 503 /etc/haproxy/errors/503.http errorfile 504 /etc/haproxy/errors/504.http frontend https4-in bind :443 strict-sni transparent mode tcp tcp-request inspect-delay 5s tcp-request content accept if { req_ssl_hello_type 1 } default_backend https4-www2.in.nirgal.com backend https4-www2.in.nirgal.com server https4-www2.in.nirgal.com ipv4@192.168.1.99:443 ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Fwd: Issue migrating "iptables -m socket --transparent" into nftables 2020-08-18 11:08 ` Fwd: Issue migrating "iptables -m socket --transparent" into nftables Nirgal Vourgère @ 2020-08-19 7:58 ` Pablo Neira Ayuso [not found] ` <CAKcfE+Yyo-zj9Oxh4Oth6yK7SoXVfa2mQrK9-11Q5NHc09uXzQ@mail.gmail.com> 0 siblings, 1 reply; 7+ messages in thread From: Pablo Neira Ayuso @ 2020-08-19 7:58 UTC (permalink / raw) To: Nirgal Vourgère; +Cc: Balazs Scheidler, netfilter [-- Attachment #1: Type: text/plain, Size: 2276 bytes --] On Tue, Aug 18, 2020 at 01:08:43PM +0200, Nirgal Vourgère wrote: > On Tuesday, 18 August 2020 11:18:50 CEST Balazs Scheidler wrote: > >> Does any one know the proper equivalent to > >> iptables -t mangle -A PREROUTING -m socket --transparent -j MARK --set-mark 1 > >> using nft? > > > > The original iptables "socket" match had an extra check so that it wouldn't > > match listener sockets, at least by default (that is if --nowildcard is not > > specified). > > > > I don't see however how "outbound masqueraded connection" could be > > impacted. The "socket transparent 1" expression should require that the > > socket being matched has IP_TRANSPARENT setsockopt set. Are those > > connections also initiated by haproxy? > > > > In any case, I think the check to ignore wildcard bound listener sockets is > > definitely missing, however I am not sure how to properly add it to > > nftables. If I added it to the socket match implementation that might break > > a few currently well behaving use-cases. @pablo@netfilter.org > > <pablo@netfilter.org> can you please advise? This is the check that is in > > iptables -m socket: > > > > wildcard = (!(info->flags & XT_SOCKET_NOWILDCARD) && > > sk_fullsock(sk) && > > inet_sk(sk)->inet_rcv_saddr == 0); > > > > And then if --transparent is used, these sockets are not accepted / the > > rule does not match. > > That's it I guess: > > I tried adding --nowildcard to my working iptables rules and I got the same error, https connections from the lan side are not masqueraded toward the wan, but routed locally to the socket listening to *:443. > (thanks tcptraceroute for the info) > > So basically > nft > socket transparent 1 meta mark set 1 > may be the equivalent of > iptables > -m socket --transparent --nowildcard -j MARK --set-mark 1 > while I'm looking for *not* having "--nowildcard". > > Any idea about how work around this? I was thinking of using the > "fib" rules to match the wan side packets since they have a > destination ip address that match one of the local address, while > the wan bound packets don't. I'll post this patch to netfilter-devel to add the missing logic. [-- Attachment #2: x.patch --] [-- Type: text/x-diff, Size: 1737 bytes --] diff --git a/include/uapi/linux/netfilter/nf_tables.h b/include/uapi/linux/netfilter/nf_tables.h index 42f351c1f5c5..fed3514395a5 100644 --- a/include/uapi/linux/netfilter/nf_tables.h +++ b/include/uapi/linux/netfilter/nf_tables.h @@ -1008,10 +1008,12 @@ enum nft_socket_attributes { * * @NFT_SOCKET_TRANSPARENT: Value of the IP(V6)_TRANSPARENT socket option * @NFT_SOCKET_MARK: Value of the socket mark + * @NFT_SOCKET_WILDCARD: Socket listener is bound to any address */ enum nft_socket_keys { NFT_SOCKET_TRANSPARENT, NFT_SOCKET_MARK, + NFT_SOCKET_WILDCARD, __NFT_SOCKET_MAX }; #define NFT_SOCKET_MAX (__NFT_SOCKET_MAX - 1) diff --git a/net/netfilter/nft_socket.c b/net/netfilter/nft_socket.c index 637ce3e8c575..7511640e513a 100644 --- a/net/netfilter/nft_socket.c +++ b/net/netfilter/nft_socket.c @@ -14,6 +14,23 @@ struct nft_socket { }; }; +static void nft_socket_wildcard(const struct nft_pktinfo *pkt, + struct nft_regs *regs, struct sock *sk, + u32 *dest) +{ + switch (nft_pf(pkt)) { + case NFPROTO_IPV4: + nft_reg_store8(dest, inet_sk(sk)->inet_rcv_saddr == 0); + break; + case NFPROTO_IPV6: + nft_reg_store8(dest, ipv6_addr_any(&sk->sk_v6_rcv_saddr)); + break; + default: + regs->verdict.code = NFT_BREAK; + return; + } +} + static void nft_socket_eval(const struct nft_expr *expr, struct nft_regs *regs, const struct nft_pktinfo *pkt) @@ -59,6 +76,13 @@ static void nft_socket_eval(const struct nft_expr *expr, return; } break; + case NFT_SOCKET_WILDCARD: + if (!sk_fullsock(sk)) { + regs->verdict.code = NFT_BREAK; + return; + } + nft_socket_wildcard(pkt, regs, sk, dest); + break; default: WARN_ON(1); regs->verdict.code = NFT_BREAK; -- 2.20.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
[parent not found: <CAKcfE+Yyo-zj9Oxh4Oth6yK7SoXVfa2mQrK9-11Q5NHc09uXzQ@mail.gmail.com>]
* Re: Fwd: Issue migrating "iptables -m socket --transparent" into nftables [not found] ` <CAKcfE+Yyo-zj9Oxh4Oth6yK7SoXVfa2mQrK9-11Q5NHc09uXzQ@mail.gmail.com> @ 2020-08-21 15:23 ` Pablo Neira Ayuso 2020-08-21 20:10 ` Nirgal Vourgère 0 siblings, 1 reply; 7+ messages in thread From: Pablo Neira Ayuso @ 2020-08-21 15:23 UTC (permalink / raw) To: Balazs Scheidler; +Cc: Nirgal Vourgère, netfilter [-- Attachment #1: Type: text/plain, Size: 768 bytes --] On Fri, Aug 21, 2020 at 05:15:21PM +0200, Balazs Scheidler wrote: > Hi, > > Here's the accompanying nftables patch, just in case Pablo didn't do it. Thanks Balazs, this looks good to me! > Pablo do you want me to submit these as a pull request? You can just send them via git format-patch to netfilter-devel@vger.kernel.org. > All I did for testing was that it did compile this ruleset and attempted to > submit it via netlink to the kernel, which it refused, as I didn't patch my > kernel. I'm attaching the kernel patch, compiled-tested only by now. > ``` > table inet haproxy { > chain prerouting { > type filter hook prerouting priority -150; policy accept; > socket transparent 1 socket wildcard 0 mark set 0x00000001 > } > } > ``` Thanks. [-- Attachment #2: 0001-netfilter-nft_socket-add-wildcard-support.patch --] [-- Type: text/x-diff, Size: 2498 bytes --] From 6c7ffee435cead6d6b97eef62455e77a35537fd8 Mon Sep 17 00:00:00 2001 From: Pablo Neira Ayuso <pablo@netfilter.org> Date: Wed, 19 Aug 2020 09:47:40 +0200 Subject: [PATCH] netfilter: nft_socket: add wildcard support Add NFT_SOCKET_WILDCARD to match to wildcard socket listener. Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> --- include/uapi/linux/netfilter/nf_tables.h | 2 ++ net/netfilter/nft_socket.c | 25 ++++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/include/uapi/linux/netfilter/nf_tables.h b/include/uapi/linux/netfilter/nf_tables.h index 42f351c1f5c5..fed3514395a5 100644 --- a/include/uapi/linux/netfilter/nf_tables.h +++ b/include/uapi/linux/netfilter/nf_tables.h @@ -1008,10 +1008,12 @@ enum nft_socket_attributes { * * @NFT_SOCKET_TRANSPARENT: Value of the IP(V6)_TRANSPARENT socket option * @NFT_SOCKET_MARK: Value of the socket mark + * @NFT_SOCKET_WILDCARD: Socket listener is bound to any address */ enum nft_socket_keys { NFT_SOCKET_TRANSPARENT, NFT_SOCKET_MARK, + NFT_SOCKET_WILDCARD, __NFT_SOCKET_MAX }; #define NFT_SOCKET_MAX (__NFT_SOCKET_MAX - 1) diff --git a/net/netfilter/nft_socket.c b/net/netfilter/nft_socket.c index 637ce3e8c575..684a7e493f45 100644 --- a/net/netfilter/nft_socket.c +++ b/net/netfilter/nft_socket.c @@ -14,6 +14,23 @@ struct nft_socket { }; }; +static void nft_socket_wildcard(const struct nft_pktinfo *pkt, + struct nft_regs *regs, struct sock *sk, + u32 *dest) +{ + switch (nft_pf(pkt)) { + case NFPROTO_IPV4: + nft_reg_store8(dest, inet_sk(sk)->inet_rcv_saddr == 0); + break; + case NFPROTO_IPV6: + nft_reg_store8(dest, ipv6_addr_any(&sk->sk_v6_rcv_saddr)); + break; + default: + regs->verdict.code = NFT_BREAK; + return; + } +} + static void nft_socket_eval(const struct nft_expr *expr, struct nft_regs *regs, const struct nft_pktinfo *pkt) @@ -59,6 +76,13 @@ static void nft_socket_eval(const struct nft_expr *expr, return; } break; + case NFT_SOCKET_WILDCARD: + if (!sk_fullsock(sk)) { + regs->verdict.code = NFT_BREAK; + return; + } + nft_socket_wildcard(pkt, regs, sk, dest); + break; default: WARN_ON(1); regs->verdict.code = NFT_BREAK; @@ -97,6 +121,7 @@ static int nft_socket_init(const struct nft_ctx *ctx, priv->key = ntohl(nla_get_u32(tb[NFTA_SOCKET_KEY])); switch(priv->key) { case NFT_SOCKET_TRANSPARENT: + case NFT_SOCKET_WILDCARD: len = sizeof(u8); break; case NFT_SOCKET_MARK: -- 2.20.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: Fwd: Issue migrating "iptables -m socket --transparent" into nftables 2020-08-21 15:23 ` Pablo Neira Ayuso @ 2020-08-21 20:10 ` Nirgal Vourgère 2020-08-22 1:24 ` Nirgal Vourgère 0 siblings, 1 reply; 7+ messages in thread From: Nirgal Vourgère @ 2020-08-21 20:10 UTC (permalink / raw) To: Balazs Scheidler, Pablo Neira Ayuso, netfilter I should be able to test the whole thing by tomorrow. You rock guys! :) On Friday, 21 August 2020 17:23:33 CEST Pablo Neira Ayuso wrote: > On Fri, Aug 21, 2020 at 05:15:21PM +0200, Balazs Scheidler wrote: > > Hi, > > > > Here's the accompanying nftables patch, just in case Pablo didn't do it. > > Thanks Balazs, this looks good to me! > > > Pablo do you want me to submit these as a pull request? > > You can just send them via git format-patch to > netfilter-devel@vger.kernel.org. > > > All I did for testing was that it did compile this ruleset and attempted to > > submit it via netlink to the kernel, which it refused, as I didn't patch my > > kernel. > > I'm attaching the kernel patch, compiled-tested only by now. > > > ``` > > table inet haproxy { > > chain prerouting { > > type filter hook prerouting priority -150; policy accept; > > socket transparent 1 socket wildcard 0 mark set 0x00000001 > > } > > } > > ``` > > Thanks. > ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Fwd: Issue migrating "iptables -m socket --transparent" into nftables 2020-08-21 20:10 ` Nirgal Vourgère @ 2020-08-22 1:24 ` Nirgal Vourgère [not found] ` <CAKcfE+ZHch0LH79Mi2NMM9z4UaoORb09oPur8xrPaK-7F3SRpg@mail.gmail.com> 0 siblings, 1 reply; 7+ messages in thread From: Nirgal Vourgère @ 2020-08-22 1:24 UTC (permalink / raw) To: Balazs Scheidler, Pablo Neira Ayuso, netfilter [-- Attachment #1: Type: text/plain, Size: 542 bytes --] I applied the patches to my kernel and to nftables. >>> table inet haproxy { >>> chain prerouting { >>> type filter hook prerouting priority -150; policy accept; >>> socket transparent 1 socket wildcard 0 mark set 0x00000001 This works like a charm for ipv4. :) But ipv6 outbound connections still are grabbed by the socket rather than be routed to the wan and masqueraded. This works with > ip46tables -m socket --transparent -j MARK --set-mark 1 Attached is a more complete extract from my haproxy.cfg, with both v4 and v6. [-- Attachment #2: haproxy.cfg --] [-- Type: text/plain, Size: 4198 bytes --] ############################################################################ # DO NOT EDIT THAT FILE # Notice: That file was generated using: # /root/bin/update-virtualhosts /etc/haproxy/virtualhosts.haproxy # See /etc/haproxy/virtualhosts.haproxy/config ############################################################################ global log /dev/log local0 log /dev/log local1 notice chroot /var/lib/haproxy stats socket /run/haproxy/admin.sock mode 660 level admin stats timeout 30s # user haproxy # transparent proxying requires root privileges group haproxy daemon # Default SSL material locations ca-base /etc/ssl/certs crt-base /etc/ssl/private # Default ciphers to use on SSL-enabled listening sockets. # For more information, see ciphers(1SSL). This list is from: # https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/ # An alternative list with additional directives can be obtained from # https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=haproxy ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS ssl-default-bind-options no-sslv3 defaults source 0.0.0.0 usesrc clientip log global #mode http #option httplog option dontlognull timeout connect 5000 timeout client 50000 timeout server 50000 errorfile 400 /etc/haproxy/errors/400.http errorfile 403 /etc/haproxy/errors/403.http errorfile 408 /etc/haproxy/errors/408.http errorfile 500 /etc/haproxy/errors/500.http errorfile 502 /etc/haproxy/errors/502.http errorfile 503 /etc/haproxy/errors/503.http errorfile 504 /etc/haproxy/errors/504.http frontend http4-in bind :80 transparent mode http option httplog default_backend http4-www2.in.nirgal.com use_backend http4-vcs.in.nirgal.com if { hdr(host) -i vcs.nirgal.com } use_backend http4-vcs.in.nirgal.com if { hdr(host) -i svn.nirgal.com } use_backend http4-vcs.in.nirgal.com if { hdr(host) -i git.nirgal.com } frontend https4-in bind :443 strict-sni transparent mode tcp tcp-request inspect-delay 5s tcp-request content accept if { req_ssl_hello_type 1 } default_backend https4-www2.in.nirgal.com use_backend https4-vcs.in.nirgal.com if { req_ssl_sni -i vcs.nirgal.com } use_backend https4-vcs.in.nirgal.com if { req_ssl_sni -i svn.nirgal.com } use_backend https4-vcs.in.nirgal.com if { req_ssl_sni -i git.nirgal.com } backend http4-www2.in.nirgal.com mode http server http4-www2.in.nirgal.com ipv4@192.168.1.99:80 backend http4-vcs.in.nirgal.com mode http server http4-vcs.in.nirgal.com ipv4@192.168.1.98:80 backend https4-www2.in.nirgal.com server https4-www2.in.nirgal.com ipv4@192.168.1.99:443 backend https4-vcs.in.nirgal.com server https4-vcs.in.nirgal.com ipv4@192.168.1.98:443 frontend http6-in bind :::80 v6only transparent mode http option httplog default_backend http6-www2.in.nirgal.com use_backend http6-vcs.in.nirgal.com if { hdr(host) -i vcs.nirgal.com } use_backend http6-vcs.in.nirgal.com if { hdr(host) -i svn.nirgal.com } use_backend http6-vcs.in.nirgal.com if { hdr(host) -i git.nirgal.com } frontend https6-in bind :::443 v6only strict-sni transparent mode tcp tcp-request inspect-delay 5s tcp-request content accept if { req_ssl_hello_type 1 } use_backend http6-vcs.in.nirgal.com if { hdr(host) -i vcs.nirgal.com } use_backend http6-vcs.in.nirgal.com if { hdr(host) -i svn.nirgal.com } use_backend http6-vcs.in.nirgal.com if { hdr(host) -i git.nirgal.com } backend http6-www2.in.nirgal.com mode http server http6-www2.in.nirgal.com ipv6@[fd77:7777:7777::99]:80 backend http6-vcs.in.nirgal.com mode http server http6-vcs.in.nirgal.com ipv6@[fd77:7777:7777::98]:80 backend https6-www2.in.nirgal.com server https6-www2.in.nirgal.com ipv6@[fd77:7777:7777::99]:443 backend https6-vcs.in.nirgal.com server https6-vcs.in.nirgal.com ipv6@[fd77:7777:7777::98]:443 ^ permalink raw reply [flat|nested] 7+ messages in thread
[parent not found: <CAKcfE+ZHch0LH79Mi2NMM9z4UaoORb09oPur8xrPaK-7F3SRpg@mail.gmail.com>]
* Re: Fwd: Issue migrating "iptables -m socket --transparent" into nftables [not found] ` <CAKcfE+ZHch0LH79Mi2NMM9z4UaoORb09oPur8xrPaK-7F3SRpg@mail.gmail.com> @ 2020-08-25 9:45 ` Balazs Scheidler 2020-08-26 18:00 ` Nirgal Vourgère 0 siblings, 1 reply; 7+ messages in thread From: Balazs Scheidler @ 2020-08-25 9:45 UTC (permalink / raw) To: Nirgal Vourgère; +Cc: Pablo Neira Ayuso, netfilter On Sat, Aug 22, 2020 at 08:45:22AM +0200, Balazs Scheidler wrote: > hmm.. judging the code alone, I can't see the difference between xt_socket > and nft_socket, they are checking the same things for ipv6. > > I am not sure when sk->sk_v6_rcv_saddr is properly set, if that's non-zero > we would yield "socket wildcard 0" and cause a match. > > I can see that __inet6_bind() sets this properly, so as long as haproxy > binds it to port 80/443 we should be fine. > > I still cannot get what you mean under "But ipv6 outbound connections still > are grabbed by the socket rather than be routed to the wan and > masqueraded." exactly. > > 1) haproxy binds to [::0]:80 and I assume it does that to receive external > traffic. Do you use tproxy rules to redirect traffic here? > 2) then haproxy would establish a connection from [clientip]:randomport -> > internal server:80. The return traffic should be matched by "socket > transparent 1 socket wildcard 0" and redirected as such. > > So which of the two connections above is what you mean? The question still stands, which of the two connection is getting the wrong treatment? @Pablo: do you want me to test/push the kernel piece to netfilter-devel? Also, I have a usability question in the email I sent there. Hopefully, by now I can send email to vger :) Cheers, -- Bazsi ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Fwd: Issue migrating "iptables -m socket --transparent" into nftables 2020-08-25 9:45 ` Balazs Scheidler @ 2020-08-26 18:00 ` Nirgal Vourgère 0 siblings, 0 replies; 7+ messages in thread From: Nirgal Vourgère @ 2020-08-26 18:00 UTC (permalink / raw) To: Balazs Scheidler; +Cc: Pablo Neira Ayuso, netfilter My apologies for the delay. I ran into an *unrelated* issue, that troubled ipv6 outbound (masqueraded) connections. I did some more tests with your patches for linux & nftables. All look good, both ipv4 & v6, for both inbound (redirected to the socket) and outbound (masqueraded) connections. Thank you again! :) On Tuesday, 25 August 2020 11:45:30 CEST Balazs Scheidler wrote: > On Sat, Aug 22, 2020 at 08:45:22AM +0200, Balazs Scheidler wrote: > > hmm.. judging the code alone, I can't see the difference between xt_socket > > and nft_socket, they are checking the same things for ipv6. > > > > I am not sure when sk->sk_v6_rcv_saddr is properly set, if that's non-zero > > we would yield "socket wildcard 0" and cause a match. > > > > I can see that __inet6_bind() sets this properly, so as long as haproxy > > binds it to port 80/443 we should be fine. > > > > I still cannot get what you mean under "But ipv6 outbound connections still > > are grabbed by the socket rather than be routed to the wan and > > masqueraded." exactly. > > > > 1) haproxy binds to [::0]:80 and I assume it does that to receive external > > traffic. Do you use tproxy rules to redirect traffic here? > > 2) then haproxy would establish a connection from [clientip]:randomport -> > > internal server:80. The return traffic should be matched by "socket > > transparent 1 socket wildcard 0" and redirected as such. > > > > So which of the two connections above is what you mean? > > The question still stands, which of the two connection is getting the wrong > treatment? > > @Pablo: do you want me to test/push the kernel piece to netfilter-devel? > Also, I have a usability question in the email I sent there. > > Hopefully, by now I can send email to vger :) > > Cheers, > ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2020-08-26 18:00 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <CAKcfE+ZhO2O6nanU=ABJB8ptpB8VvjCK1wmzQ8TMFx+U-0_8nw@mail.gmail.com>
[not found] ` <CAKcfE+anbh1OoHt7vgyYRt89J-fjsKK48Fzy8SCm3RP=HQQcOw@mail.gmail.com>
2020-08-18 11:08 ` Fwd: Issue migrating "iptables -m socket --transparent" into nftables Nirgal Vourgère
2020-08-19 7:58 ` Pablo Neira Ayuso
[not found] ` <CAKcfE+Yyo-zj9Oxh4Oth6yK7SoXVfa2mQrK9-11Q5NHc09uXzQ@mail.gmail.com>
2020-08-21 15:23 ` Pablo Neira Ayuso
2020-08-21 20:10 ` Nirgal Vourgère
2020-08-22 1:24 ` Nirgal Vourgère
[not found] ` <CAKcfE+ZHch0LH79Mi2NMM9z4UaoORb09oPur8xrPaK-7F3SRpg@mail.gmail.com>
2020-08-25 9:45 ` Balazs Scheidler
2020-08-26 18:00 ` Nirgal Vourgère
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox