Eu tenho uma caixa Linux configurada com 2 placas de rede para inspecionar o tráfego que passa pela porta 80. Uma placa é usada para acessar a Internet, a outra é conectada a um comutador de rede. O objetivo é poder inspecionar todo o tráfego HTTP e HTTPS em dispositivos conectados a esse comutador 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 Charles ( http://www.charlesproxy.com/ ) para gravação.
Está tudo bem para a porta 80, mas quando adiciono regras semelhantes para a porta 443 (SSL) apontando para a porta 1337, recebo um erro sobre mensagens inválidas por Charles.
Eu usei o proxy SSL no mesmo computador antes com Charles ( http://www.charlesproxy.com/documentation/proxying/ssl-proxying/ ), mas não obtive êxito ao fazê-lo de forma transparente por algum motivo. Alguns recursos que pesquisei no Google dizem que não é possível - estou disposto a aceitar isso como resposta, se alguém puder explicar o porquê.
Como observação, tenho acesso total à configuração descrita, incluindo todos os clientes conectados à sub-rede - para que eu possa aceitar certificados autoassinados por Charles. A solução não precisa ser específica de Charles, já que, em teoria, qualquer proxy transparente servirá.
Obrigado!
Edit: Depois de brincar um pouco, consegui fazê-lo funcionar para um host específico. Quando modifico minhas tabelas de ip para o seguinte (e abro 1338 em charles para 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
Consigo obter uma resposta, mas sem host de destino. No proxy reverso, se eu apenas especificar que tudo, desde 1338, vai para um host específico que eu gostaria de acessar, ele executa o aperto de mão corretamente e eu posso ativar o proxy SSL para inspecionar a comunicação.
A configuração é inferior ao ideal, porque não quero assumir que tudo, desde 1338, vá para esse host - alguma idéia de por que o host de destino está sendo removido?
obrigado novamente