|
Configuración de un servidor proxy en LINUX usando Squid
Por: Alejandro Rincón Linares (arincon@udistrital.edu.co)
Grupo Linux Universidad Distrital
16 de Agosto de 2001
Tabla de contenido:
- Que es un servidor Proxy?
- Conceptos sobre caches
- Squid
- Instalando Squid
- Configuración básica de squid
- Configurando los clientes
- Controlando el acceso
- Acerca de este documento
1. Que es un servidor Proxy?
El termino proxy significa "hacer algo en nombre de otro." En términos de redes, un servidor proxy puede actuar
en nombre de muchos clientes. Un proxy HTTP es una maquina que recibe peticiones de paginas web de otra
maquina (Maquina A). El proxy obtiene la pagina solicitada y retorna el resultado a la Maquina A.
El proxy puede tener un cache con las paginas solicitadas, así si otra maquina solicita la misma pagina le será
enviada la copia que reside en el cache. Eso permite un uso eficiente del ancho de banda y un menor tiempo de
respuesta. Como efecto colateral; como las maquinas cliente no están directamente conectadas al exterior,
esta es una forma de incrementar la seguridad de la red interna. un proxy bien configurado puede ser tan efectivo
como un buen firewall.
Existen muchos servidores proxy para Linux. Una solución muy popular es el modulo de proxy de Apache.
Una implementación mas completa y robusta de un proxy HTTP es SQUID.
2. Conceptos sobre caches
Dentro del campo de las caches, es necesario tener en cuenta de qué
forma puede ser útil el realizar caché y que objetos deben ser
cacheados. Es totalmente inapropiado cachear por ejemplo números
de tarjetas de crédito, los resultados de un script ejecutado
remotamente, sitios que cambian muy a menudo o incluso sitios que no
desean ser cacheados.
Los scripts ejecutables cgi-bin no son cacheados, las páginas
que indican en las cabeceras periodos de caducidad son tenidos en cuenta,
y es posible especificar con reglas extra que se debe y que no se debe
cachear, y por cuanto tiempo.
Para determinar la utilidad y rendimiento de la cache, es necesario tener en cuenta
diversos factores. Utilizando una cache pequeña (un par de
gigas) se obtienen unos resultados altos (cercanos al 25%). Este
espacio cachea los sitios mas habituales. Si se dobla el espacio en
disco, no se dobla este porcentaje. Esto es debido a que se está
intentando capturar el resto de peticiones, que con frecuencia son
poco utilizadas. Una cache grande (por encima de 20 Gb) probablemente
no llegará al 50%, a no ser que las páginas se
mantengan durante mucho tiempo.
3. Squid
Una forma de acelerar la navegación web es mediante la instalación de una caché.
Squid ha destacado por ser una de las mejores caches que existen, y
es utilizada por miles de empresas e ISPs en todo el mundo. Se trata
de un software gratuito, diseñado para UNIX.
De sobra es conocido que el ancho de banda de las conexiones es un bien preciado. La
instalación de una caché eficientemente configurada
puede dar resultados sorprendentes. Además, no es necesario
hacer una fuerte inversión en un servidor SUN o similar, ya
que Squid funciona bajo Windows NT y soporta lógicamente
plataformas Intel.
Squid es un software que cachea datos de Internet. Lo realiza guardando las
peticiones que los usuarios realizan. En otras palabras, si una
persona quiere descargar una página web, pide a squid que
obtenga dicha página. Squid se conecta al servidor remoto y
pide la página. Después reenvía la petición
al usuario, pero al mismo tiempo mantiene una copia. La próxima
vez que alguien desee dicha página, squid simplemente la lee
del disco y la transfiere al usuario de forma instantánea.
Squid soporta actualmente los protocolos HTTP, FTP, GOPHER, SSL y
WHAIS. No soporta otros protocolos como RealAudio, Streams y
similares.
4. Instalando Squid
Para instalar squid, primero se necesita obtenerlo (obvio, no? ;-) ); esto se puede hacer
descargándolo desde la pagina de squid en www.squid-cache.org.
La versión estable mas reciente disponible en el momento de
redactar este documento es la 2.4 STABLE1.
Por experiencia, recomiendo conseguir las versiones binarias (no solo de squid, sino en general),
ya que no faltan los problemas en el momento de compilar el código
fuente.
Podemos encontrar las distribuciones binarias; es decir, ya compiladas y listas para
instalar. La única versión binaria (en esta pagina,
claro) es un RPM para Red Hat 6.0 y posteriores; si no desea ocuparse
de la compilación de código fuente y no tiene esta
versión de Linux, debería intentar instalarla en su
sistema (actualmente, la mayoría de distribuciones de Linux
son compatibles con los RPM para Red Hat). Si esto no funciona,
podría intentar conseguir un paquete binario compatible con su
distribución.
Agotados estos recursos, o si usted es un aventurero a quien le gusta el riesgo y la adrenalina ,
aquí explicare como compilar el código fuente e
instalar squid. Para esto, asumiré que el archivo descargado
tiene como nombre squid-2.4.STABLE1-src.tar.gz.
1. Se descomprime el archivo:
% tar zxvf squid-2.4.STABLE1-src.tar.gz
2. Entramos al directorio creado con el paso anterior:
% cd squid-2.4.STABLE1
3. Configuramos y compilamos squid:
% ./configure --prefix=/usr/local/squid
% make all
El parámetro --prefix=/usr/local/squid en ./configure solo indica el directorio
donde será instalado squid (/usr/local/squid).
4. Se instala squid (con permisos de root):
% make install
y, eso es todo (fácil, no?). Si por alguna razón tiene problemas en alguno de los pasos
anteriores, le recomiendo leer el FAQ o ingresar en las Listas de Correo
de www.squid-cache.org.
5. Configuración básica de squid
Antes de utilizar squid, debemos configurarlo. Esto lo hacemos editando el archivo squid.conf para
establecer los parámetros particulares de nuestra maquina.
Esta configuración básica fue extraída del
archivo QUICKSTART que se encuentra en el directorio en el cual se
descomprimió el código fuente de squid.
Asumiremos que squid se instalo en el directorio /usr/local/squid, entonces deberá quitar los
comentarios y editar las siguientes líneas del archivo
/usr/local/squid/etc/squid.conf:
cache_peer
Si tiene un cache padre, escríbalo aquí. Los administradores del
cache padre proveen instrucciones de como hacerlo. Siempre debe
verificar si tiene los permisos necesarios antes de añadir un
cache padre.
cache_mem
Añada aquí la cantidad de memoria (memoria RAM) que será asignada al
cache. Advertencia: Squid utiliza mucha mas memoria que este
valor. Regla de Oro: Si tiene N megabytes libres para Squid, escriba
N/3 aquí.
cache_dir /usr/local/squid/cache 100 16 256
Escriba aquí (primer numero, aquí 100) la
cantidad de espacio en disco duro (en megabytes) que será
asignada al cache.
acl, http_access, icp_access
Listas de Control de Acceso (Access Control Lists). Son importantes porque
previenen que alguien utilice sin autorización sus recursos de
red. Para llenar el ACL "allowed_hosts", use su dirección
de red (por ejemplo 192.168.10.0) y su mascara de red (por ejemplo
255.255.255.0):
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl all src 0.0.0.0/0.0.0.0
acl allowed_hosts src 192.168.10.0/255.255.255.0
http_access deny manager all
http_access allow allowed_hosts
http_access deny all
icp_access allow allowed_hosts
icp_access deny all
cache_mgr
aquí va la dirección de e-mail del administrador
cache_effective_user
Si debe iniciar Squid como root, encuentre un usuario y grupo seguros
para ejecutarlo antes de iniciar (generalmente "nobody" y
"nogroup"). No use "root", por razones de
seguridad.
visible_hostname
El nombre del host que promocionara con el cache.
Después de editar squid.conf según sus necesidades, ejecute Squid con las
siguientes líneas de comando:
% /usr/local/squid/bin/squid -z
% /usr/local/squid/bin/squid
Verifique en el archivo cache.log (/usr/local/squid/logs/cache.log) que todo este bien.
Nótese que el mensaje "WARNING: Cannot write to swap
directory" es normal la primera vez que se ejecuta Squid.
Una vez Squid ha creado todos sus archivos (esto puede tomar mucho tiempo en algunos sistemas),
pruébelo con un cliente Web normal. Por defecto, Squid correrá
en el puerto 3128.
Cuando tenga a Squid funcionando desde la línea de comandos, puede configurar Linux para cargar
Squid al iniciar el sistema (esto depende fundamentalmente del tipo
de Linux/UNIX que usted utilice, generalmente debería
modificar algo en un /etc/rc_algunacosa).
6. Configurando los clientes
La configuración de los clientes consiste en indicar al navegador que utilice un proxy
para conectarse a Internet. Veamos un ejemplo con un navegador
popular:
Netscape Navigator:
Seleccione Preferences del menú Edit. En la página de proxies de la sección
Advanced, seleccione Manual proxy configuration,
y haga click sobre el botón View.

Para cada protocolo que squid soporta (por defecto HTTP, FTP y gopher), teclee la IP o el
nombre del servidor que aloja squid, junto al puerto correspondiente
(por defecto el 3128).

De manera similar se deben configurar otras aplicaciones clientes que deseemos que
utilicen nuestra cache.
7. Controlando el acceso
Permitir o denegar el acceso a la caché es sólo una de las funciones del ACL.
El ACL es usado también para las jerarquías de caches.
Por tanto, primero se define una lista ACL y después se
permite o deniega el acceso a una función de la caché.
En la mayoría de las ocasiones, esta función es
"http_access", que permite o deniega a un navegador el
acceso a squid. Usare esta función como un ejemplo para los
casos siguientes (como "icp_access").
Squid lee las directivas de arriba a abajo, para determinar que regla aplicar, e
incluso determinar si debe permitir o denegar el acceso. Por tanto,
si dispone de una clase C de direcciones, y quiere permitir sólo
a esas máquinas acceder a la caché, utilizaremos estas
directivas (asumiendo que la clase C 196.4.160.0 entera tendrá
acceso):
|
acl
hostpermitidos src 196.4.160.0/255.255.255.0 acl all src
0.0.0.0/0.0.0.0
http_access allow
hostpermitidos http_access deny all
|
La opción "src" de la primera línea es una de las opciones que
se puede utilizar para decidir en que lista acl el usuario está
incluido. Incluso es posible utilizar aspectos como el tiempo actual,
o el sitio al que se dirigen. Para mas opciones, vea el fichero por
defecto de squid (squid.conf.default).
Si un usuario del rango 196.4.160.* se conecta a squid usando TCP para solicitar una
URL, squid leerá las líneas referentes a "http_access"
(ya que es una conexión TCP y el cliente va a utilizar el
método HTTP para solicitar el objeto). La lectura se realiza
de arriba hacia abajo,
y se detiene en la
primera coincidencia para decidir si permitir o denegar la petición. En el ejemplo
anterior, squid verá que la primera línea de
"http_access" se cumple, y procederá a aplicarla. En
este caso, permitirá el acceso y ejecutará la petición.
Pero tengamos en
cuenta el siguiente ejemplo:
|
acl hostpermitidos src 196.4.160.0/255.255.255.0
acl all src 0.0.0.0/0.0.0.0
http_access deny all
http_access allow hostspermitidos
|
En este caso no funcionará, ya
que squid aplicará la primera coincidencia (la primera línea)
y denegará el acceso.
Opciones Avanzadas
En el fichero de configuración encontramos otros parámetros:
|
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl all src 0.0.0.0/0.0.0.0
http_access deny manager !localhost
http_access allow all
|
El campo "proto" de la primera línea se refiere que el acl bloquea un protocolo
específico, en este caso el protocolo "cache_object".
Puede utilizarse también otro protocolo, como "http"
o "ftp". En concreto, se trata de un protocolo propio de
squid. Este protocolo retorna información acerca de cómo
está configurada la cache, o cómo se está
ejecutando. Está dentro de la sección "http_access"
ya que se trata de una petición HTTP a squid, pero en lugar de
conectar a un servidor remoto es squid quien gestiona la información.
El ejemplo anterior indica: si squid recibe una petición intentando utilizar el
protocolo "cache_object" (definido en el acl manager),
debe denegarla a no ser que provenga de localhost. De este modo, un
programa que este ejecutándose en el servidor de caché
puede obtener información del estado interno de squid, pero no
una máquina del exterior. Recuerde que el carácter "!"
significa NO, por lo que estamos diciendo "denegar manager NO
localhost".
ACLs basados en direcciones de destino
Existe un caso frecuente, consistente en prohibir el acceso a una lista de sitios
consideramos como "inapropiados". Squid no está
optimizado para gestionar una larga lista de sitios, pero puede
gestionar un número concreto de sitios sin problemas.
|
acl adultos dstdomain playboy.com sex.com
acl hostpermitidos src 196.4.160.0/255.255.255.0
acl all src 0.0.0.0/0.0.0.0
http_access deny adultos
http_access allow hostspermitidos
http_access deny all
|
Este ejemplo indica que las URLs playboy.com o sex.com serán denegadas, ya que así
lo especifica la primera línea de la directiva "http_access".
Si se piden otras URL´s, lógicamente la primera línea
no es aplicable, y squid pasa a considerar la segunda y tercera. Por
tanto, si el cliente se conecta dentro del rango permitido se cursará
la petición. De lo contrario, la petición será
rechazada.
Una última observación, este método considera exclusivamente los
dominios. Para evitar conexiones especificando la IP de la máquina,
debe utilizarse la directiva dsf acl.
8. Acerca de este documento
Este documento fue creado con la
intención de ser útil pero absolutamente sin garantía
alguna. Debe ser utilizado bajo su propio riesgo. Una gran parte (por
no decir la mayor parte) de este documento fue transcrita casi
literalmente del Manual
de Squid bajo Windows NT
escrito por Moisés Barrio Andrés de www.idesoft.com;
con algunos aportes personales (como la guía de compilación
e instalación de Squid y traducción de algunas partes
del documento QUICKSTART del código fuente de squid para la
configuración básica de Squid). Agradezco a Moisés
Barrio Andrés por su excelente manual y su aporte a la
comunidad (y en particular, el aporte de su Manual a la creación
de este documento, que podría considerarse derivado de aquel
manual).
|