transparente SSL-Proxy-Mythen und Fakten

8

Ich habe jetzt viele Stunden nach einer Möglichkeit gesucht, einen transparenten Proxy für SSL (nicht Squid) einzurichten. Die allgemeine Antwort ist, dass ich nicht kann, aber ich weiß, dass es einige Möglichkeiten gibt. Mein Zweck ist nur der folgende:

  1. Blacklist / Whitelist-Domainnamen (keine IP-Nummern). Inhalte werden überhaupt nicht gefiltert oder geändert.
  2. Benutzer durch diese Listen zwingen. Wenn ich solche Einstellungen in den Webbrowsern ändere, können sie diese einfach rückgängig machen.

Auf der folgenden Seite wird angegeben, dass ich den Datenverkehr unverändert weitergeben kann, es wird jedoch nicht angegeben, wie: iptables https transparenter Proxy mit privoxy?

Die folgende Seite zeigt eine iptables-Regel für 443, die ich selbst nicht ausführen konnte: http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:proxy

Auf der folgenden Seite erfahren Sie, wie dies nur mit Squid funktioniert: http://www.rahulpahade.com/content/squid-transparent-proxy-over-ssl-https

BEARBEITEN: Eine Person sagt hier: Wie verwende ich IPTABLES, um einen HTTPS (443) -Passthrough um Squid zu erstellen? "Das Beste, was Sie tun können, ist, den direkten Zugriff auf Port 443 zu blockieren und Ihren Benutzern mitzuteilen, dass sie ihren Browser für die Verwendung des Proxys konfigurieren müssen, wenn sie HTTPS verwenden möchten." Aber ich weiß nur, wie man 443 vollständig blockiert, damit es dann nicht unter einem Proxy funktioniert.

Teresa e Junior
quelle

Antworten:

7

Wenn Sie nach Domain-Namen filtern möchten, haben Sie zwei Möglichkeiten: Sie können den Namen aus der vom Client ausgegebenen CONNECT-Methode übernehmen, wenn dieser weiß, dass er einen Proxy für HTTPS-Verbindungen verwenden und nach diesem filtern muss (Squids unterstützt dies) Übrigens). Oder wenn Sie es wirklich wirklich transparent machen müssen, müssen Sie sich die (verschlüsselten) Anforderungsheader ansehen.

Wenn Sie verschlüsselte Anforderungsheader anzeigen möchten, benötigen Sie einen Schlüssel. Wenn Sie einen Schlüssel haben möchten, benötigen Sie ein Zertifikat, das a) dem Client als "korrektes" Zertifikat vertraut und b) jeden möglichen Host zertifiziert (Platzhalter-alles).

Was Sie also tun müssten, ist

  1. Richten Sie ein Zertifikat für Ihren Proxy ein. Dies hängt von Ihrer Software ab. Sie können Stunnel verwenden, um die SSL-Verbindung auf der Seite des Proxys zu beenden, einen gefilterten HTTP-Proxy dahinter zu haben und SSL für den gesamten ausgehenden Datenverkehr mithilfe von DNAT-Zielen von iptables wiederherzustellen und erneut zu stunnel. Möglicherweise gibt es auch "Boxed" -Lösungen für MitM SSL-Proxy.
  2. Installieren Sie das oben genannte Zertifikat auf allen Ihren Clients, die den Proxy verwenden

Wenn Sie transparentes Proxy benötigen, liegt dies meistens daran, dass Sie die Clients für die Verwendung des Proxys nicht neu konfigurieren möchten oder können. Wenn dies auch bei Ihrer Anfrage der Fall ist, haben Sie wahrscheinlich nicht die Möglichkeit, Zertifikate auf Clients zu installieren und sie als "vertrauenswürdig" zu markieren. Obwohl es einen technischen Weg für transparentes SSL-Proxy gibt, vermute ich, dass nicht viel für Sie gewonnen wird.

the-wabbit
quelle
Dies war genug, um mir die Fakten über transparente Proxies sehr deutlich zu machen. Vielen Dank!
Teresa e Junior
Wie können Sie "... den Namen von der vom Client ausgegebenen CONNECT-Methode übernehmen, wenn dieser weiß, dass er einen Proxy für HTTPS-Verbindungen verwenden und nach diesem filtern muss"?
Big McLargeHuge
@ davidkennedy85 mit Squid ziemlich genau so, wie Sie nach anderen Zugriffsmethoden filtern würden - verwenden Sie einfach die ACLs. Beispiel: servercomputing.blogspot.de/2012/01/…
the-wabbit
Ihre Erklärung ist größtenteils verständlich; Ich habe viel gelernt. Vielen Dank. Ich glaube, ich bezweifle, dass der Hostname (Domainname) jedem bekannt ist, der den Datenverkehr überwacht. security.stackexchange.com/questions/2914/…
Albert Netymk
4

Ich weiß, dass dies eine alte Frage ist, aber wenn das OP nur bestimmte Domainnamen auf die Blacklist / Whitelist setzen möchte, muss es überhaupt keinen Proxy verwenden, sondern nur eine DNS-basierte Blacklist.

  • Richten Sie Ihre DNS-Server vor Ort so ein, dass 127.0.0.1 für jede Domain zurückgegeben wird, die Sie auf die Blacklist setzen möchten
  • Blockieren Sie an Ihrem Internet-Gateway alle IP-Adressen außer Ihren DNS-Servern für den Zugriff auf TCP / UDP-Ports 53, sodass nur Ihre DNS-Server DNS-Anforderungen von internetbasierten Servern stellen können.

Jede andere Domain ist erlaubt. Der gesamte SSL-Verkehr im Internet oder auf andere Weise wird unverändert durch das Gateway geleitet.

Bearbeiten: Da das OP bereit ist, Benutzer durch seine Listen zu zwingen, kann er andere Methoden für den Zugriff auf DNS blockieren. Auf diese Weise funktionieren die Websites einfach nicht, wenn der Benutzer versucht, eine dieser anderen blockierten DNS-Methoden zu verwenden. aka 'Mein Weg oder die Autobahn'

Für DNS-over-HTTPS, das @wheeler erwähnt hat, können Sie einfach reguläre DNS-Suchvorgänge für Websites wie https://dns.google.com und https://cloudflare-dns.com/dns-query und https: // blockieren doh.cleanbrowsing.org/doh/family-filter/ . Dies wird jedoch schnell unhaltbar, da immer mehr Dienste online gehen.

Möglicherweise benötigen Sie auch eine Möglichkeit, MIME-Typen wie application / dns-udpwireformat für andere DNS-Methoden zu blockieren, die entwickelt werden.

BeowulfNode42
quelle
Keine sehr effektive Lösung mehr, da DNS-over-HTTPS jetzt eine Sache ist.
Wheeler
2

Der Delegat kann als Man-In-The-Middle- Proxy für HTTPS arbeiten.

AlexD
quelle
Danke, das tut es zwar, aber ich konnte es nicht zum Laufen bringen! Es scheint, dass es andere iptables-Regeln benötigt als die für Port 80, oder es gibt eine Option, die ich für Delegate nicht herausfinden kann.
Teresa e Junior
1

Für den transparenten Modus kann das Inline IPS- System (Suricata, Snort) Ihnen helfen, SSL-Sites zu blockieren.

https://redmine.openinfosecfoundation.org/projects/suricata/wiki/Setting_up_IPSinline_for_Linux

Blockieren von SSL-Site-Regeln für einen bestimmten Benutzer:

drop ip any 443 -> 192.168.3.x any (content:".facebook.com"; msg:"Simplewall block facebook.com  ";sid:7;rev:1;)

drop ip any 443 -> 192.168.3.204 any (content:".youtube"; msg:"Simplewall block youtube.com" ;sid:4;rev:1;)

Regeln zum Herunterladen von Blockdateien basierend auf Erweiterungen:

drop ip any any -> 192.168.3.63 any (msg:"File exe block"; fileext:"exe"; filestore ;sid:1;rev:1;)

drop ip any ssl -> 192.168.3.63 any (msg:"File mp3 block"; fileext:"mp3"; filestore ;sid:11;rev:1;)

drop ip any ssl -> 192.168.3.63 any (msg:"File pdf block"; fileext:"pdf"; filestore ;sid:21;rev:1;)

Probieren Sie dies mit SimpleWall aus

Es ist sehr, sehr einfach, Blockregeln mit der Simplewall-Weboberfläche hinzuzufügen.

Sie können auch Regeln hinzufügen, Simplewall => Content Filterdie dieselben Regeln für IPS verwenden, zusammen mit dem http-Inhaltsfilter.

Chetan-Simplewall
quelle