Transparent Socket Forwarding with SPR and MITMProxy
Update
This post has become a guide which is being kept up to date, check it out!
Overview
In this post we'll show how PLUS members can add a mitmproxy
plugin to their SPR setup,
and then use the Programmable Firewall (PFW) plugin to redirect traffic through mitmproxy
with DNAT forwarding.
We do not need to configure our clients with proxy settings to point to mitmproxy
, or rewrite DNS responses,
since we are using the PFW feature to do the redirection.
This plugin is available on github.
Prepare the plugin
from the SPR directory, typically /home/spr/super
cd plugins
git clone https://github.com/spr-networks/spr-mitmproxy
echo [\"plugins/spr-mitmproxy/docker-compose.yml\"] > ../configs/base/custom_compose_paths.json
cd spr-mitmproxy
docker compose build
Configure SPR
- Navigate to the SPR UI. Add mitmproxy under the Plugins page
- be sure its been added to
configs/base/custom_compose_paths.json
as above - Enable it by toggling the slider
- Add
mitmweb0
to the custom interface rules. You can verify your container's network address in the Container tab -> UnderFirewall-> Custom Interface Access
Add a new rule, make sure mitmproxy haswan
at least to access the internet.
-
Create a forwarding rule to the container web interface :8081. Pick an arbitrary IP in the subnet -- although not the same one as the container as that confuses dnat.
-
Create a site forward rule with PFW for traffic to intercept
Using mitmproxy
Then make a curl request from any of the LAN devices, and it should populate on the mitmweb host. This was the :8081 host that was earlier defined
Leveraging Transparent Sockets
Behind the scenes, mitmproxy
is using transparent sockets with DNAT. Inside the container network,
we establish dnat rules to mitmproxy
from incoming ports 80
, 443
.
#!/bin/bash
nft -f - << EOF
table inet nat {
chain prerouting {
type nat hook prerouting priority filter; policy accept;
tcp dport { 80, 443 } dnat ip to 127.0.0.1:9999
}
}
EOF
mitmweb -p 9999 -m transparent --web-host 0.0.0.0
We'd love to hear from you
We're always thrilled to get feedback on plugins people would like to see, and we're
excited to hear about what people will be able to do with mitmproxy
running
alongside SPR. Drop a line at outreach[at]supernetworks.org or join us on discord