Eu tenho um linux box configurado com 2 placas de rede para inspecionar o tráfego que passa pela porta 80. Um cartão é usado para ir à Internet, o outro é ligado a um switch de rede. O objetivo é poder inspecionar todo o tráfego HTTP e HTTPS em dispositivos conectados a esse switch para fins de depuração.
Eu escrevi as seguintes regras para o iptables:
nat
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.2.1:1337
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 1337
-A POSTROUTING -s 192.168.2.0/24 -o eth0 -j MASQUERADE
Em 192.168.2.1:1337, eu tenho um proxy http transparente usando o Charles ( link ) para gravação.
Tudo está bem para a porta 80, mas quando adiciono regras semelhantes para a porta 443 (SSL) apontando para a porta 1337, recebo um erro sobre uma mensagem inválida por meio do Charles.
Eu usei proxy SSL no mesmo computador antes com o Charles ( link ), mas não obtiveram sucesso em fazê-lo de forma transparente por algum motivo. Alguns recursos que eu pesquisei dizem que isso não é possível - estou disposto a aceitar isso como uma resposta se alguém puder explicar o motivo.
Como observação, tenho acesso total à configuração descrita, incluindo todos os clientes ligados à sub-rede - para que eu possa aceitar certificados auto-assinados por Charles. A solução não precisa ser específica de Charles, pois, em teoria, qualquer proxy transparente serve.
Obrigado!
Edit: Depois de brincar um pouco com ele, consegui que funcionasse para um host específico. Quando modifico o meu iptables para o seguinte (e abra 1338 no charles para o proxy reverso):
nat
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.2.1:1337
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 1337
-A PREROUTING -i eth1 -p tcp -m tcp --dport 443 -j DNAT --to-destination 192.168.2.1:1338
-A PREROUTING -i eth1 -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 1338
-A POSTROUTING -s 192.168.2.0/24 -o eth0 -j MASQUERADE
Eu posso obter uma resposta, mas sem host de destino. No proxy reverso, se eu apenas especificar que tudo a partir de 1338 vai para um host específico que eu queria atingir, ele executa o shake de mão corretamente e eu posso ativar o proxy SSL para inspecionar a comunicação.
A configuração é menos que ideal porque eu não quero presumir que tudo de 1338 vai para aquele host - alguma idéia de por que o host de destino está sendo retirado?
Obrigado novamente