mythes et faits sur le proxy SSL transparent

8

Je recherche depuis de nombreuses heures maintenant un moyen de configurer un proxy transparent pour SSL (pas Squid). La réponse générale est que je ne peux pas, mais je sais qu'il y a cependant des moyens . Mon but est seulement le suivant:

  1. Liste noire / liste blanche des noms de domaine (pas des numéros IP). Le contenu ne sera ni filtré ni modifié.
  2. Forcer les utilisateurs à travers ces listes. Si je modifie ces paramètres dans les navigateurs Web, ils peuvent simplement les annuler.

La page suivante indique que je pourrais passer le trafic sans modification, mais elle ne dit pas comment: proxy transparent iptables https avec privoxy?

La page suivante montre une règle iptables pour 443 que je n'ai pas pu travailler moi-même: http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:proxy

La page suivante explique comment faire en sorte que cela ne fonctionne qu'avec Squid: http://www.rahulpahade.com/content/squid-transparent-proxy-over-ssl-https

EDIT: Une personne dit ici: Comment utiliser IPTABLES pour créer un passthrough HTTPS (443) autour de Squid? "La meilleure chose à faire pour vous est de bloquer l'accès direct au port 443 et de dire à vos utilisateurs que s'ils veulent utiliser HTTPS, ils doivent configurer leur navigateur pour utiliser le proxy." Mais je sais juste comment bloquer complètement le 443, ne pas le faire fonctionner sous un proxy alors.

Teresa e Junior
la source

Réponses:

7

Si vous souhaitez filtrer sur les noms de domaine, vous avez deux manières possibles: vous pouvez prendre le nom de la méthode CONNECT émise par le client s'il sait qu'il doit utiliser un proxy pour les connexions HTTPS et filtrer sur celui-ci (Squids prend en charge cela BTW). Ou, si vous vraiment vraiment besoin de le faire de manière transparente, vous devez regarder dans les en- têtes de requête (cryptés).

Si vous souhaitez voir les en-têtes de demande chiffrés, vous devez disposer d'une clé. Si vous voulez avoir une clé, vous avez besoin d'un certificat qui est a) approuvé par le client comme étant le "bon" certificat et b) certifie chaque hôte possible (caractère générique-tout).

Donc ce que vous devez faire c'est

  1. configurer un certificat pour votre proxy. Cela dépend de votre logiciel comment faire cela - vous pouvez utiliser stunnel pour mettre fin à la connexion SSL du côté du proxy, avoir un proxy HTTP de filtrage derrière lui et rétablir SSL pour tout le trafic sortant en utilisant des cibles DNAT iptables et stunnel à nouveau. Il peut également exister des solutions «en boîte» pour le proxy SSL MitM.
  2. installez le certificat susmentionné sur tous vos clients qui vont utiliser le proxy

Généralement, si vous avez besoin d'un proxy transparent, c'est parce que vous ne voulez pas ou ne pouvez pas reconfigurer les clients pour utiliser le proxy. Si c'est également le cas pour votre demande, vous n'auriez probablement pas la possibilité d'installer des certificats sur les clients et de les marquer comme "de confiance". Donc, même s'il existe un moyen technique pour le proxy SSL transparent, je pense que peu de choses seront gagnées pour vous.

le-wabbit
la source
Cela a suffi à me faire comprendre très clairement les faits concernant les procurations transparentes. Je vous remercie!
Teresa e Junior
Comment "... tirez-vous le nom de la méthode CONNECT émise par le client s'il sait qu'il doit utiliser un proxy pour les connexions HTTPS et filtrer sur celui-là"?
Big McLargeHuge
@ davidkennedy85 avec Squid à peu près de la même manière que vous filtreriez pour d'autres méthodes d'accès - utilisez simplement les ACL. Exemple: servercomputing.blogspot.de/2012/01/…
the-wabbit
Votre explication est généralement compréhensible; J'ai beaucoup appris. Merci. Je pense que je doute que le nom d'hôte (nom de domaine) soit connu de quiconque surveille le trafic. security.stackexchange.com/questions/2914/…
Albert Netymk
4

Je sais que c'est une vieille question, mais si l'OP ne veut que mettre sur liste noire / liste blanche certains noms de domaine, ils n'ont pas du tout besoin d'utiliser un proxy, ils peuvent simplement utiliser une liste noire basée sur DNS.

  • configurez vos serveurs DNS sur site pour renvoyer 127.0.0.1 pour tout domaine que vous souhaitez mettre sur liste noire
  • sur votre passerelle Internet bloquent toutes les adresses IP, à l'exception de vos serveurs DNS, d'accéder aux ports TCP / UDP 53, de sorte que seuls vos serveurs DNS peuvent effectuer des requêtes DNS à partir de serveurs Internet.

Tout autre domaine sera autorisé. Tout le trafic Web SSL ou autre passera par la passerelle sans changement.

Edit: Étant donné que l'OP est prêt à forcer les utilisateurs à parcourir ses listes, il peut bloquer d'autres méthodes d'accès au DNS. De cette façon, si l'utilisateur essaie d'utiliser l'une de ces autres méthodes DNS bloquées, les sites Web ne fonctionneront tout simplement pas. alias «Mon chemin ou l'autoroute»

Pour DNS sur HTTPS mentionné par @wheeler, vous pouvez simplement bloquer les recherches DNS régulières vers des sites tels que https://dns.google.com et https://cloudflare-dns.com/dns-query et https: // doh.cleanbrowsing.org/doh/family-filter/ . Bien que cela devienne rapidement intenable à mesure que de plus en plus de services sont mis en ligne.

Vous pouvez également avoir besoin d'un moyen de bloquer les types MIME tels que application / dns-udpwireformat pour d'autres méthodes de DNS en cours de développement.

BeowulfNode42
la source
Ce n'est plus une solution très efficace, car DNS-over-HTTPS est une chose maintenant.
wheeler
2

Le délégué peut fonctionner comme proxy Man-In-The-Middle pour HTTPS.

AlexD
la source
Merci, c'est vrai, mais je n'ai pas pu le faire fonctionner! Il semble qu'il ait besoin de règles iptables différentes de celles du port 80, ou il y a une option que je ne peux pas comprendre pour Delegate.
Teresa e Junior
1

Pour le mode transparent, le système Inline IPS (Suricata, Snort) peut vous aider à bloquer les sites SSL.

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

Bloquer les règles de site SSL pour un utilisateur spécifique:

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;)

Bloquer les règles de téléchargement de fichiers en fonction des extensions:

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;)

Essayez ceci avec SimpleWall

C'est très très simple d'ajouter une règle de blocage avec l'interface Web de Simplewall.

Vous pouvez également ajouter des règles sous Simplewall => Content Filterutiliser les mêmes règles pour IPS avec le filtre de contenu http.

chetan-simplewall
la source