Memoria sobre Squid3

4,378 views

Published on

Memoria sobre Squid3 para integración en Debian.

Published in: Self Improvement
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
4,378
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
165
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Memoria sobre Squid3

  1. 1. Squid3 en Debian Squeeze Arturo Borrero González IES 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/.
  2. 2. Squid3 en Debian Squeeze Arturo Borrero Gléz. INTRODUCCIÓN Squid3 es un proxy http que sirve, entre otras cosas, para cachear y filtrar contenido quepasa por su control, ofreciendo funciones de control de tráfico web, control de acceso y reduccióndel tráfico de red.La finalidad de esta memoria se describe a continuación: Objetivos 1. Comprender el funcionamiento de un servidor proxy web 2. Configurar listas de control de acceso en squid 3. 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 deDebian.IES G.Nazareno | IAIG | Febrero 2011 Pag. 2/12
  3. 3. 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 algunospaquetes como dependencias: # aptitude install squid3El fichero de configuración de Squid3 es muy completo y complejo. En la versión de debiansqueeze, tiene más de 5400 lineas y muchas posibles directivas. Por fortuna, la gran mayoría soncomentarios sobre la utilización del sistema.Para empezar a trabajar, tendremos que modificar las directivas de control de acceso (ACLs) quepermitirán a la red local virtual 10.0.0.0/24 usar squid3: /etc/squid3/squid3.conf[…][…]acl localnet src 10.0.0.0/24 # RFC1918 possible internal networkhttp_access allow localnethttp_port 3128 transparent[…][…]Para conseguir los filtrados requeridos, creamos las siguientes directivas: acl urls_prohibidas url_regex -i “/etc/squid3/urls_prohibidas.txt” http_access deny urls_prohibidasY en el fichero citado añadimos las palabras claves que queremos filtrar en las URLs: /etc/squid3/urls_prohibidas.txttubemegadirectfreePara filtrar por tipo MIME los vídeos “quicktime” tendremos que agregar la siguiente directiva: acl videos_quicktime rep_mime_type video/quicktime http_reply_access deny videos_quicktimeEsto filtrará descargas http tanto de ficheros “.mov” como “.qt”IES G.Nazareno | IAIG | Febrero 2011 Pag. 3/12
  4. 4. Squid3 en Debian Squeeze Arturo Borrero Gléz.La configuración final de Squid3 quedaría de la siguiente manera:root@nostromo:/home/arturo# cat-dry /etc/squid3/squid.conf---> Mostrando fichero /etc/squid3/squid.conf || Original: 5545 || Visualizado: 34 1 acl manager proto cache_object 2 acl localhost src 127.0.0.1/32 ::1 3 acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1 4 acl urls_prohibidas url_regex -i "/etc/squid3/urls_prohibidas.txt" 5 acl videos_quicktime rep_mime_type video/quicktime 6 acl localnet src 10.0.0.0/8 # RFC1918 possible internal network 7 acl SSL_ports port 443 8 acl Safe_ports port 80 # http 9 acl Safe_ports port 21 # ftp 10 acl Safe_ports port 443 # https 11 acl Safe_ports port 70 # gopher 12 acl Safe_ports port 210 # wais 13 acl Safe_ports port 1025-65535 # unregistered ports 14 acl Safe_ports port 280 # http-mgmt 15 acl Safe_ports port 488 # gss-http 16 acl Safe_ports port 591 # filemaker 17 acl Safe_ports port 777 # multiling http 18 acl CONNECT method CONNECT 19 http_reply_access deny videos_quicktime 20 http_access deny urls_prohibidas 21 http_access allow localnet 22 http_access allow manager localhost 23 http_access deny manager 24 http_access deny !Safe_ports 25 http_access deny CONNECT !SSL_ports 26 http_access allow localhost 27 http_access deny all 28 http_port 3128 transparent 29 hierarchy_stoplist cgi-bin ? 30 coredump_dir /var/spool/squid3 31 refresh_pattern ^ftp: 1440 20% 10080 32 refresh_pattern ^gopher: 1440 0% 1440 33 refresh_pattern -i (/cgi-bin/|?) 0 0% 0 34 refresh_pattern . 0 20% 4320IES G.Nazareno | IAIG | Febrero 2011 Pag. 4/12
  5. 5. Squid3 en Debian Squeeze Arturo Borrero Gléz. CONFIGURACIÓN DE IPTABLES Para que las máquinas de la red virtual 10.0.0.0/8 usen el protocolo http de formatransparente a través de squid3, necesitaremos la siguiente configuración de iptables: /etc/iptables.conf#!/bin/bash# borrado de reglas anterioresiptables -Fiptables -t nat -F PREROUTINGiptables -t nat -F POSTROUTINGiptables -t nat -F OUTPUTiptables -t filter -F FORWARDiptables -t filter -F OUTPUTiptables -t filter -F INPUT# Redireccionamiento a SQUID3iptables -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 eth1iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADEiptables -t nat -A POSTROUTING -o eth0 -j MASQUERADEEs importante pensar en qué va a pasar cuando el servidor se reinicie. Estas reglas de iptables noson “persistentes”. Voy a proponer una manera de solucionarlo, aunque a priori se me ocurrenvarios métodos que pueden ser igual de válidos: /etc/init.d /iptables#!/bin/bashRETVAL=0# Funcion iniciar iptablesstart() { echo -n "Iptables insertadas..." sh /etc/iptables.conf RETVAL=0}# 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}case $1 inIES G.Nazareno | IAIG | Febrero 2011 Pag. 5/12
  6. 6. Squid3 en Debian Squeeze Arturo Borrero Gléz. start) start ;; stop) stop ;; restart) stop start ;; status) /sbin/iptables -L /sbin/iptables -t nat -L RETVAL=0 ;; *) echo "Sitaxis: iptables{start|stop|restart|status}" RETVAL=1esacexitEste script debe tener permisos de ejecución para root.Para que se inicie automáticamente en el arranque del sistema, debemos hacer lo siguiente:root@nostromo:~# update-rc.d /etc/init.d/iptables defaultsEsto generará que debian introduzca automáticamente el fichero en la configuración de arranque delsistema, 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 muchosproblemas (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
  7. 7. Squid3 en Debian Squeeze Arturo Borrero Gléz. PRUEBAS DE FUNCIONAMIENTODe un mismo movimiento voy a probar que Squid3 realmente funciona de manera transparente paralos 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 deadvertencia/error. Dado que usé telnet y no un navegador, el http/html es devuelto plano, sin nadaque lo procese e interprete. He recortado la etiqueta <style> para mayor comprensión:root@goku:~# telnet www.youtube.com 80Trying 74.125.230.163...Connected to youtube-ui.l.google.com.Escape character is ^].GET http://youtube.com/HTTP/1.0 403 ForbiddenServer: squid/3.1.6Mime-Version: 1.0Date: Sun, 13 Feb 2011 20:00:59 GMTContent-Type: text/htmlContent-Length: 3012X-Squid-Error: ERR_ACCESS_DENIED 0Vary: Accept-LanguageContent-Language: enX-Cache: MISS from localhostX-Cache-Lookup: NONE from localhost:3128Via: 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: <ahref="http://youtube.com/">http://youtube.com/</a></p><blockquote id="error"><p><b>Access Denied.</b></p></blockquote><p>Access control configuration prevents your request from being allowed at this time. Please contact your serviceprovider if you feel this is incorrect.</p><p>Your cache administrator is <a href="mailto:webmaster?subject=CacheErrorInfo%20-%20ERR_ACCESS_DENIED&amp;body=CacheHost%3A%20localhost%0D%0AErrPage%3AIES G.Nazareno | IAIG | Febrero 2011 Pag. 7/12
  8. 8. Squid3 en Debian Squeeze Arturo Borrero Gléz.%20ERR_ACCESS_DENIED%0D%0AErr%3A%20%5Bnone%5D%0D%0ATimeStamp%3A%20Sun,%2013%20Feb%202011%2020%3A00%3A59%20GMT%0D%0A%0D%0AClientIP%3A%2010.0.0.1%0D%0A%0D%0AHTTP%20Request%3A%0D%0AGET%20%2F%20HTTP%2F0.9%0A%0D%0A%0D%0A">webmaster</a>.</p><br></div><hr><div id="footer"><p>Generated Sun, 13 Feb 2011 20:00:59 GMT by localhost (squid/3.1.6)</p><!-- ERR_ACCESS_DENIED --></div></body></html>Connection closed by foreign host.Esta petición ha generado el siguiente log de squid3:root@nostromo:~#tail /var/log/squid3/access.log[...]1297627259.432 0 10.0.0.1 TCP_DENIED/403 3368 GET http://youtube.com/ - NONE/- text/htmlViendo el mensaje de log, podriamos pensar que no sería demasiado complicado realizar unpequeño script que lo leyera y pusiera de forma visible quién ha estado intentando acceder acontenido 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 heintentado 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, yademás se ha generado el siguiente mensaje en el log de squid3:root@nostromo:~#tail /var/log/squid3/access.log[...]1297630445.737 304 127.0.0.1 TCP_DENIED_REPLY/403 5279 GEThttp://trailers.apple.com/movies/disney/wall-e/wall-e-clip-magnet_h.320.mov -DIRECT/77.67.20.161 text/htmlIES G.Nazareno | IAIG | Febrero 2011 Pag. 8/12
  9. 9. Squid3 en Debian Squeeze Arturo Borrero Gléz. ALGUNAS CAPTURAS DE PANTALLAIES G.Nazareno | IAIG | Febrero 2011 Pag. 9/12
  10. 10. Squid3 en Debian Squeeze Arturo Borrero Gléz.IES G.Nazareno | IAIG | Febrero 2011 Pag. 10/12
  11. 11. Squid3 en Debian Squeeze Arturo Borrero Gléz.IES G.Nazareno | IAIG | Febrero 2011 Pag. 11/12
  12. 12. Squid3 en Debian Squeeze Arturo Borrero Gléz. CONCLUSIONE S He podido comprobar que Squid es un software extremadamente potente. Antes de trabajarcon él, no conocía ningún equivalente. Tiene unas inmensas opciones de configuración, algunas deellas 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 quede 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 deeste modo, pues mucho mejor.En definitiva, pienso que es una práctica muy pequeña y rápida para las posibilidades que realmenteofrece Squid. ENLACES y REFERENCIAS • http://wiki.squid-cache.org/ConfigExamples • http://www.juanfelipe.net/node/30 • http://www.linofee.org/~jel/proxy/Squid/accesslog.shtml • http://squidproxy.wordpress.com/2007/11/17/how-cachable-is-google-part-2- 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.comIES G.Nazareno | IAIG | Febrero 2011 Pag. 12/12

×