Hallo,
ich versuche einen transparenten SQUID-Proxy aufzusetzen, der für die Clients im LAN auch HTTPS-Verbindungen transparent durchreicht.
Die Informationen, die ich dazu im Netz finde sind widersprüchlich, daher wollte ich mich hier im Forum erkundigen, ob das überhaupt so möglich ist.
Die Grundproblematik ist, dass HTTPS-Verbindungen nicht über die normalen HTTP-Mechanismen durchgereicht werden können, da der Proxy ja nicht in den verschlüsselten HTTPS-Datenstrom "reinsehen" kann. Um das zu umgehen gibt es zwei Möglichkeiten:
a) Man-in-the-Middle mit eigenem SSL-Zertifikat b) CONNECT-Verbindung ohne Caching und ohne den Datenstrom überhaupt zu ändern
Die Variante a) scheidet bei uns aus, da wir hierbei die Zertifikate der Ziel-Server nicht mehr prüfen könnten
Die Variante b) scheint nur möglich zu sein, wenn der Browser weiss, dass er gerade mit einem Proxy spricht. D.h. wenn ich im Browser den Squid als HTTPS-Proxy hinterlege, ist über die CONNECT-Methode problemlos ein Durchreichen des HTTPS-Traffics möglich.
Ich möchte aber eine Lösung bei der die Clients keinen Proxy bei sich hinterlegen müssen. Hierzu macht man klassischerweise einen TCP-Redirect via IPTABLES und leitet den HTTP(S)-Datenverkehr einfach auf den Port des Proxies um.
Jetzt zu meiner Frage: Ist es überhaupt möglich eine "nackte" HTTPS-Verbindung auf den Proxy-Port umzuleiten und Squid so zu betreiben, dass er den HTTPS-Request als Proxy-Request interpretiert, einen CONNECT zum Ziel-HTTPS-Server aufbaut und die empfangenen Daten 1:1 an den Client durchleitet?
Theoretisch müsste es möglich sein, denn ich habe einen "Wrapper" gefunden, der genau das macht:
https://phinfinity.com/2014/04/01/transparent-pass-through-proxy-with-iptables-part-2-for-https/
Dieser "tproxyhttps" tut eigentlich exakt, dass was ich oben beschreiben habe: Er nimmt einen umgeleiteten HTTPS-Request und "baut" daraus einen Proxy-Request, den Squid ohne weitere Config-Anpassung versteht und mit der CONNECT-Methode beantworten kann.
Das Problem: Dieser Wrapper läuft meist nicht länger als ein paar Minute und segfaultet dann reproduzierbar.
Eigentlich wäre mir eine generische Squid-Lösung ohne Third-Party-Tools auch lieber. Und eigentlich würde ich davon ausgehen, dass Squid auch einen Modus anbietet, bei dem dieser Wrapper gar nicht notwendig ist. Daher meine Frage an euch: Wie müsste ich Squid ggf. konfigurieren, damit direkt umgeleitete HTTPS-Requests über die Connect-Methode korrekt interpretiert und durchgeleitet/beantwortet werden?
Sämtliche Konfigurations-Beispiele (http_port intercept), die ich auf squid-cache.org gefunden habe, beziehen sich leider nur auf HTTP und sind daher nicht wirklich hilfreich.
Ich bin für jeden Hinweis dankbar!
Viele Grüße, Jörn