Imprimir

Servidor proxy Squid en Linux

Un proxy es un ordenador que recibe peticiones de páginas web de otros ordenadores de la red, las busca en su caché o en Internet y devuelve cada página al ordenador que la ha pedido. De esta manera, sólo este ordenador se conecta a Internet.

Los proxys se emplean principalmente para tres cosas:

  1. reducir el consumo de ancho de banda y acelerar la navegación web, ya que las páginas cacheadas no tiene que volver a bajarlas.
  2. controlar el acceso a determinadas direcciones web o IPs.
  3. proxy inverso: se pone una máquina con un proxy inverso delante del servidor web para servir las peticiones externas de páginas más rápidamente por tenerlas en caché.

El proxy más extendido es Squid (squid-cache.org, paquete squid).

Equivalencias en Windows: MS-ISA.

Veamos algunas de las principales directivas de su archivo de configuración, /etc/squid.conf:

  • por defecto Squid escucha en el puerto 3128, pero usaremos la directiva http_port para que escuche además en el puerto 8080, ya que muchos navegadores buscan los proxys en ese puerto:
    http_port 3128
    http_port 8080
  • dirección de correo del administrador que aparecerá en los mensajes de error:
    cache_mgr webmaster@dominio.com
  • nombre de host mostrado en los mensajes de error:
    visible_hostname proxy.dominio.es
  • idioma de los mensajes de error:
    error_directory /usr/lib/squid/errors/Spanish
  • podemos hacer que nuestro proxy trabaje de forma coordinada con otros proxys. Nuestro proxy buscará las peticiones en su propia caché, y si no están cacheadas, pasará la petición al proxy padre; si éste tampoco la encuentra en su caché, la buscará en Internet. La sintaxis es:
    cache_peer <hostname> <type> <http_port> <icp_port> <options>

    Por ejemplo, para coordinar nuestro proxy con la caché de xtec.es haremos:

    cache_peer proxy.xtec.es parent 8080 3130 no-digest no-query default
  • para configurar los permisos de acceso a Squid, lo haremos en dos pasos:
    1. primero definiremos las listas de control de acceso ACL (Access Control List):
      • nuestra red local:
        acl red_local src 192.168.1.0/255.255.255.0
      • dominios a los que no se puede acceder:
        acl dominios_chungos dstdom_regex -i playboy.com marca.es
      • palabras que no pueden figurar en una URL:
        acl palabras_chungas url_regex -i sex porno
      • excepciones a la regla anterior:
        acl palabras_no_chungas url_regex -i sexualidad
      • tipos de archivo a los que no se permite acceder:
        acl archivos_chungos url_regex -i \.mp3$ \.avi$
      • horas a las que no se permite navegar:
        acl horas_chungas time 8:00-10:00
      • al gerente no se le restringe nada:
        acl ip_gerente src 192.168.100.3/32
    2. a continuación, estableceremos los permisos de cada lista ACL. Es muy importante el orden en que establecemos los permisos, ya que las comprobaciones comienzan por el principio y cuando una de las condiciones se cumple ya no sigue leyendo:
      • si no es de la red local, denegar el acceso:
        http_access deny !red_local
      • si es el gerente, permitir el acceso:
        http_access allow ip_gerente
      • si quiere entrar a un dominio prohibido, denegar el acceso:
        http_access deny dominios_chungos
      • si la URL contiene una palabra permitida (una palabra que parece prohibida pero que puede ser utilizada), permitir el acceso:
        http_access allow palabras_no_chungas
      • si la URL contiene una palabra prohibida, denegar el acceso:
        http_access deny palabras_chungas
      • si quiere bajarse un tipo de archivo prohibido, denegar el acceso:
        http_access deny archivos_chungos
      • si quiere navegar a una hora prohibida, denegar el acceso:
        http_access deny horas_chungas
      • todas las demás peticiones pueden acceder al proxy:
        http_access allow all

Grabamos los cambios y reiniciamos Squid:

# /etc/init.d/squid restart

Test de proxy

Para comprobar si estamos navegando a través de un proxy (local o implementado por nuestro ISP), tenemos test de proxy en la página de la Asociación de Internautas internautas.org/w-testproxy.php y en la página lagado.com/tools/cache-test/

Si el resultado es afirmativo, saldrá un mensaje como éste:

Tu conexión está pasando a través de un PROXY
IP del PROXY: 200.35.164.1T
Tu IP: 127.0.0.1, 192.168.1.80

Si el resultado es negativo, el mensaje será:

No detectamos ningún PROXY
Tu IP: 88.1.206.68

Analizador de logs de Squid

Para analizar los logs de Squid tenemos varias aplicaciones:

6 Comentarios en “Servidor proxy Squid en Linux”

  • mario dice:

    nesecito un manual o una guias para implementar proxy con linux

  • mario dice:

    seria bueno que apoyaran a persona que quieren saber sobre los usus de proxy con linux

  • Ricardo dice:

    dime que necesitas saber y podemos hablar, agregame rrvillarreal@cableonda.net (por msn messenger)

  • Ulises dice:

    Gracias por el aporte y tu tiempo en hacerlo, se encuentra muy interesante.

  • Alfredo Alva dice:

    Una pregunta, actualmente doy permisos al squid para la navegacion, colocando las ips fijas (mi red es windows 2003), hay alguna manera de integrarlo para que resuelva los ips a traves de mi dns y los permisos los de por nombre host?

  • Hugo dice:

    Una Pregunta: Quisiera modificar o realizar mi propio mensaje de error, para sustituir el que esta por defecto del “http_access deny” para las paginas, mas que nada es posible y si lo es como seria.

Deja un comentario