Servidor proxy Squid

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:
  • 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

Analizador de logs de Squid

Para analizar los logs de Squid tenemos varias aplicaciones:

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&oacute;n est&aacute; pasando a trav&eacute;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&uacute;n PROXY
Tu IP: 88.1.206.68

Artículos en la categoría "Servidores (software)"

  1. Monitorizar servidores con Nagios
  2. Monitorizar routers SNMP con MRTG
  3. Administración de máquinas Linux con Webmin
  4. Shell remoto con Telnet
  5. Servidor DNS Bind
  6. Servidor de IPs dinámicas DHCP
  7. Servidor de hora NTP
  8. Servidor proxy Squid
  9. Servidor de correo electrónico
  10. Servidor de terminales LTSP
  11. Servidor web Apache
  12. Soporte para PHP en Apache
  13. Soporte para CGI en Apache
  14. Analizador de logs de Apache
  15. Servidor de base de datos MySQL
  16. Servidor web Lighttpd
  17. Whois: Quién es el propietario de un dominio
  18. Servidor de archivos FTP
  19. Compartir archivos en Linux: NFS
  20. Compartir archivos en Windows: Samba
  21. Control de versiones: CVS y Subversion
  22. Servidor de streaming por Internet
  23. Servidor de streaming en red local

7 Comments:

  1. nesecito un manual o una guias para implementar proxy con linux

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

  3. dime que necesitas saber y podemos hablar, agregame [email protected] (por msn messenger)

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

  5. 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?

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

  7. Hugo, para modificar la pagina que carga squid denegando el acceso a un sitio o url determinado se modifica de la siguiente manera:
    primero tienes que saber html para modificar el fichero
    C:squidshareerrorsSpanishERR_ACCESS_DENIED
    segundo lo abres con un bloc de notas y luego modificas a tu gusto teniendo encuenta el respeto al diseño html, luego guarda los cambios y reinicias el squid…y accede a una pagina denegada para que veas los cambios…
    espero que te halla servido