iptables para bloquear sitios web https

9

Deseo bloquear algunos sitios web que también se ejecutan en https, como Facebook, Twitter y Gmail, en mi organización. Se supone que Squid no se debe usar aquí según las órdenes de la alta gerencia. Podemos usar el paquete Untangle Lite y iptables.

¿Hay alguna otra opción además de Squid para hacer esto? También iptablessería útil alguna regla para bloquear este tipo de tráfico.

encontré esto

iptables -t filter -I INPUT -m string --string facebook.com -j LOG --algo bm
iptables -t filter -I INPUT -m string --string facebook.com -j REJECT --algo bm

pero https todavía funciona en máquinas, excepto en la máquina local.

Dharmit
fuente
2
debe explicarle a su empresa que evitar https para una cuenta personal no es una buena idea, ya que podría conducir a robos de identidad dentro de la empresa, implementar un certificado en todas las máquinas y actuar como un hombre en el medio sería una forma mucho mejor de verificar quién conectándose a Facebook. Tampoco estoy seguro, pero creo que ya no es posible conectar Gmail sin https.
Kiwy
Se puede saber cómo ha llegado hasta todas esas direcciones IP pls
jagadeesh

Respuestas:

12

En lugar de hacer coincidir en función de la URL, intente hacerlo en función del contenido del certificado.

iptables -t nat -I INPUT --sport 443 -m string \
                 --string www.facebook.com --algo bm -j REJECT

También puede coincidir con la huella digital, pero si el destino cambia o actualiza su certificado, invalidará su regla.

pr0f3550r
fuente
¿Puede esto bloquear cualquier cosa que coincida con www.facebook.com incluso en el cuerpo html, pero eso es legítimo como esto en el cuadro de comentarios? Se puede bloquear en el nivel de URL, pero ¿qué pasa con la dirección IP?
Nikhil Mulley
@NikhilMulley: No, solo coincidirá con el certificado SSL servido por Facebook. Todo lo demás está encriptado y no se puede ver.
bahamat
2
Solo el primer paquete de una conexión ingresa a la nattabla (y no hay una cadena INPUT en la tabla nat), creo que te referías a filtereso. Además, existe una posibilidad (muy) remota de que coincida con los paquetes donde 443 es el puerto del cliente
Stéphane Chazelas
¿Alguien ha usado esta solución? Aparte de la que carece de -p tcpla regla, esto no parece ser algo útil ..
ivanleoncz
10

El firewall no puede controlar a qué URL HTTPS está intentando acceder el cliente, porque la URL está encriptada. El firewall solo puede controlar a qué sitios se está conectando el cliente, utilizando direcciones IP, pero esto no ayuda si las versiones HTTP y HTTPS del sitio están en la misma URL (e incluso si no lo están, tendría para mantener una gran lista de direcciones IP).

La única forma realista de bloquear HTTPS es bloquearlo por completo. Insista en que todas las conexiones deben ser HTTP válidas (es decir, el cliente comienza enviando una HTTPlínea, etc.). Esto no se puede hacer solo con IPtables, necesita un proxy real compatible con el protocolo, como Squid. (No sé de qué es capaz Untangle Lite).

Puede bloquear la mayoría del tráfico HTTPS bloqueando el tráfico saliente al puerto 443, ya que casi todos los servidores HTTPS están en ese puerto. O, siguiendo un enfoque de lista blanca, solo permita el tráfico saliente al puerto 80 (el puerto HTTP normal).

Un enfoque diferente sería proxy de todas las conexiones HTTP y HTTPS. Entonces puede hacer coincidir por URL. Esto requiere llevar a cabo un ataque man-in-the-middle contra los clientes. Puede hacerlo si implementa su propia autoridad de certificación en todas las máquinas cliente y la registra allí como una raíz de confianza. Esto puede considerarse poco ético.

No importa lo que haga, determinados usuarios configurarán un proxy fuera de su entorno y ejecutarán IP sobre HTTP o algo así.

Parece que está intentando solucionar un problema social con medios técnicos, que casi nunca funciona, o está haciendo todo lo posible para implementar un requisito tonto de la administración (en cuyo caso, optaría por bloquear el puerto 443, tal vez solo por ciertas IP, lo que le permitiría informar que ha hecho su trabajo, sin importar cuán inútil sea).

Gilles 'SO- deja de ser malvado'
fuente
1
El firewall profesional como Checkpoint permite el filtrado https sin implementar un certificado de cliente en la última versión, no sé cómo logran hacerlo, pero funciona.
Kiwy
4

Sé de una opción.

Si tiene servidores DNS internos para usar, coloque algunas referencias estáticas en los datos de su zona de TLD que resuelvan los dominios (que no desea establecer las conexiones externas) a solo 127.0.0.1. De esta manera, todos los hosts que usan el DNS central dentro de su red resolverán los dominios (facebook.com/twitter.com per se) en la dirección de bucle invertido, lo que no llevará a ninguna parte.

Esto funcionará si tiene un control autorizado total sobre la configuración de resolución de máquinas cliente de su red. Si las estaciones de trabajo / clientes tienen permisos para cambiar / editar / etc / hosts o /etc/resolv.conf, entonces pueden eludir esta opción.

Nikhil Mulley
fuente
+1 por eso. Esto se puede hacer insertando estas referencias en el /etc/hostsarchivo. Por ejemplo:127.0.0.1 www.facebook.com
2
O, para una solución más civilizada, configure los registros DNS A (o entradas hosts / hosts.txt) para referirse a un host de intranet con un servidor web que explica exactamente por qué el usuario no fue enviado a Facebook, etc. Tenga en cuenta que esto se rompe HTTPS porque el nombre de host previsto (por ejemplo, www.facebook.com) no coincidirá con el certificado CN.
Alexios
@Alexios: OpenDNS es una gran solución para esto.
Kevin M
@KevinM: gracias, es útil saberlo. Lo tendré en cuenta (aunque tenemos nuestra pequeña granja de DNS en el trabajo)
Alexios
2

Una opción es bloquear las rutas de agujeros negros a los bloques de red: (Los listados están para FB)

ip route add blackhole 69.171.224.0/19
ip route add blackhole 74.119.76.0/22 
ip route add blackhole 204.15.20.0/22
ip route add blackhole 66.220.144.0/20
ip route add blackhole 69.63.176.0/20
ip route add blackhole 173.252.64.0/18
yo
fuente
1
no, no es complicado mantener una lista de ip para facebook twitter o incluso google que ya no comunican sus propios rangos de rango de ip.
Kiwy
1

El filtro de contenido simple no puede bloquear el sitio SSL.

Use herramientas de protección contra intrusiones como snort / suricata.

Ejemplo de regla IPS : para bloquear URL de SSL para una dirección IP específica.

drop ip any 443 -> 192.168.3.30 any (content:".facebook.com"; msg:"Simplewall Ssl block for User30 : Urls => .facebook.com " sid:26648513;rev:1;)

drop ip any 443 -> 192.168.3.30 any (content:".fbcdn.net"; msg:"Simplewall Ssl block for User30 : Urls => .fbcdn.net " ;sid:11469443;rev:1;)

drop ip any 443 -> 192.168.3.30 any (content:".youtube.com"; msg:"Simplewall Ssl block for User30 : Urls => .youtube.com " ;sid:13989722;rev:1;)

Descargar Simplewall : en las reglas de política de simplewall compartidas por Squid + Suricata IPS.

Chetan Muneshwar
fuente
0

Debe poner esto en la cadena FORWARD, por ejemplo

iptables -I FORWARD  -m string --string "facebook.com" \
                     --algo bm --from 1 --to 600 -j REJECT

Afectará a otros sistemas en la red, excepto el firewall.

Senthamil
fuente