octubre
2

Bloquear Https con Iptables y Squid


Muchas veces para los que usamos un servidor proxy con Squid, tenemos el gran problema de no poder bloquear las entradas por Https,y esto se debe a que Squid no bloquea tan fácilmente el contenido que entra por el puerto 443 (https)  . Esto genera gran problema ya que aveces solo queremos bloquear ciertas web con https como facebook, meebo, gmail, hotmail, etc  y dejar por ejemplo las de los bancos, o talvez solo autorizar a nuestra lista de usuarios permitidos a hacer uso de https. Una solución practica seria bloquear el puerto 443 por Iptables, pero al hacer eso, bloqueamos todo el puerto para todos, y la idea es solo bloquear y autorizar a ciertas paginas y usuarios.

Asi como existen reglas en Squid de solo permitir acceso a ciertas paginas a determinados usuarios; en Iptables tambien se puede hacer eso e incluso hacer el bloqueo por Ip’s o por Mac’s.

El Escenario : 

Tengo un servidor Proxy Squid con una seria de listas y reglas de acceso.  En general con squid bloqueo todo el contenido que pasa por el servidor. solo tienen privilegios totales  los de una lista llamada permitidos.acl ,esta lista de permitidos esta definida por direcciones Mac’s para darle mayor seguridad a que usuarios no dupliquen las Ips.

El resto de usuarios de la red. solo tienen acceso controlado a paginas web como las de los bancos, las del gobierno , institucionales y alguna otra de contenido autorizado.

El problema

El problema era que a pesar de estar bloqueadas los sitios como facebook, hi5,  gmail, hotmail. meebo ,etc a todos los usuarios que no tienen autorizaciòn, estos se saltaban el bloqueo con tan solo colocar https en el inicio de la url, es decir :

http://www.facebook.com   ========>  Bloquead por SQuid,

https://www.facebook.com  ========> Acceso total.

La Solución :

A pesar de crear reglas de acceso y hacer lo imposible con Squid para denegar acceso por  dominios, URL’s, o por Ip. siempre el https , pasaba sin ningun problema. La solución que se me venia era bloquear por Iptables el puerto 443 y  segmentar la red para que solo usen el 443 ciertos usuarios de la red, pero la idea era que toda mi red hagan uso de https para el uso de las web de bancos por ejm. Lo que quería era solo bloquear las paginas sociales y algunas https no autorizadas a ciertos usuarios de la red.

Es aquí donde viene una solución practica con el poder supremo de Iptables y complementandolo con Squid (2.6)

Bloquear solo algunas https a usuarios no autorizados y hacer dicho filtrado por Mac’s.

He aquí mi solución que hasta el momento esta siendo efectiva y lo comparto para el que ha pasado por algo similar:

iptables -N HTTPS_BLOQUEO

# Aqui bloqueo por ejm facebook y hotmail por el rango de Ip's que usan sus dns.
iptables -I FORWARD -m tcp -p tcp -m iprange --dst-range 66.220.144.0-66.220.159.255 --dport 443 -j HTTPS_BLOQUEO
iptables -I FORWARD -m tcp -p tcp -m iprange --dst-range 69.63.176.0-69.63.191.255 --dport 443 -j HTTPS_BLOQUEO
iptables -I FORWARD -m tcp -p tcp -m iprange --dst-range 69.171.0.0-69.171.242.255 --dport 443 -j HTTPS_BLOQUEO
iptables -I FORWARD -m tcp -p tcp -m iprange --dst-range 184.50.162.0-184.50.162.255 --dport 443 -j HTTPS_BLOQUEO
iptables -I FORWARD -m tcp -p tcp -m iprange --dst-range 204.15.20.0-204.15.23.255 --dport 443 -j HTTPS_BLOQUEO

iptables -I FORWARD -m tcp -p tcp -m iprange --dst-range 64.4.0.0-64.4.80.255 --dport 443 -j HTTPS_BLOQUEO
iptables -I FORWARD -m tcp -p tcp -m iprange --dst-range 65.54.20.0-65.54.80.255 --dport 443 -j HTTPS_BLOQUEO
iptables -I FORWARD -m tcp -p tcp -m iprange --dst-range 74.125.0.0-74.125.80.255 --dport 443 -j HTTPS_BLOQUEO
# Aqui por ejm haciendo uso de sus dominios (urls) bloqueando solo el 443
iptables -I FORWARD -p tcp -m string --string www.facebook.com --dport 443 --algo bm -j HTTPS_BLOQUEO
iptables -I FORWARD -p tcp -m string --string www.gmail.com --dport 443 --algo bm -j HTTPS_BLOQUEO
iptables -I FORWARD -p tcp -m string --string www.meebo.com --dport 443 --algo bm -j HTTPS_BLOQUEO
iptables -I FORWARD -p tcp -m string --string www.hotmail.com --dport 443 --algo bm -j HTTPS_BLOQUEO
iptables -I FORWARD -p tcp -m string --string login.live.com --dport 443 --algo bm -j HTTPS_BLOQUEO

# Haciendo uso de mi lista de SQuid de permitidos para no bloquear a ellos el acceso a cualquier https

MAC_PERMITIDAS=$(egrep -v -E "^#|^$" /etc/squid/listas/permitidos.acl)
for mac_permi in $MAC_PERMITIDAS
do
   iptables -I FORWARD -m tcp -p tcp -m mac --mac-source $mac_permi --dport 443 -j ACCEPT
done

# Bloqueo https definidas al resto de la red
iptables -A HTTPS_BLOQUEO -j DROP

Descargar Script

Por el momento estas reglas esta siendo efectivas, haciendo que las paginas definidas no carguen en los usuarios que antes se saltaban con solo anteponer https.

Espero que les sea de utilidad.

Saludos.

    Posts Relacionados

Tambien puedes dejar una, or respuesta desde tu sitio web
Visto 25.268 veces

22 Responses to “Bloquear Https con Iptables y Squid”

  1. Ibrahim says:

    octubre 3rd, 2011 at 16:16

    Tu como siempre amigo, encontrando soluciones.

  2. ED says:

    enero 17th, 2012 at 22:22

    Amigo y si quisiera solo bloquear las HTTPS … de facebook y hotmail x ejemplo solo tengo q ocupar el scrip de las HTTPS_BLOQUEO

    sin usar lo de las MAC.. o tiene algo de relacion todo el scrip ??? 

  3. Luigdima says:

    marzo 2nd, 2012 at 5:16

    Buenos días!

    Me parece genial la solución. Aun que tengo un pequeño problema.

    Cuando ejecuto las normas me aparece el siguiente mensaje de error:  

    iptables v1.4.10: Couldn’t load target `FACEBOOK’:/lib/xtables/libipt_FACEBOOK.so: cannot open shared object file: No such file or directory
    Lo he intentado buscar, pero no me aparece en ningún sitio .. :P alguna luz? 

  4. Cmt says:

    marzo 3rd, 2012 at 11:28

    Hola, si al parecer me falto corregir eso en el .txt de descarga, ese target que dice FACEBOOK en la linea 12 al final, debes de cambiarlo por HTTPS_BLOQUEO, nada mas. eso es todo.
     
    Saludos

  5. Fer says:

    mayo 9th, 2012 at 10:34

    Me parece interesante el scrip… Pero hay algo q no entiendo, si lo quieres es dar acceso al https de face o hotmail a ciertas IPs, en lugar de las Mac… Cómo quedaría el For del scrip?

  6. Yazbeth says:

    mayo 16th, 2012 at 1:47

    Y alguien sabe como bloquear los puertos para descargar musica y videos? Necesito bloquear a ciertos usuarios los puertos para msn, para descargar musica y videos de cualquier programa existente… Alguna ayuda?

  7. omar says:

    mayo 18th, 2012 at 14:55

    muy bueno, gracias por el gran aporte

  8. audyoel says:

    mayo 28th, 2012 at 9:19

    buen dia todos,

    un gran favor como se puede bloquear
    al gmail al google por domino y por ip, PERO dejar libre el google apps ya que los correos de la empresa estan alojados en google, es un dolor de cabeza si bloqueo el google se bloquea todo,
    por favor ayuda no se mucho de Squid.

    Saludos a todos. 

  9. leonardo says:

    julio 26th, 2012 at 10:17

    hola amigo, soy nuevo en squip lo que pasa es que me sirve los codigos que publicaste y nose donde lo tengo que poner o que hacer, ayudame datallando eso  gracias, saludos

  10. israel says:

    julio 26th, 2012 at 13:45

    hola  a estas  reglas   puedes  incluir alguna  para  bloquear  el  ultrasurf ?

  11. jose luis says:

    agosto 8th, 2012 at 10:23

    excelente, lo copiare en mi blog.

  12. Amado Urias says:

    agosto 28th, 2012 at 22:18

    Hola amigo, me ha servido, justo lo que necesitaba.

    Muchas gracias por compartir la información, la re-publicaré en mi Blog para que más personas lleguen a ella.
     

  13. aanalizz says:

    septiembre 17th, 2012 at 11:39

    Hola soy nueva en temas de ip tables y squid por ello quisiera saber
    donde va escrito lo ultimo de las mac permitidas en el squid:
    # Haciendo uso de mi lista de SQuid de permitidos para no bloquear a ellos el acceso a cualquier https
     
    MAC_PERMITIDAS=$(egrep -v -E "^#|^$" /etc/squid/listas/permitidos.acl)
    for mac_permi in $MAC_PERMITIDAS
    do
       iptables -I FORWARD -m tcp -p tcp -m mac --mac-source $mac_permi --dport 443 -j ACCEPT
    done
     
    # Bloqueo https definidas al resto de la red
    iptables -A HTTPS_BLOQUEO -j DROP

    nose si podrias darme un jemplo en ese aspecto si en vez de macs pueden ir IP
    Saludos  y gracias

  14. robinson says:

    septiembre 17th, 2012 at 18:38

    Compañero me sale este error con la variable MAC_PERMITIDAS
    iptables: Applying firewall rules: Bad argument `MAC_PERMITIDAS=$(egrep’
    Error occurred at line: 74
    Try `iptables-restore -h’ or ‘iptables-restore –help’ for more information.

  15. Willian says:

    septiembre 18th, 2012 at 15:08

    iptables -I FORWARD -s 192.168.1.123 -p tcp --dport 443 -m string --string 'facebook' --algo bm -j ACCEPT
    con esto di mi solucion para bloquear el https para facebook


    //

  16. will says:

    noviembre 8th, 2012 at 20:03

    excelente solucion , lo unico que quisera saber en cual de los codigos la sentencia de la MAC ADRESS

  17. Jarare says:

    noviembre 17th, 2012 at 12:47

    Es la solución mas efectiva que he encontrado en la red… Mil y mil felicitaciones.. que codigo tan claro y sencillo de entender…

  18. Media Open says:

    noviembre 24th, 2012 at 16:39

    esta es la solución definitiva. No dude en aplicarla

    http://www.mediaopen.net/2012/10/aceptar-y-denegar-https.html 

  19. Ultrabeto says:

    enero 25th, 2013 at 17:53

    Y si usan ultrasurft

  20. Oscar says:

    febrero 14th, 2013 at 10:37

    Yo tengo una consulta parecida. Lo que deseo es bloquear el acceso a Facebook, pero para todas las listas de Squid, he visto que lo hacen en un archivo de configuración pero no me acuerdo como (en modo consola). Ahi se puede colocar la dirección web que se desea bloquear y ningun usuario de la red puede acceder a esa pagina, asi tenga supervilegios, por favor ayudenme.

  21. alej says:

    marzo 1st, 2013 at 10:49

    usar squid para bloquear https no es practico. Si la red tiene 100 equipos, hay que configurar los navegadores de los 100 equipos al servidor proxy 3128. si hay blackberrys, tabletas, etc, la cosa se pone mas fea, y la pesadilla llega cuando hay algunos de esos computadores que tambien se conectan a otras redes con otras configuraciones, por tanto cuando pasen a otra red hay que quitarles la configuracion del proxy a los navegadores, y luego volverselas a poner cuando vuelvan a ingresar a nuestra red.
     
    Mejor es permitir ciertas https en el iptables como bancos correos, etc y denegar el resto. 

    http://www.maravento.com/2012/08/aceptar-o-denegar-https.html 

  22. joelinho says:

    abril 3rd, 2013 at 14:31

    Amigo porfavor soy nuevo, desearia saber donde pego o copio el script y como lo enlace a iptables para que funcione. Muchas Gracias…

Leave a Reply