Per impostazione predefinita, mitmproxy utilizzerà il proprio indirizzo IP locale per le sue connessioni lato server. Quello che voglio invece è mitmproxy per usare l'indirizzo IP del client per le connessioni lato server.
Viene fornita la seguente configurazione per fare in modo che funzioni:
CLIENT_NET=192.168.1.0/24
TABLE_ID=100
MARK=1
echo "$TABLE_ID mitmproxy" >> /etc/iproute2/rt_tables
iptables -t mangle -A PREROUTING -d $CLIENT_NET -j MARK --set-mark $MARK
iptables -t nat \
-A PREROUTING -p tcp -s $CLIENT_NET \
--match multiport --dports 80,443 -j \
REDIRECT --to-port 8080
ip rule add fwmark $MARK lookup $TABLE_ID
ip route add local $CLIENT_NET dev lo table $TABLE_ID
Mitmproxy sta ascoltando sul router ( 192.168.178.40
) sulla porta: 8080
Tuttavia la mia configurazione consiste in un router debian personalizzato con 2 schede NIC.
- Una Internet con l'aggiunta di
wlp2s0
(utilizzata anche per SSH al suo interno) con indirizzo:192.168.178.40
- Una NIC impostata come gateway predefinito
enp4s0
per il client di destinazione in:10.0.0.1
Il client si connette al gateway predefinito con indirizzo 10.0.0.12
Per impostazione predefinita, utilizzo le seguenti regole della tabella IP per reindirizzare il traffico del mio client alla porta 8080:
sudo iptables -t nat -A PREROUTING -i enp4s0 -p tcp --dport 80 -j REDIRECT --to-port 8080
sudo iptables -t nat -A PREROUTING -i enp4s0 -p tcp --dport 443 -j REDIRECT --to-port 8008
Anche se funziona come previsto, mi piacerebbe essere in grado di falsificare l'indirizzo sorgente del client in modo che le richieste HTTP (S) catturate corrispondano ai pacchetti TCP e al traffico proveniente anche dal client.
Ecco un'immagine per visualizzare il mio setup perché sono piuttosto orribile nello spiegare: