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.