Este artículo explica cómo montar un proxy, o Web cache, con Squid en Debian y derivados. La instalación es extremadamente sencilla e incluye una configuración mínima que implementa autenticación basic, para que nuestro proxy sólo pueda ser utilizado por usuarios identificados con nombre de usuario y contraseña.

Ya sea porque deseamos implementar un Web cache para optimizar el uso de un enlace a Internet (evitar descargar múltiples veces un mismo recurso como imágenes, texto, video, hojas de estilo, Javascript, etc.) o porque deseamos controlar el tráfico en nuestra organización, Squid es la principal y más recomendada alternativa para implementar un proxy en sistemas GNU/Linux.

Aunque también puede ser necesario implementar un proxy para disfrazar/ocultar nuestra dirección IP, o porque se requiere salir a Internet con una dirección IP de otro país (por ejemplo USA) para acceder a contenido restringido por geolocalización. Esto último es válido tanto por cuestiones de ocio como por cuestiones impositivas/legales/administrativas (tal es el caso de aquellos sitios que rastrean al dirección IP pública con la que se accede a los mismos como un mecanismo de validación adicional). Por supuesto en estos casos, el servidor que será utilizado para montar el proxy deberá contar con una dirección IP ubicada en el país destino. Para el caso de USA, la gran mayoría de los proveedores de VPS que utilizamos y conocemos (al menos en el cono sur) están localizados allí. Con lo cual no es inconveniente alguno. Si se tratase de países de la Unión Europea, habrá que conseguir un VPS en algún proveedor localizado allí.

Squid es un proxy para Web cache que soporta HTTP, HTTPS, FTP y otros protocolos. Reduce el ancho de banda consumido y mejora los tiempos de respuesta al almacenar de forma temporal y reutilizar copias de los recursos ya descargados. Es utilizado por cientos de proveedores de Internet en el mundo para otorgar a sus usuarios el mejor acceso posible a Internet.

Instalar Squid desde paquete en Debian y derivados es tan simple como ejecutar:

root@proxy:~# apt-get install squid3

Inmediatamente se comprueba que el proxy está levantado y aceptando peticiones:

root@proxy:~# netstat -plant | grep squid
tcp6       0      0 :::3128                 :::*                    LISTEN      18814/(squid-1)

Ahora resta configurar Squid. El archivo de configuración que incluye el paquete cuenta con casi 8000 líneas de comentarios (prácticamente incluye toda la documentación de Squid dentro del propio archivo de configuración:

root@proxy:~# cd /etc/squid/
root@proxy:/etc/squid# wc -l squid.conf
7959 squid.conf
root@proxy:/etc/squid# grep -v "^#" squid.conf | grep -v "^$" | wc -l
24

Aunque en realidad se observa que, de configuración propiamente dicha, son sólo 24 líneas.

Para facilitar el manejo del archivo de configuración, mejor crear una copia limpia:

root@proxy:/etc/squid# cp squid.conf squid.conf.bak
root@proxy:/etc/squid# > squid.conf

Editar el nuevo archivo de configuración:

root@proxy:/etc/squid# nano squid.conf

Agregar el siguiente contenido dentro del archivo vacío:

auth_param basic program /usr/lib/squid3/basic_ncsa_auth /etc/squid/users
auth_param basic realm proxy

acl authenticated proxy_auth REQUIRED
http_access allow authenticated

http_port 8080

coredump_dir /var/spool/squid

Se observa que esta configuración cambia el puerto por defecto (3128) por el puerto 8080. Cambiar por cualquier otro puerto que se desee. Además fuerza el uso de autenticación Basic a través de basic_ncsa_auth. Esto apunta a que el proxy no pueda ser utilizado públicamente en Internet.

A continuación, y antes de reiniciar Squid, será necesario crear la base de datos de usuarios en el archivo /etc/squid/users:

root@proxy:~# htpasswd -c /etc/squid/users emi
New password: 
Re-type new password: 
Adding password for user emi
root@proxy:~# htpasswd /etc/squid/users user1
New password: 
Re-type new password: 
Adding password for user user1

La base de datos se crea con el utilitario htpasswd provisto por el paquete apache2-utils. En caso de no contar con el mismo, es posible instalar sólo dicho paquete (no es necesario instalar todo Apache para contar con el mismo).

En el ejemplo se han creado 2 usuario. Notar que al momento de crear el primer usuario se debe utilizar la opción -c a fin de inicializar el archivo, pero luego ya no, porque de lo contrario se sobrescribe.

Finalmente reiniciar Squid y verificar el cambio de puerto:

root@proxy:/etc/squid# service squid restart
root@proxy:/etc/squid# netstat -plant | grep squid
tcp6       0      0 :::8080                 :::*                    LISTEN      19401/(squid-1)

Es posible comprobar la conectividad desde otro sistema utilizando netcat:

emi@hal9000:~% nc -vv proxy.linuxito.com 8080
proxy.linuxito.com [192.168.100.200] 8080 (http-alt) open
^C sent 0, rcvd 0

Desde un navegador, es posible comprobar nuestra IP pública actual accediendo al sitio whatismyip.com:

En Mozilla Firefox se configura el proxy desde el botón "Settings..." que se encuentra en la sección inferior "Network Proxy" en las preferencias generales. Aunque en dicha configuración no permita establecer las credenciales del usuario, éstas serán solicitadas al momento de procesar el primer pedido HTTP a través del proxy:

Con el proxy configurado correctamente en el navegador, se comprueba que nuestra IP pública ha cambiado:

Esto significa que navegamos Internet efectivamente a través del proxy Squid.

Referencias

Imagen "Squid Now" (CC BY-SA 3.0).


Tal vez pueda interesarte


Compartí este artículo