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).