mitos y hechos transparentes sobre proxy SSL

8

Llevo muchas horas buscando una forma de configurar un proxy transparente para SSL (no Squid). La respuesta general es que no puedo, pero sé que hay algunas formas , sin embargo. Mi propósito es solo el siguiente:

  1. Nombres de dominio de lista negra / lista blanca (no números de IP). El contenido no se filtrará ni modificará en absoluto.
  2. Forzar a los usuarios a través de estas listas. Si modifico dicha configuración en los navegadores web, simplemente pueden deshacerla.

La siguiente página dice que podría pasar el tráfico sin modificaciones, pero no dice cómo: ¿ iptables https proxy transparente con privoxy?

La siguiente página muestra una regla de iptables para 443 que yo mismo no pude poner a trabajar: http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:proxy

La siguiente página explica cómo hacer que esto funcione solo con Squid: http://www.rahulpahade.com/content/squid-transparent-proxy-over-ssl-https

EDITAR: Una persona dice aquí: ¿Cómo uso IPTABLES para crear un paso HTTPS (443) alrededor de Squid? "Lo mejor que puede hacer es bloquear el acceso directo al puerto 443 y decirles a sus usuarios que si quieren usar HTTPS, deben configurar su navegador para usar el proxy". Pero solo sé cómo bloquear 443 por completo, no para que funcione bajo un proxy entonces.

Teresa e Junior
fuente

Respuestas:

7

Si desea filtrar los nombres de dominio, tiene dos formas posibles: puede tomar el nombre del método CONNECT emitido por el cliente si sabe que tiene que usar un proxy para las conexiones HTTPS y filtrarlo (Squids admite que Por cierto). O, si usted realmente realmente necesita hacerlo de forma transparente, lo que tendría que mirar a los (cifradas) encabezados de solicitud.

Si desea ver encabezados de solicitud encriptados, debe tener una clave. Si desea tener una clave, necesita un certificado que a) el cliente confíe en que sea el certificado "correcto" yb) certifique cada host posible (comodín-todo).

Entonces, lo que tendrías que hacer es

  1. configura un certificado para tu proxy. Depende de su software cómo hacerlo: puede usar stunnel para terminar la conexión SSL en el lado del proxy, tener algo de proxy HTTP de filtrado detrás y restablecer SSL para todo el tráfico saliente usando objetivos DNAT de iptables y stunnel nuevamente. También puede haber soluciones "en caja" para el proxy SSL de MitM.
  2. instale el certificado antes mencionado en todos sus clientes que van a usar el proxy

Principalmente, si necesita un proxy transparente es porque no desea o no puede volver a configurar los clientes para usar el proxy. Si este es el caso también con su solicitud, probablemente no tenga la opción de instalar certificados en los clientes y marcarlos como "confiables". Entonces, aunque hay una forma técnica de proxy SSL transparente, sospecho que no se ganará mucho por usted.

el wabbit
fuente
Esto fue suficiente para dejarme muy claro los hechos acerca de los poderes transparentes. ¡Gracias!
Teresa e Junior
¿Cómo "... toma el nombre del método CONNECT emitido por el cliente si sabe que tiene que usar un proxy para las conexiones HTTPS y filtrarlo"?
Big McLargeHuge
@ davidkennedy85 con Squid más o menos de la misma manera que filtraría por otros métodos de acceso: solo use las ACL. Ejemplo: servercomputing.blogspot.de/2012/01/…
the-wabbit
Su explicación es mayormente comprensible; Aprendí mucho. Gracias. Creo que tengo dudas sobre si el nombre de host (nombre de dominio) es conocido por cualquiera que controle el tráfico. security.stackexchange.com/questions/2914/…
Albert Netymk
4

Sé que esta es una pregunta antigua, pero si el OP solo quiere poner en la lista negra / lista blanca ciertos nombres de dominio, no tienen que usar un proxy en absoluto, simplemente podrían usar una lista negra basada en DNS.

  • configure sus servidores DNS en el sitio para devolver 127.0.0.1 para cualquier dominio que desee incluir en la lista negra
  • en su puerta de enlace de Internet, bloquee todas las direcciones IP, excepto sus servidores DNS, para que no tengan acceso a los puertos TCP / UDP 53, por lo que solo sus servidores DNS pueden realizar solicitudes DNS desde servidores basados ​​en Internet.

Cualquier otro dominio será permitido. Todo el tráfico web SSL o de lo contrario pasará a través de la puerta de enlace sin cambios.

Editar: Al ver que el OP está preparado para forzar a los usuarios a través de sus listas, puede bloquear otros métodos de acceso a DNS. De esta manera, si el usuario intenta usar uno de esos otros métodos DNS que están bloqueados, los sitios web simplemente no funcionarán. alias 'Mi camino o la autopista'

Para DNS-over-HTTPS que @wheeler mencionó, puede bloquear búsquedas regulares de DNS en sitios como https://dns.google.com y https://cloudflare-dns.com/dns-query y https: // doh.cleanbrowsing.org/doh/family-filter/ . Aunque esto se volverá rápidamente insostenible a medida que más y más servicios entren en línea.

También puede necesitar una forma de bloquear tipos MIME como application / dns-udpwireformat para otros métodos de DNS que se están desarrollando.

BeowulfNode42
fuente
Ya no es una solución muy efectiva, ya que DNS-over-HTTPS es una cosa ahora.
Wheeler
2

Delegado puede funcionar como proxy Man-In-The-Middle para HTTPS.

AlexD
fuente
Gracias, de hecho, pero no pude hacerlo funcionar. Parece que necesita reglas de iptables diferentes a las del puerto 80, o hay alguna opción que no puedo entender para Delegate.
Teresa e Junior
1

Para el modo transparente, el sistema Inline IPS (Suricata, Snort) puede ayudarlo a bloquear sitios ssl.

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

Bloquear las reglas del sitio SSL para usuarios específicos:

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

Bloquear reglas de descarga de archivos basadas en extensiones:

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

Prueba esto con SimpleWall

Es muy simple agregar una regla de bloqueo con la interfaz web Simplewall.

También puede agregar reglas Simplewall => Content Filterusando las mismas reglas para IPS junto con el filtro de contenido http.

chetan-simplewall
fuente