Ich habe eine Linux-Box mit 2 Netzwerkkarten eingerichtet, um den Datenverkehr über Port 80 zu überprüfen. Eine Karte wird verwendet, um ins Internet zu gelangen, die andere ist an einen Netzwerk-Switch angeschlossen. Der Punkt ist, in der Lage zu sein, den gesamten HTTP- und HTTPS-Verkehr auf Geräten, die an diesen Switch angeschlossen sind, für Debugging-Zwecke zu untersuchen.
Ich habe die folgenden Regeln für iptables geschrieben:
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
Am 192.168.2.1:1337 habe ich einen transparenten http-Proxy mit Charles ( http://www.charlesproxy.com/ ) für die Aufnahme.
Für Port 80 ist alles in Ordnung, aber wenn ich ähnliche Regeln für Port 443 (SSL) hinzufüge, die auf Port 1337 verweisen, erhalte ich über Charles eine Fehlermeldung über ungültige Nachrichten.
Ich habe SSL-Proxy auf demselben Computer bereits mit Charles verwendet ( http://www.charlesproxy.com/documentation/proxying/ssl-proxying/ ), konnte dies jedoch aus irgendeinem Grund nicht transparent durchführen. Einige Ressourcen, die ich gegoogelt habe, sagen, dass dies nicht möglich ist - ich bin bereit, dies als Antwort zu akzeptieren, wenn jemand erklären kann, warum.
Als Hinweis habe ich vollen Zugriff auf das beschriebene Setup, einschließlich aller Clients, die an das Subnetz angeschlossen sind. Ich kann also selbstsignierte Zertifikate von Charles akzeptieren. Die Lösung muss nicht Charles-spezifisch sein, da theoretisch jeder transparente Proxy ausreicht.
Vielen Dank!
Edit: Nachdem ich ein wenig damit gespielt hatte, konnte ich es für einen bestimmten Host zum Laufen bringen. Wenn ich meine iptables wie folgt ändere (und 1338 in Charles für Reverse Proxy öffne):
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
Ich kann eine Antwort erhalten, jedoch ohne Ziel-Host. Wenn ich im Reverse-Proxy nur festlege, dass alles von 1338 an einen bestimmten Host geht, den ich treffen wollte, wird der Handshake ordnungsgemäß ausgeführt, und ich kann die SSL-Proxy-Funktion aktivieren, um die Kommunikation zu überprüfen.
Das Setup ist alles andere als ideal, da ich nicht davon ausgehen möchte, dass alle Daten von 1338 auf diesen Host übertragen werden - eine Idee, warum der Zielhost entfernt wird?
Danke noch einmal