Páginas

Buscar

¿Cómo 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 o por MAC.

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 para darle mayor seguridad a que usuarios no dupliquen las IP.

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, twitter, 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 :


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

A pesar de crear reglas de acceso y hacer lo imposible con Squid para denegar acceso por  dominios, URL, 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 en adelante, actualmente la version 3)
Bloquear solo algunas https a usuarios no autorizados y hacer dicho filtrado por MAC.