mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-04-01 20:14:08 +00:00
netfilter: doc: Add nf_tables part in tproxy.txt
Recently, transparent proxy support has been added to nf_tables so that this document should be updated with the new information. - Nft commands are added as alternatives to iptables ones. - The link for a patched iptables is removed as it is already part of the mainline iptables implementation (and the link is dead). - tcprdr is added as an example implementation of a transparent proxy Cc: "David S. Miller" <davem@davemloft.net> Cc: Jonathan Corbet <corbet@lwn.net> Cc: Florian Westphal <fw@strlen.de> Cc: KOVACS Krisztian <hidden@sch.bme.hu> Cc: Pablo Neira Ayuso <pablo@netfilter.org> Cc: linux-doc@vger.kernel.org Signed-off-by: Máté Eckl <ecklm94@gmail.com> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:
parent
a148ce1537
commit
1bfc2bc7ad
1 changed files with 27 additions and 7 deletions
|
@ -5,19 +5,28 @@ This feature adds Linux 2.2-like transparent proxy support to current kernels.
|
||||||
To use it, enable the socket match and the TPROXY target in your kernel config.
|
To use it, enable the socket match and the TPROXY target in your kernel config.
|
||||||
You will need policy routing too, so be sure to enable that as well.
|
You will need policy routing too, so be sure to enable that as well.
|
||||||
|
|
||||||
|
From Linux 4.18 transparent proxy support is also available in nf_tables.
|
||||||
|
|
||||||
1. Making non-local sockets work
|
1. Making non-local sockets work
|
||||||
================================
|
================================
|
||||||
|
|
||||||
The idea is that you identify packets with destination address matching a local
|
The idea is that you identify packets with destination address matching a local
|
||||||
socket on your box, set the packet mark to a certain value, and then match on that
|
socket on your box, set the packet mark to a certain value:
|
||||||
value using policy routing to have those packets delivered locally:
|
|
||||||
|
|
||||||
# iptables -t mangle -N DIVERT
|
# iptables -t mangle -N DIVERT
|
||||||
# iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
|
# iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
|
||||||
# iptables -t mangle -A DIVERT -j MARK --set-mark 1
|
# iptables -t mangle -A DIVERT -j MARK --set-mark 1
|
||||||
# iptables -t mangle -A DIVERT -j ACCEPT
|
# iptables -t mangle -A DIVERT -j ACCEPT
|
||||||
|
|
||||||
|
Alternatively you can do this in nft with the following commands:
|
||||||
|
|
||||||
|
# nft add table filter
|
||||||
|
# nft add chain filter divert "{ type filter hook prerouting priority -150; }"
|
||||||
|
# nft add rule filter divert meta l4proto tcp socket transparent 1 meta mark set 1 accept
|
||||||
|
|
||||||
|
And then match on that value using policy routing to have those packets
|
||||||
|
delivered locally:
|
||||||
|
|
||||||
# ip rule add fwmark 1 lookup 100
|
# ip rule add fwmark 1 lookup 100
|
||||||
# ip route add local 0.0.0.0/0 dev lo table 100
|
# ip route add local 0.0.0.0/0 dev lo table 100
|
||||||
|
|
||||||
|
@ -57,17 +66,28 @@ add rules like this to the iptables ruleset above:
|
||||||
# iptables -t mangle -A PREROUTING -p tcp --dport 80 -j TPROXY \
|
# iptables -t mangle -A PREROUTING -p tcp --dport 80 -j TPROXY \
|
||||||
--tproxy-mark 0x1/0x1 --on-port 50080
|
--tproxy-mark 0x1/0x1 --on-port 50080
|
||||||
|
|
||||||
|
Or the following rule to nft:
|
||||||
|
|
||||||
|
# nft add rule filter divert tcp dport 80 tproxy to :50080 meta mark set 1 accept
|
||||||
|
|
||||||
Note that for this to work you'll have to modify the proxy to enable (SOL_IP,
|
Note that for this to work you'll have to modify the proxy to enable (SOL_IP,
|
||||||
IP_TRANSPARENT) for the listening socket.
|
IP_TRANSPARENT) for the listening socket.
|
||||||
|
|
||||||
|
As an example implementation, tcprdr is available here:
|
||||||
|
https://git.breakpoint.cc/cgit/fw/tcprdr.git/
|
||||||
|
This tool is written by Florian Westphal and it was used for testing during the
|
||||||
|
nf_tables implementation.
|
||||||
|
|
||||||
3. Iptables extensions
|
3. Iptables and nf_tables extensions
|
||||||
======================
|
====================================
|
||||||
|
|
||||||
To use tproxy you'll need to have the 'socket' and 'TPROXY' modules
|
To use tproxy you'll need to have the following modules compiled for iptables:
|
||||||
compiled for iptables. A patched version of iptables is available
|
- NETFILTER_XT_MATCH_SOCKET
|
||||||
here: http://git.balabit.hu/?p=bazsi/iptables-tproxy.git
|
- NETFILTER_XT_TARGET_TPROXY
|
||||||
|
|
||||||
|
Or the floowing modules for nf_tables:
|
||||||
|
- NFT_SOCKET
|
||||||
|
- NFT_TPROXY
|
||||||
|
|
||||||
4. Application support
|
4. Application support
|
||||||
======================
|
======================
|
||||||
|
|
Loading…
Add table
Reference in a new issue