Blackhold

Bloquear facebook con iptables

Posted on setembre 8th, 2013 by admin

Tenemos un proxy transparente con squidguard bloqueando algunas webs, pero sólo se bloquean las webs que no són https, ya que si le indicamos que las conexiones https se envien al proxy, nos encontramos que se modifica la cadena de verificación de las webs a las cuales accedemos por https y nos avisa de un “man in the middle”.

Para ello tenemos dos opciones, ssl-bump de squid3, con el que le pasamos un certificado intermedio o usamos reglas de iptables. La primera opción no se ha dejado, así que he pasado a la opción de bloquearlas con iptables.

Lo primero que tenemos que saber es que si pasan conexiones https a través de nuestro servidor proxy transparente, dichas conexiones van cifradas y no es posible distingir la url a la que se dirigen. Para ello tenemos que filtrar por IP, pero… si lo que queremos bloquear es un site con muchas ips y además de que pueden ir variando, la cosa se complica.

Por suerte tras buscar un poco he encontrado una solución realmente interesante. Con un poco de bash y una petición al AS de facebook, podemos sacar los rangos de IPs con los cuales trabaja esta empresa.

# BLOCK FACEBOOK
for i in $(/usr/bin/whois -h whois.radb.net '!gAS32934' | tr ' ' 'n' | sort -n -k1,1 -k2,2 -k3,3 -k4,4 |grep /)
do iptables -A FORWARD -d $i -j DROP
done

Luego si queremos ver como se ha aplicado la regla

# iptables -L -n 

Adicionalmente, aunque la dejo comentada, en muchas webs ofrecían esta otra línea para bloquear las webs, pero tal como he comentado al principio, al ser conexiones https no es posible saber la URL. Así que una de dos, me equivoco yo o se equivocan estas webs y foros :P

iptables -A INPUT -p tcp --dport 443 -m string --string 'facebook' --algo bm -j DROP

La muestro, porqué puede ser interesante para bloquear alguna otra web, aunque si tenemos el squidguardian es un poco absurdo, ya que podemos añadirlo ahí y que nos redireccione a la web informando que la web está bloqueada.

This entry was posted on diumenge, setembre 8th, 2013 at 17:42 and is filed under bash, proxy. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

14 Responses to “Bloquear facebook con iptables”

Luis García (@angelbladex)setembre 8th, 2013 at 22:50

Hola! Cuando voy probando el comando por partes, me doy cuenta que sale unas lineas que no son Ips , ejemplo

/usr/bin/whois -h whois.radb.net ‘!gAS32934’ | tr ‘ ‘ ‘n’ | sort -n -k1,1 -k2,2 -k3,3 -k4,4

A939
C
103.4.96.0/22
31.13.24.0/21
31.13.64.0/18
.
.
.
.

así que prefiero añadir un grep “/” para que sólo salgan las ips y sus máscaras de red . No se porque ordenar si requiero es ir bloqueando subredes

es decir quedaría así
/usr/bin/whois -h whois.radb.net ‘!gAS32934’ | tr ‘ ‘ ‘n’ | grep “”

Si pruebas así no saldrán esas cosas que comento, anteriormente

Blackholdsetembre 8th, 2013 at 23:34

cierto! en la última versión lo he puesto tal cual está ahora. Es curioso porqué las pruebas la hacía en una maquina y luego al aplicarlo a la máquina en producción si que se me quejaba…
gracias ;)

Jesus Villalba Carreñooctubre 12th, 2013 at 07:11

Hola, estoy probando tu script bajo fedora 19, pero el fichero /usr/bin/whois no existe, hay un paso anterior q no estoy siguiendo? ademas cree el fichero en esa ruta y me envia “acceso denegado” y estoy como root! gracias de antemano!!

Luis García (@angelbladex)setembre 8th, 2013 at 22:50

Hola! Cuando voy probando el comando por partes, me doy cuenta que sale unas lineas que no son Ips , ejemplo

/usr/bin/whois -h whois.radb.net ‘!gAS32934’ | tr ‘ ‘ ‘n’ | sort -n -k1,1 -k2,2 -k3,3 -k4,4

A939
C
103.4.96.0/22
31.13.24.0/21
31.13.64.0/18
.
.
.
.

así que prefiero añadir un grep “/” para que sólo salgan las ips y sus máscaras de red . No se porque ordenar si requiero es ir bloqueando subredes

es decir quedaría así
/usr/bin/whois -h whois.radb.net ‘!gAS32934’ | tr ‘ ‘ ‘n’ | grep “”

Si pruebas así no saldrán esas cosas que comento, anteriormente

Robertojuny 3rd, 2014 at 00:26

Amigo… lamento decirte que eres tú el que está mal con respecto a la regla -m string de firewall.
Lo que te hace el bloque de Facebook es:
iptables -I FORWARD -p tcp –dport 443 -m string –string ‘facebook’ –algo bm -j DROP

saludos

ajjuny 13th, 2014 at 23:11

Blackhold tu script funciona y es fluido, en cambio el string deja mucho que desear (basura).
Lo complicado es conseguir los originAS para todas las url que uno quisiera y en http://centralops.net/co/ salen algunos y otros no y no conozco otro sitio que brinde esta informaciòn (sale el de faceb AS32934, pero no el de google ni otros)

si sabes de algùn sitio donde conseguirlos…

Leave a Response

« »

guy fawkes