Por defecto, mitmproxy usará su propia dirección IP local para sus conexiones del lado del servidor. Lo que quiero, en cambio, es que mitmproxy use la dirección IP del cliente para las conexiones del lado del servidor.
Se proporciona la siguiente configuración para hacer que esto funcione:
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 está escuchando en el enrutador ( 192.168.178.40
) en el puerto: 8080
Sin embargo, mi configuración consta de un enrutador Debian personalizado con 2 NIC.
- Una dirección de Internet
wlp2s0
(también utilizada para SSH en ella) con la dirección:192.168.178.40
- Una NIC establecida como puerta de enlace predeterminada
enp4s0
para el cliente de destino en:10.0.0.1
El cliente se conecta a la puerta de enlace predeterminada con la dirección 10.0.0.12
De forma predeterminada, utilizo las siguientes reglas de tabla de IP para redirigir el tráfico de mi cliente al puerto 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
Aunque esto funciona según lo previsto, me gustaría poder falsificar la dirección de origen del cliente para que las solicitudes HTTP (S) capturadas coincidan con los paquetes TCP y otro tráfico que también proviene del cliente.
Aquí hay una imagen para visualizar mi configuración porque soy bastante horrible para explicar: