Squid3 en Debian Squeeze Arturo Borrero González IES G.Nazareno, IAIG Febrero 2011 Documento bajo licencia “"CC-BY-SA 3.0" ”. Usted es libre de copiar, modificar y redistribuir este documento, bajo la misma licencia. Este documento o uno muy similar puede encontrarse en http://www.ral-arturo.blogspot.com/ .
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Squid3 en Debian Squeeze
Arturo Borrero GonzálezIES G.Nazareno, IAIG
Febrero 2011Documento bajo licencia “"CC-BY-SA 3.0"”.Usted es libre de copiar, modificar y redistribuir estedocumento, bajo la misma licencia.Este documento o uno muy similar puede encontrarse en http://www.ral-arturo.blogspot.com/.
Squid3 es un proxy http que sirve, entre otras cosas, para cachear y filtrar contenido que pasa por su control, ofreciendo funciones de control de tráfico web, control de acceso y reducción del tráfico de red.La finalidad de esta memoria se describe a continuación:
Objetivos
1. Comprender el funcionamiento de un servidor proxy web2. Configurar listas de control de acceso en squid3. Crear reglas de NAT en iptables para que squid funcione en modo transparente
Pasos a realizar
1. Instala y configura squid3 para que puedan utilizarlo los equipos de la red virtual 10.0.0.0/8
2. Realiza las configuraciones necesarias para que los equipos de la red virtual utilicen squid de forma transparente y que esta modificación permanezca tras reiniciar el servidor.
3. Incluye una ACL para que no puedan descargarse URL que incluya alguna de las siguientes palabras: tube, mega, direct, free.
4. Bloquear las respuestas de videos quicktime.
Para ello, dispongo de la siguiente configuración previa de máquinas y sistemas:
· Máquina “nostromo”. Dom0, debian squeeze.· Ips: 10.0.0.128 y 192.168.0.17· Router entre la red 10.0.0.0/8 y la red 192.168.0.0/24, NAT.· Proxy squid3
· Máquina “goku”. DomU (kvm), debian squeeze.· Ip 10.0.0.1· Cliente web.
· Cable-modem router· Ip 192.168.0.1· NAT entre la red 192.168.0.0/24 e internet.
Todo el software usado puede encontrarse de forma libre y gratuita en los repositorios oficiales de Debian.
IES G.Nazareno | IAIG | Febrero 2011 Pag. 2/12
Squid3 en Debian Squeeze Arturo Borrero Gléz.
INSTALACIÓN Y CONFIGURACIÓN DE SQUID3
Squid3 se instala fácilmente desde los repositorios oficiales de debian. Se instalarán algunos paquetes como dependencias:
# aptitude install squid3
El fichero de configuración de Squid3 es muy completo y complejo. En la versión de debian squeeze, tiene más de 5400 lineas y muchas posibles directivas. Por fortuna, la gran mayoría son comentarios sobre la utilización del sistema.
Para empezar a trabajar, tendremos que modificar las directivas de control de acceso (ACLs) que permitirán a la red local virtual 10.0.0.0/24 usar squid3:
Para que las máquinas de la red virtual 10.0.0.0/8 usen el protocolo http de forma transparente a través de squid3, necesitaremos la siguiente configuración de iptables:
# Redireccionamiento a SQUID3 iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3128
# Source NAT hacia 192.168.0.0/24 para que pueda hacerse # una conexión hacia internet de ida y vuelta correcta.# Invariablemente se usan interfaces eth0 y eth1 iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Es importante pensar en qué va a pasar cuando el servidor se reinicie. Estas reglas de iptables no son “persistentes”. Voy a proponer una manera de solucionarlo, aunque a priori se me ocurren varios métodos que pueden ser igual de válidos:
# Función parar iptablesstop() { echo -n "Lo siento, tendrás que borrar las reglas de iptables mano." # fichero de borrado de reglas, no creado.. RETVAL=0 }
Esto generará que debian introduzca automáticamente el fichero en la configuración de arranque del sistema, en función de las dependencias, etc..Ahora si nos fijamos, el script tendrá un enlace en las carpetas de scripts de los distintos runlevels (p.e. /etc/rc2.d/) y se le habrá asignado un número correcto.Este es el método correcto de agregarlo al inicio, porque hacerlo manualmente puede dar muchos problemas (aparte de que tendríamos que inventarnos la posición de arranque dentro de la carpeta /etc/rcX.d/).
IES G.Nazareno | IAIG | Febrero 2011 Pag. 6/12
Squid3 en Debian Squeeze Arturo Borrero Gléz.
PRUEBAS DE FUNCIONAMIENTO
De un mismo movimiento voy a probar que Squid3 realmente funciona de manera transparente para los clientes http y que además filtra el contenido que hemos especificado a través de las ACLs.
Aquí puede verse una conexión TCP/IP desde goku (10.0.0.1) al puerto 80 de www.youtube.com.Youtube.com no debe mostrarse al cliente dado que choca con las ACLs escritas.Al hacer “GET http://youtube.com”, Squid3 intercede, mostrando el correspondiente mensaje de advertencia/error. Dado que usé telnet y no un navegador, el http/html es devuelto plano, sin nada que lo procese e interprete. He recortado la etiqueta <style> para mayor comprensión:
root@goku:~# telnet www.youtube.com 80 Trying 74.125.230.163... Connected to youtube-ui.l.google.com. Escape character is '^]'. GET http://youtube.com/ HTTP/1.0 403 Forbidden Server: squid/3.1.6 Mime-Version: 1.0 Date: Sun, 13 Feb 2011 20:00:59 GMT Content-Type: text/html Content-Length: 3012 X-Squid-Error: ERR_ACCESS_DENIED 0 Vary: Accept-Language Content-Language: en X-Cache: MISS from localhost X-Cache-Lookup: NONE from localhost:3128 Via: 1.0 localhost (squid/3.1.6) Connection: close
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>ERROR: The requested URL could not be retrieved</title> <style type="text/css">[...][...][...]</style></head><body> <div id="titles"> <h1>ERROR</h1> <h2>The requested URL could not be retrieved</h2> </div> <hr>
<div id="content"> <p>The following error was encountered while trying to retrieve the URL: <a href="http://youtube.com/">http://youtube.com/</a></p>
<p>Access control configuration prevents your request from being allowed at this time. Please contact your service provider if you feel this is incorrect.</p>
<p>Your cache administrator is <a href="mailto:webmaster?subject=CacheErrorInfo%20-%20ERR_ACCESS_DENIED&body=CacheHost%3A%20localhost%0D%0AErrPage%3A
Viendo el mensaje de log, podriamos pensar que no sería demasiado complicado realizar un pequeño script que lo leyera y pusiera de forma visible quién ha estado intentando acceder a contenido filtrado con Squid3. Aunque no corresponde hacerlo en esta práctica.
Para probar el funcionamiento del filtrado por MIME-TYPE, he accedido a la web […] y he intentado visualizar un archivo de video quicktime.
El video no se ha mostrado, como puede verse en las capturas de pantalla del final de la memoria, y además se ha generado el siguiente mensaje en el log de squid3:
He podido comprobar que Squid es un software extremadamente potente. Antes de trabajar con él, no conocía ningún equivalente. Tiene unas inmensas opciones de configuración, algunas de ellas que ni siquiera han sido mencionadas en esta memoria (autenticación contra LDAP, Kerberos, etc..).Configurar a alto nivel Squid imagino que debe de ser un trabajo muy grande y que requerirá mucho trabajo por parte de el/la/los administrador/a/es/as de sistemas.
Pienso que el fichero de configuración de Squid es demasiado grande y complejo y creo que de fábrica se debería partir en varios subconjuntos, como ACLs, configuración de cachés, autenticaciones, etc.. Seguro que se puede hacer manualmente, pero si viene desde los paquetes de este modo, pues mucho mejor.En definitiva, pienso que es una práctica muy pequeña y rápida para las posibilidades que realmente ofrece Squid.
youtube-content/• http://albertomolina.wordpress.com/2009/01/09/nat-con-iptables/• Documentación y apuntes de Iptables de 1º de ASI (09-10) en IES G.Nazareno,
escritos por el profesor Jesús Moreno León.• http://www.google.com