Cómo instalar Squid en Debian 10 Buster

En esta entrada vamos a ver cómo instalar y configurar Squid en Debian 10 Buster paso a paso, de modo que puedas ofrecer acceso a Internet (filtrado o no) a otras máquinas de tu red local que no tengan acceso directo.

Antes de instalar Squid en Debian 10 Buster

Si quieres seguir los pasos de esta guía de instalación de Squid en Debian 10 Buster sólo necesitas cumplir los siguientes requisitos mínimos:

  • Un sistema Debian 10 Buster actualizado.
  • Un usuario con privilegios de sudo.
  • Opcionalmente, otras máquinas en red.
  • Acceso a Internet.

Cómo instalar Squid en Debian 10 Buster

Para instalar Squid en Debian 10 Buster usaremos los respositorios de la distribución, así que empezaremos actualizando la información de los mismos:

~$ sudo apt update

Concretamente el paquete que descargaremos e instalaremos es squid:

~$ sudo apt install -y squid

Una vez descargados e instalados este paquete y sus dependencias, se crea un nuevo servicio en Debian 10, el servicio squid o squid.service, que queda en ejecución y habilitado para su inicio automático con cada arranque del sistema.

Puedes comprobar el estado del servicio en cualquier momento con el comando systemctl status squid:

como instalar squid en debian 10 buster

Además, también podremos comprobar que queda a la escucha el puerto 3128:

~$ ss -ntl
State     Recv-Q    Send-Q       Local Address:Port        Peer Address:Port
...
LISTEN    0         128                      *:3128                   *:*
...

Configurar el firewall de Debian 10 para Squid

Si tienes activado el firewall UFW en Debian 10 será necesario añadir una regla para permitir las conexiones a Squid. Bastará con indicar el nombre del servicio:

~$ sudo ufw allow squid

Cómo probar el servicio Squid de Debian 10

Una vez que tenemos instalado y funcionando el servicio Squid en la máquina Debian 10 es el momento de probarlo desde otras máquinas. Dependiendo del sistema operativo y la aplicación concreta, habrá que aplicar una configuración a nivel de sistema o a nivel de aplicación.

Por ejemplo, el navegador Firefox (en este ejemplo, en una máquina Windows de la red local que no tiene acceso a Internet) puede usar la configuración de proxy del sistema o establecer su propia configuración independiente:

instalar squid en debian 10 buster

En este ejemplo, se especifica por un lado la dirección y por otro el puerto. En otros casos se suministrará la URL completa, por ejemplo, http://debian10.local.lan:3128 siguiendo el ejemplo de este tutorial.

Una vez configurada la aplicación, podemos intentar acceder a Internet para comprobar el funcionamiento del proxy:

proxy squid en debian 10 buster

Podría parecer que algo no está funcionando, pero muy al contrario, Squid está haciendo correctamente su trabajo según su configuración inicial, que es denegar las conexiones.

Cómo configurar Squid en Debian 10 Buster

Para configurar Squid en Debian 10 tendremos que trabajar sobre su archivo principal de configuración, squid.conf, ubicado en la ruta /etc/squid/.

~$ sudo nano /etc/squid/squid.conf

Para permitir el acceso a las máquinas de nuestra red localizaremos esta sección:

...
acl localnet src 0.0.0.1-0.255.255.255  # RFC 1122 "this" network (LAN)
acl localnet src 10.0.0.0/8             # RFC 1918 local private network (LAN)
acl localnet src 100.64.0.0/10          # RFC 6598 shared address space (CGN)
acl localnet src 169.254.0.0/16         # RFC 3927 link-local (directly plugged) machines
acl localnet src 172.16.0.0/12          # RFC 1918 local private network (LAN)
acl localnet src 192.168.0.0/16         # RFC 1918 local private network (LAN)
acl localnet src fc00::/7               # RFC 4193 local private network range
acl localnet src fe80::/10              # RFC 4291 link-local (directly plugged) machines
...

Definiremos justo a continuación una acl o lista de control de acceso para nuestra red local. En este ejemplo trabajamos con la red 192.168.1.0/24, así que añadiremos una directiva como la siguiente:

...
acl mi_red_local src 192.168.1.0/24
...

Hemos etiquetado la acl de nuestra red con el nombre mi_red_local, aunque tú puedes usar el que necesites.

No basta con declarar la lista de control, ahora hay que permitirle el acceso mediante una directiva http_access. Buscamos la siguiente sección:

...
#http_access allow localnet
http_access allow localhost
...

Podemos comprobar que se permite el acceso a la propia máquina Debian 10 en la que corre el proxy Squid, y que la directiva que podría permitir el acceso a la lista de control localnet está desactivada. Es aquí donde añadiremos una nueva directiva http_access que permita el acceso a la lista de control que acabamos de definir:

...
#http_access allow localnet
http_access allow localhost
http_access allow mi_red_local
...

Una vez guardados los cambios, habrá que recargar la configuración del servicio para aplicarlos:

~$ sudo systemctl reload squid

Volviendo a la máquina sobre la que realizábamos las pruebas, si recargamos la página del navegador ahora veremos que sí tenemos acceso a Internet:

como configurar squid en debian 10 buster

Justo lo que queríamos.

Cómo bloquear ciertos sitios web

Una vez que los clientes de la red pueden acceder a través del proxy, es posible que queramos impedir el acceso a algunos sitios. Para ello crearemos un archivo que contenga los dominios que queremos bloquear:

~$ sudo nano /etc/squid/sitios_bloqueados.lst

Añadimos una línea por cada dominio «prohibido», por ejemplo:

.facebook.com
.instragram.com
.twitter.com

Guardamos este archivo y editamos de nuevo squid.conf. En la sección de listas de control de acceso, definimos una nueva del tipo dstdomain:

...
acl mi_red_local src 192.168.112.0/24
acl sitios_bloqueados dstdomain "/etc/squid/sitios_bloqueados.lst"
...

Definida la lista, usaremos una directiva http_access para denegarla:

...
#http_access allow localnet
http_access allow localhost
http_access deny sitios_bloqueados
http_access allow mi_red_local
...

Observa que hemos situado esta directiva antes de la que añadimos en el paso anterior. Es importante hacerlo así, ya que Squid aplicará la configuración en orden inverso, es decir, en este ejemplo, primero permite el acceso a toda la red local y luego bloquea los sitios restringidos. Si hubiéramos añadido la nueva directiva después, Squid interpretaría primero bloquear los sitios restringidos y después permitir acceso total a la red local, con lo que no habríamos conseguido nada.

Guardados los cambios y recargada la configuración del servicio, volvemos a probar el navegador con uno de los sitios restringidos:

configurar squid en debian 10 buster

El proxy bloquea la conexión, pero si pruebas con cualquier otro sitio no restringido se mostrará la página sin problemas. Ahora sólo tienes que ir ampliando la lista de sitios restringidos de acuerdo con las políticas de acceso que quieras establecer.

Cómo bloquear el acceso por palabras

Puede llegar a ser tedioso intentar bloquear todos los sitios a los que no queramos permitir el acceso, por lo que tenemos la posibilidad de bloquear también ciertas palabras que formen parte de la dirección de dichos sitios. Para ello creamos una lista de palabras (o expresiones regulares, mejor dicho):

~$ sudo nano /etc/squid/palabras_bloqueadas.lst

Añadimos las palabras o expresiones regulares que queramos bloquear:

casino
porn

Guardamos este archivo y abrimos de nuevo squid.conf para crear una nueva lista de control de acceso, en este caso del tipo url_regex:

...
acl mi_red_local src 192.168.112.0/24
acl sitios_bloqueados dstdomain "/etc/squid/sitios_bloqueados.lst"
acl palabras_bloqueadas url_regex "/etc/squid/palabras_bloqueadas.lst"
..

Ahora denegaremos la lista de palabras y expresiones regulares mediante una directiva http_access:

...
http_access allow localhost
http_access deny sitios_bloqueados
http_access deny palabras_bloqueadas
http_access allow mi_red_local
...

Guardamos los cambios y recargamos la configuración del servicio.

Si probamos con alguna dirección que contenga cualquier palabra o expresión regular prohibida, se rechazará la conexión:

squid en debian 10 buster

Es importante señalar que en el caso de conexiones HTTP, el bloqueo de expresiones regulares funcionará tanto en la parte de la dirección de la URL (el dominio) como en la parte de la ruta (todo lo que viene después del carácter /). Sin embargo, en caso de conexiones HTTPS el filtrado se limita al dominio, ya que una vez establecida la conexión segura entre el cliente de red local con el servidor web de destino, la parte de la ruta de la URL se envía cifrada, de modo que Squid no la puede rastrear para aplicarle ningún filtro.

Como hoy día la mayoría de sitios web funciona casi exclusivamente en modo seguro, no tiene sentido desactivar las conexiones HTTPS en Squid, así que no queda más remedio que utilizar el método combinado de bloqueo de dominios y expresiones regulares.

Cómo permitir el acceso a sitios permitidos exclusivamente

En el caso de una situación el la que sólo se quiera permitir el acceso a algunos sitios web y bloquear el resto, es muy sencillo. Basta con crear la lista de dominios permitidos:

~$ sudo nano /etc/squid/sitios_permitidos.lst

Añadimos los dominios permitidos:

.wikipedia.org
.w3schools.com

Guardamos los cambios y editamos squid.conf para crear una lista de control del tipo dstdomain:

...
acl mi_red_local src 192.168.112.0/24
acl sitios_permitidos dstdomain "/etc/squid/sitios_permitidos.lst"
...

En este ejemplo hemos eliminado todas las directivas de los ejemplos anteriores. El siguiente paso es añadir la directiva http_access que manejará la nueva lista de control:

...
http_access allow localhost
http_access deny !sitios_permitidos
http_access allow mi_red_local
...

La configuración consiste en permitir todo el tráfico a la red y a continuación bloquear todos los sitios que NO se encuentren en la lista sitios_permitidos (la función del símbolo ! es precisamente obtener lo contrario de lo que le sigue, en este ejemplo sería todos los dominios que no se encuentren en la lista).

Guardados los cambios y recargada la configuración de Squid, podemos probar a acceder desde el navegador a sitios permitidos y sitios restringidos:

bloquear sitios web con squid en debian 10 buster

Y obtendremos el resultado esperado.

Conclusión

Ahora que conoces los pasos para instalar y configurar Squid en Debian 10 Buster, podrás bloquear fácilmente accesos a Internet no deseados en redes locales de trabajo, educativas y también domésticas.

Si te ha surgido alguna duda, pregunta, sugerencia, etc. puedes dejar un comentario.

Y si ya puedes filtrar el tráfico en tu red gracias a nuestra guía y quieres agradecérmelo, puedes hacerlo dejando 1 $ de propina para una CocaCola desde PayPal:

¡Gracias!

 

5/5 - (1 voto)

3 comentarios en «Cómo instalar Squid en Debian 10 Buster»

  1. Muy buen articulo, llevo tiempo usando el Squid como proxy en mi PC de la casa para filtrar todo lo que no quiero que me salga en el navegador y ahorrar datos de mi paquete de conexión que es limitado y funciona muy bien en todo. Quería comentar también que en el caso de las listas que se crean para permitir/denegar el acceso a Internet yo las uso sin extensión alguna, es decir crear un texto sencillo. No se si esto tendrá algo que ver, alguien me lo recomendó hace tiempo. Saludos.

    Responder
    • ¡Hola, Octavio! Efectivamente, puedes crear los archivos de listas sin ningún tipo de extensión o con cualquier extensión que se te ocurra, porque funcionará igual. El hecho de hacerlo es para ayudar a identificar rápidamente archivos de un vistazo, o a través de comandos como ls, etc. Y es que la configuración de Squid en Debian 10 puede ir complicándose más y más según las necesidades de cada caso, por lo que un poco de organización extra no viene mal. Se podría incluso crear un subdirectorio para mantener estas listas agrupadas.

      Responder

Deja un comentario

Este sitio esta protegido por reCAPTCHA y laPolítica de privacidady losTérminos del servicio de Googlese aplican.

El periodo de verificación de reCAPTCHA ha caducado. Por favor, recarga la página.