Bloquear facebook con iptables

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.

14 Comments

  1. 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

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

      Respon
      • 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!!

        Respon
  2. 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

    Respon
  3. Buenos dias si podia explicar como hacer una petición al AS de facebook.
    Un saludo.

    Respon
  4. 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

    Respon
  5. 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…

    Respon

Deixa un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *

Aquest lloc utilitza Akismet per reduir els comentaris brossa. Apreneu com es processen les dades dels comentaris.