Por padrão, o mitmproxy usará seu próprio endereço IP local para suas conexões do lado do servidor. O que eu quero é usar o endereço IP do cliente para conexões do lado do servidor.
A seguinte configuração é fornecida para fazer este trabalho:
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
O Mitmproxy está escutando no roteador ( 192.168.178.40
) na porta: 8080
No entanto, minha configuração consiste em um roteador debian personalizado com 2 NICs.
wlp2s0
(também usada para SSH) com o endereço: 192.168.178.40
enp4s0
para o cliente de destino em: 10.0.0.1
O cliente se conecta ao gateway padrão com o endereço 10.0.0.12
Por padrão, eu uso as seguintes regras da tabela IP para redirecionar o tráfego do meu cliente para a 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
Embora isso funcione como pretendido, eu gostaria de poder falsificar o endereço de origem do cliente para que as solicitações HTTP (S) capturadas correspondam aos pacotes TCP e a outro tráfego também proveniente do cliente.
Aqui está uma foto para visualizar minha configuração porque eu sou muito horrível em explicar:
Tags networking proxy debian iptables routing