Tengo una caja de Linux configurada con 2 tarjetas de red para inspeccionar el tráfico que pasa por el puerto 80. Una tarjeta se usa para salir a Internet, la otra está conectada a un conmutador de red. El punto es poder inspeccionar todo el tráfico HTTP y HTTPS en los dispositivos conectados a ese conmutador para fines de depuración.
He escrito las siguientes reglas para 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
En 192.168.2.1:1337, obtuve un proxy HTTP transparente usando Charles ( http://www.charlesproxy.com/ ) para grabar.
Todo está bien para el puerto 80, pero cuando agrego reglas similares para el puerto 443 (SSL) que apunta al puerto 1337, recibo un error sobre un mensaje no válido a través de Charles.
He usado proxy SSL en la misma computadora antes con Charles ( http://www.charlesproxy.com/documentation/proxying/ssl-proxying/ ), pero por alguna razón no he podido hacerlo de manera transparente. Algunos recursos que busqué en Google dicen que no es posible; estoy dispuesto a aceptar eso como respuesta si alguien puede explicar por qué.
Como nota, tengo acceso completo a la configuración descrita, incluidos todos los clientes conectados a la subred, por lo que puedo aceptar certificados autofirmados por Charles. La solución no tiene que ser específica de Charles ya que, en teoría, cualquier proxy transparente funcionará.
¡Gracias!
Editar: después de jugar un poco, pude hacerlo funcionar para un host específico. Cuando modifico mis iptables a lo siguiente (y abro 1338 en charles para proxy inverso):
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
Puedo obtener una respuesta, pero sin host de destino. En el proxy inverso, si solo especifico que todo desde 1338 va a un host específico que quería golpear, realiza el apretón de manos correctamente y puedo activar el proxy SSL para inspeccionar la comunicación.
La configuración es menos que ideal porque no quiero asumir que todo, desde 1338, va a ese host, ¿alguna idea de por qué el host de destino está siendo eliminado?
Gracias de nuevo