Squid Caching Proxy

Que tal mis queridos padawans! Ante todo les deseo un excelente 2003, lleno de libertad.

En este numero les quiero hablar sobre la configuracion del Squid Caching Proxy. El Squid es una aplicacion de Proxy. Que es un Proxy? Muy simple: es una aplicacion que se esta ejecutando en cierto host con acceso a, por ejemplo, Internet y a una red privada (por lo general, aunque muchos ISP habilitan Proxys para que sus clientes puedan utilizarlos). Que el proxy este funcionando permite a los clientes de dicha red privada, navegar la www A TRAVES del Proxy. O, si el Proxy es lo suficientemente avanzado, tambien utilizar FTP, SOCKS, GOPHER, todo a traves del proxy. En resumen, el cliente no accede realmente a internet, sino que le solicita al proxy lo que quiere, el proxy a su vez lo busca en Internet, lo transfiere, y luego se lo da al cliente. Es menos directo, si, que NAT, donde se trabaja a nivel TCP/IP y no a nivel aplicacion.

Veamos las ventajas de usar Squid:

  1. Soporta muchisimos protocolos de aplicacion (o sea, HTTP, FTP, etc)
  2. Tiene un avanzado mecanismo de autentificacion (o sea, a quien y cuando permitimos utilizar el proxy).
  3. Permite actuar como 'cache' de Internet, copiando contenido en forma local para que se lo pueda acceder mas rapido (por ejemplo, animaciones flash).
  4. Es Software Libre.

Ahora, las desventajas, pero de usar un Proxy en general:

  1. La maquina donde funcionara el Proxy debe tener capacidad de almacenamiento acorde a la cache que necesitemos o querramos.
  2. Debe tener un buen poder de procesamiento, ya que no es solo un 'reenvio' de paquetes tcp/ip.
  3. En la mayoria de las veces es mas rapido hacer NAT que utilizar un Proxy.
  4. Hay que configurar la utilizacion del Proxy en cada cliente (hay 2 formas de salvar este inconveniente, que veremos mas adelante).

Teniendo esos puntos en cuenta, si queremos instalarlo podemos hacer dos cosas: Utilizar el paquete Squid de nuestra distribucion, o bajar/compilar/instalar la ultima version disponible.

Para los que decidan utilizar el que viene con su distribucion, pueden leer directamente el punto de configuracion. Los mas osados... siganme! (no estoy haciendo alusion a ninguna figuracha politica).

BAJANDO EL SQUID

Lo principal es saber que el sitio oficial es www.squid-cache.org y no www.squid.org. De hecho es tan comun esta equivocacion que www.squid.org tiene un "Estas buscando la Cache? Dale click a esta URL". Desde el sitio oficial de Squid podemos bajar la ultima version de desarrollo (DEVEL), que es el codigo fuente "no-estable". Sino, podemos bajar la version "estable" (STABLE, recomendada para sistemas en produccion). Si nos acercamos a Squid como programadores, porque queremos extenderlo o corregir algun error, debemos utilizar la version DEVEL, o acceder mediante CVS (ya trataremos este tema mas adelante).

Al momento de escribir este articulo, la ultima version estable del Squid Cache es la 2.5-STABLE1. Pueden elejir entre formato tar.gz o .tar.bz2 - Para descomprimir un .bz2, utilicen la aplicacion bzip2 ('man bzip2') o directamente el enlace bunzip2, la cual directamente descomprime. Luego, desTARren el archivo, sin usar el parametro 'z'. (tar -xvf archivo.tar). El bzip2 comprime generalmente mejor.

Una vez que hayamos bajado y desempaquetado el archivo de la distribucion de Squid, pasemos al directorio donde quedo almacenado, y ejecutemos las 3 famosas sentencias de compilacion:

  1. ./configure --prefix=/usr/local/squid - Para que el Squid, sus binarios, archivos de configuracion, etc, esten en /usr/local/squid.
  2. Si el paso 1 termino sin problemas, podemos hacer 'make'.
  3. Ahora, 'make install' (como usuario root), para copiar los archivos necesarios a las ubicaciones establecidas dentro de la jerarquia /usr/local/squid.

Una vez compilado e instalado el Squid, debemos configurarlo. A decir verdad esto es bastante simple: el archivo de configuracion squid.conf (en /usr/local/squid/etc) esta LLENO de parametros, pero solo unos pocos debemos modificar SI o SI. El Squid, ocmo dice su documentacion, tiene muchas funciones, pero solo utilizaremos lo mas basico al comienzo. Editemos el squid.conf con el editor que mas nos guste. Veran que es de un estilo muy simple: bien comentado, pero cada parametro de configuracion es una linea, que contiene un parametro o comando, y una serie de valores. Antes de empezar a modificar estos valores, seria conveniente leer todo el squid.conf completo, para tener una idea, una vision general de lo que se puede hacer desde alli, de esta forma si un dia tenemos que hacer algo en particular, quiza podamos recordar si hacerlo desde squid.conf o desde otro lado.

El primer parametro a tocar es 'cache_mem'. Especifica la cantidad de memoria (no de disco rigido) que Proxy utilizara. Segun recomendacion de los autores, si tenemos X RAM libre que querramos dedicar al Squid, pongamos aqui un TERCIO de dicho valor (X/3).

Luego podemos seguir por 'cache_dir', donde especificaremos el donde y el cuanto de la Cache. Por ejemplo: 'cache_dir /usr/local/squid/cache 100 16 256'. El valor 100 indica '100 MB de cache'. Al 16 y al 256 es probable que no necesitemos nunca cambiarlos, e indican al Squid como utilizar los 100mb.

Ahora viene algo importante: las reglas de acceso y el acceso a los protocolos http e icp. Por defecto querremos permitirle la utilizacion del Proxy a nuestra red interna solamente. El siguiente bloque es un ejemplo para una red 192.168.10.0 con mascara 255.255.255.0. Se permitira acceso toda esta red y al localhost/127.0.0.1, esto se logra definiendo 4 acl's: la del administrador (de uso interno del Squid), la de localhost, una global que hable de TODA direccion IP posible y la de permitidos (nuestra red privada).

acl localhost src 127.0.0.1/255.255.255.255
acl todos src 0.0.0.0/0.0.0.0
acl permitidos src 192.168.10.0/255.255.255.0

http_access allow permitidos localhost
http_access deny todos

icp_access allow permitidos localhost
icp_access deny todos

Los indicadores 'deny' y 'allow' significan "denegar" y "permitir", respectivamente, a las ACL definidas mas arriba en cada protocolo. El orden es de 'allow, deny'. Primero indico a quienes permito, luego deniego a todos los demas. Quiza quieran hacer esto por cada {PROTOCOLO}_access que les parezca.

Quiza querramos modificar el 'cache_mgr', para indicar la direccion de eMail nuestra, asi si algun usuario tiene problemas, sabe a quien contactar. 'visible_hostname' indicara el nombre del Host que se publicara en paginas de error, etc, generadas por Squid. Para redes grandes, no?

Luego, debemos indicar con que usuario y grupo debe funcionar el Squid luego de haber sido iniciado con root desde los scripts de inicio (o a mano por el root mismo). Esto lo hacemos con 'cache_effective_user' y 'cache_effective_group'. Valores recomendados: algo del estilo 'nobody' y 'nogroup'.

Una vez editado el squid.conf, debemos inicializar la cache, y luego ejecutar el Squid. Esto lo hacemos de la siguiente forma:

Inicializar la cache: /usr/local/squid/bin/squid -z

Ejecutar el Squid: /usr/local/squid/bin/squid

Ahora, debemos revisar /usr/local/squid/logs/cache.log. Debemos fijarnos si esta todo bien. Van a encontrar un par de errores al principio de todo, algo comun la primera vez que se ejecuta el Squid. Una vez andando, debemos probarlo: vayamos a un cliente, configuremos el uso del proxy para el protocolo HTTP en el puerto 3128 (el por defecto de Squid, el cual se puede cambiar con 'http_port') y listo. Si anda, perfecto. Si no, verifiquen que el Squid este andando ('ps ax', 'nmap', etc).

Si les resulta molesto configurar CADA cliente para que use el Squid, pueden habilitar el NAT y utilizar el siguiente comando de iptables para hacer un "Proxy Transparente":

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128

Reemplacen 'eth1' con la interfaz de la red interna.

De esta forma, toda solicitud para el puerto de destino 80 sera redirigida de forma casi totalmente imperceptible para el usuario al puerto 3128 local.

La otra forma seria utilizando archivos de configuracion de proxy automaticos de Internet Explorer... y, no, la verdad que no me interesa comentar eso.

Un abrazo a todos