.: EL CONOCIMIENTO TE HACE LIBRE :.



INICIO

DOCUMENTACION:

Cómo hacer preguntas de manera inteligente

LINUX:

Configuración de un servidor proxy con squid usando LINUX

Desarrollo

JUEGOS:

Street Fighter

The King Of Fighters

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:
  1. Que es un servidor Proxy?
  2. Conceptos sobre caches
  3. Squid
  4. Instalando Squid
  5. Configuración básica de squid
  6. Configurando los clientes
  7. Controlando el acceso
  8. 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.

Configurar un proxy en Netscape Navigator

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

Configurar un proxy en Netscape Navigator

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









Autor: Alejandro Rincón Linares
Visita la pagina del Grupo Linux Universidad Distrital
Ultima Actualizacion: 17 de Julio de 2003