Introducción a Squid: configuración paso a paso

 Squid es otro filtro a nivel de aplicación que puede complementar a iptables. Squid es un servidor proxy para web con caché, es muy popular y libre, además es multiplataforma. Aunque se puede usar para mejorar el rendimiento de las conexiones a Internet, también se puede usar con fines de seguridad. Desde que se inició el proyecto en los años 90, mucho a avanzado Squid y ahora te la presentamos para que sepas como usarla.

Para su instalación, puedes acceder a la web oficial del proyecto y seleccionar los paquetes binarios para tu sistema operativo o distribución. Si deseas instalarlo desde el paquete de código fuente compilando, también tienes esa opción. Los tarballs disponibles son tar.gz, tar.bz2 y tar.xz. Si no sabes como instalar, puedes acudir al artículo que editamos en este blog acerca de cómo instalar cualquier paquete desde Linux. ¡Ojo! si tienes un Debian o derivado y has visto que se instala con sudo “apt-get install squid”, puede que te de un error, porque tienes que sustituir “squid” por “squid3” para que surta efecto…

Ahora pasamos directamente a la acción explicando algunos ejemplos de cómo utilizar Squid para proteger nuestro equipo. Antes me gustaría explicar que Squid se basa en ACLs, es decir en Acces Control List o lista de control de acceso, es decir, unas listas en las que se detallan los permisos para controlar en este caso el flujo de red e implementar filtros similares a los de iptables pero a nivel de aplicaciones.

Normalmente, tras la instalación se incluye un fichero de configuración que se encuentra en /etc/squid3/squid.conf y es este el que debemos editar con un editor como nano o gedit. En él podemos generar nuestras reglas de filtrado, aunque existen las opciones cache_dir, cache_mem y http_port, nosotros usaremos esta última para nuestras reglas de seguridad. Otro detalle es que en este fichero se especifica el puerto por defecto que usa el servicio Squid, que por defecto es 3128 (ver la línea o directiva “http_port 3128” y quítale el # para activarla). Si quieres puedes cambiarlo a otro puerto como el 8080… Y otra cosa necesaria es configurar el hostname, busca el comentario “TAG: Visible_hostname” y verás una línea “visible_hostname” donde debes poner tu hostname.

Para saber tu hostname, puedes teclear en el terminal:

1
hostname

Y el nombre que te aparezca lo añades a la línea que no debe estar precedida por # para que no sea ignorada como un comentario. Es decir, quedaría así:

visible_hostname nombre_hostname_que_te_haya_aparecido

Si ves el el fichero de configuración, verás que está muy comentado, si quieres anular una regla creada, puedes iniciar la línea con # y la transformas en un comentario, con lo que Squid la ignora, para volverla a poner en servicio, borras el # y listo. De hecho, hay muchas reglas creadas y puestas como comentario que puedes usar quitándole #. Así no tendrás que borrar y volver a escribir reglas. Bien, para añadir una regla o filtro concreto, ésta debe tener una ACL y una directiva que indique lo que se debe hacer.

Por cierto, cuando quites un # para activar una regla, asegúrate de no dejar espacios al inicio de la línea. Por ejemplo:

Forma erronea:

http_port 3128

Forma correcta:

http_port 3128

¿Te sientes perdido? Pues no te preocupes, con un ejemplo lo verás todo mucho mejor. Imagina esto:

acl bloqueo url_regex as facebook
http_access deny bloqueo

Lo que quiere decir esta regla es que la acl con nombre “bloqueo” va a prohibir el acceso a la URL que contenga “facebook” (por tanto si intentamos entrar a Facebook nos saltrará un error en el navegador). Si en vez de “deny” usas “allow”, permitirías el acceso en vez de prohibirlo. También se puede usar el parámetro ! para excluir, por ejemplo, imagina que quieres permitir el acceso a lista1 pero no a lista2:

1
http_access allow lista1 !lista2

Otro ejemplo podría ser crear un fichero /etc/squid3/ipspermitidas y en él guardar una lista de IPs que queremos permitir el acceso. Por ejemplo, imagina que el contenido de ipspermitidas es:

192.168.30.1

190.169.3.250

192.168.1.26

Y luego creamos la acl para permitir el acceso a estas IPs:

1
acl nuevaregla src "/etc/squid3/ipspermitidas"

Un ejemplo bastante práctico, imagina que tu equipo lo usan niños menores de 18 años y quieres restrigir el acceso a ciertos sitios de contenido adulto. Lo primero es crear un fichero llamado /etc/squid3/lista con el contenido:

adult

porno

sex

poringa

Y ahora en  el fichero squid.conf ponemos la siguiente regla:

1
2
3
acl denegados url_regex "/etc/squid3/lista"
http_access allow !denegados

Como ves hemos usado allow que en principio es para permitir, pero si te fijas hemos agregado ! para negar, por tanto, sería equivalente a poner:

1
2
3
acl denegados url_regex "/etc/squid3/lista"
http_access deny denegados

También se pueden crear listas, no solo de nombres de dominio o IPs como hemos hecho, también puedes poner dominios y por ejemplo restrigir el acceso a dominios como .xxx, .gov, etc. Veamos un ejemplo basándonos en la regla anterior. Creamos un fichero /etc/squid3/dominios que tenga:

.edu

.es

.org

Y ahora nuestra regla, para denegar el acceso a la lista de sitios prohibidos que creamos, pero permtiendo el acceso a URLs con estos dominios:

1
2
3
4
acl denegados url_regex "/etc/squid3/lista"
acl permitidos dstdomain "/etc/squid3/dominios"
http_access allow !denegados dominios

AMPLIACIÓN:

Perdón, al ver los comentarios me he dado cuenta que me ha faltando lo principal. Me he limitado a poner ejemplos de cómo se usa y olvidé decir que para iniciar el servidor Squid:

1
sudo service squid3 start

Antes se levantaba con “/etc/init.d/squid start”, pero ahora debes usar ésta otra línea que te he puesto. Igual que el fichero de configuración ya no está en /etc/squid/squid.conf, sino en /etc/squid3/squid.conf. Vale, una vez creadas las políticas de filtrado, e iniciarlo, también debemos configurar el navegador, por ejemplo, si usas Mozilla Firefox o derivados, puedes dirigirte al menú de configuración (ya sabes, las tres barritas), y luego a Preferencias, Avanzado, y en la pestaña Red, pulsa en Configuración del apartado Conexión. Allí, seleccionamos Configuración manual del proxy y ponemos nuestra IP y el puerto que esté usando Squid, en este caso 3128. Selecciona también “Usar el mismo proxy para todo” y sal guardando los cambios.

Por favor, no olvides dejar tus comentarios, dudas o lo que quieras… Aunque es un tutorial muy por encima de Squid, espero que te sirva de ayuda.