Académique Documents
Professionnel Documents
Culture Documents
Qu es Squid?
Squid escucha las peticiones que hacen los usuarios de los objetos de internet, se los entrega y se guarda una copia. Es un proxy. A esa copia se le denomina cache. Por lo tanto, Squid es un proxy-cache. Es software libre. Muy configurable Rpido y eficaz.
Miguel Angel Nieto miguelangel@irontec.com
Desde Irontec apostamos por el Software Libre por su alta fiabilidad y flexibilidad. Gracias a las posibilidades que nos ofrece el libre acceso a las aplicaciones y a su cdigo, podemos desarrollar proyectos de gran complejidad de forma rpida y a precios competitivos. El Software Libre proporciona a muchas de nuestras soluciones una potencia difcilmente alcanzable por sistemas privativos en plazos y en costes. Representa para Irontec un modelo ms justo para con la sociedad en la que vivimos.
Miguel Angel Nieto miguelangel@irontec.com
Existen dos versiones en desarollo. Stable-2.6 y Testing3.0 La pgina oficial se encuentra en http://www.squid-cache.org/ Se integra con otras aplicaciones, como squidguard. Tiene muchos modos de funcionamiento. Cache, Inverso, Transparente...
Router
Proxy-cache Normal
Usuarios
Internet
Router
Proxy-cache Inverso
Servidor web
Miguel Angel Nieto miguelangel@irontec.com
Router
Proxy-cache Transparente
Usuarios
Filtro de contenidos
Bloquear el acceso a contenido por categoras.
Firewall de seguridad
Es una aplicacin de seguridad restrictiva, permitiendo la salida a equipos o subredes y denegandolo a otras.
Annimo
Provee acceso web annimo.
La biblia
Squid es muy configurable. Tiene muchas opciones. Es imposible conocer todas. Podemos recurrir a la biblia. http://www.visolve.com/squid/squid30/contents.php Todas las opciones posibles con ejemplos. Divido en categoras. Ser necesario tenerlo a mano siempre que se tenga duda.
Miguel Angel Nieto miguelangel@irontec.com
Instalacin
Se puede hacer por cdigo fuente o descargando el binario con las herramientas de la distribucin seleccionada. El binario pude no contener todas las opciones que necesitamos. Al compilar es necesario indicar que caractersticas deseamos. Tenemos una lista con ./configure --help
Miguel Angel Nieto miguelangel@irontec.com
--prefix=PREFIX Donde queremos que se dejen los ficheros (por defecto /usr/local/squid) --enable-ssl Soporte para https. --enable-default-err-language=es En que idioma queremos los mensajes de error. --enable-linux-netfilter Habilita el uso de iptables para proxys transparente. --enable-storeio=aufs,coss,diskd,ufs Habilitamos los distintos tipos de formas para almacenar los ficheros. --enable-basic-auth-helpers="LDAP" Habilitamos la autenticacin ldap.
Datos bsicos
El fichero de configuracin se encuentra en /etc/squid/squid.conf Ya esta configurado para funcionar, contiene multiples ejemplos y explicaciones. Los logs se guardan en /var/log/squid Los mensajes de error a la hora de arrancar o parar el servicio se encuentran en /var/log/syslog o /var/log/messages.
Miguel Angel Nieto miguelangel@irontec.com
Pregunta
Respuesta
Configuracin bsica
Reiniciamos squid para que cargue la nueva configuracin. /etc/init.d/squid restart Configuramos firefox para que use 127.0.0.1 como proxy.
Miguel Angel Nieto miguelangel@irontec.com
Logs de squid
cache.log Aqu se van guardando los mensajes relacionados con el sistema de almacenamiento y cache.
2007/07/02 17:40:21| Local cache digest enabled; rebuild/rewrite every 3600/3600 sec 2007/07/02 17:40:21| Rebuilding storage in /var/cache/squid (CLEAN) 2007/07/02 17:40:21| Using Least Load store dir selection 2007/07/02 17:40:21| Set Current Directory to /var/cache/squid
store.log Se almacena informacin sobre los objetos almacenados. Dentro de los campos mas importantes tenemos la segunda columna, llamada TAG, que puede tener los siguientes valores: SWAPIN (la cache existia en el disco duro y lo ha leido en memoria), SWAPOUT (guardado en disco duro) or RELEASE (eliminado de la cache)
ACL's
Las listas de control de acceso nos permite definir distintos parmetros para conceder o denegar accesos a nuestro proxy. En el anterior ejemplo donde montabamos un proxy bsico pudimos ver un primer ejemplo de una lista de acceso: acl todos src 0.0.0.0/0.0.0.0 Su estructura es la siguiente: acl nombre regla parmetros En el ejemplo, la acl se llama all, con la regla src (source) y como parmetro una ip y su mscara de red. Otros ejemplos de acl:
acl comer time M T W H F 13:00-14:00 acl dest dst 192.168.2.1/32 acl mp3 urlpath_regex -i /.mp3$ acl navegador browser Explorer acl debian url_regex debian
ACL's
Las acl por si mismas no hacen nada, ya que no decimos si aceptamos o negamos dichas acl. Es necesario denegar o aceptar las ACLs. Para ello se utiliza http_access y http_deny: http_access deny comer mp3 explorer http_access alow todos Es muy importante el orden en el que se establecen las reglas de permiso o denegacin.
ACL's
Hay que tener especial cuidado con:
Olvidarnos establecer las ordenes de denegacin. Establecer muchas ordenes allow, sin ninguna deny no sirve de nada... da lo mismo que permitamos una serie de ips u horarios, por ejemplo, si luego no denegamos todo lo demas. No denegar nada, implica aceptar todo. Las reglas se leen de arriba abajo. Si en la primera regla tenemos un allow todos que permite todo y el deny para mp3 lo ponemos en la siguiente linea, esta no se tendr en cuenta. Ya que primero se lee el alow y una vez que tenemos el mp3 en nuestras manos, se lee el deny mp3. Lo normal es primero denegar y luego permitir. Por defecto ninguna ip tiene acceso al proxy. Debe establecerse antes de nada una ip o rango de ips que podran hacer uso del proxy.
Ejercicios ACL
Ejercicios ACL
Reglas de acceso:
http_access allow amigos http_acess allow subred !finde !micro !port http_access deny all
Miguel Angel Nieto miguelangel@irontec.com
Debbuging de ACL's
debug_options ALL,1 33,2 Guarda en cache.log un log de los acl que se acceden y por qu la conexin se acepta o se rechaza. Es muy util cuando tenemos muchos http_access y http_access deny, para saber en cual se detiene un intento de acceso.
Con filtrar por ip y mac es suficiente? Qu problemas tiene? Qu soluciones podemos encontrar?
Control de usuarios
Es posible conectarse a servidores AD, LDAP, Samba3, autenticacin ncsa... La autenticacin se hace mediante programas externos a los que llama squid.
NCSA
Los usuarios y claves se guardan en un fichero, como el htpasswd de apache. Es la opcin ms sencilla si tenemos pocos usuarios. El fichero de claves se crea con htpasswd El programa que har la autenticacin se encuentra en: /usr/lib/squid/ncsa_auth A configurar! Usuario: pepe Clave: pepe
Configuracin NCSA
debianldap:~# htpasswd -c /etc/squid/passwd pepe debianldap:~# chmod o+r /etc/squid/passwd Le indicamos la ruta del programa y las claves. auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd Indica el nmero de procesos de autenticacin a crear. auth_param basic children 5 El texto que aparecer al pedirnos usuario y clave. auth_param basic realm Squid proxy-caching web server El tiempo que tardar en pedirte de nuevo la clave. auth_param basic credentialsttl 2 hours acl passwd proxy_auth REQUIRED http_access allow yo passwd
Miguel Angel Nieto miguelangel@irontec.com
auth_param basic program /usr/lib/squid/ldap_auth -R -b "dc=servidornt,dc=local" -D "cn=administrador,cn=users,dc=servidornt,dc=local" -w "clave" -f sAMAccountName=%s -h 192.168.0.1 -b indicamos el nombre de dominio que tiene el servidor. servidornt.local -D indicamos con que usuario se conectar squid para comprobar los usuarios y claves -w la clave del usuario con el que nos conectaremos al AD -f %s es el usuario que escribiremos al hacer login en squid. Se guarda en la variable "s" y esta ser la que se compruebe en el AD. -h la ip del servidor controlador de dominio
Miremos los logs de access. Son infumables, busquemos otra forma de visualizar los datos.
Caractersticas
Permite listar las pginas accedidas. Logs tanto por IP como por usuario. Permite saber cuales son las pginas ms visitadas, y la cantidad de datos cacheados. Despus de un par de das de estadsticas nos puede ayudar a configurar mejor nuestro squid. La instalacin es sencilla.
Pregunta
Ya sabemos hacer listas de control de acceso, pero... Qu pasa si queremos filtrar miles de pginas? Con que problemas nos encontramos? Soluciones?
Control de categorias
Existen unas bases de datos con miles de pginas web ordenadas por categoras. Podemos usar esas bases de datos para permitir y denegar accesos a nuestros usuarios a miles de pginas con una sola linea. Con una acl de dstdomain necesitariamos dos vidas para filtrar todo el porno de internet. Squidguard nos ayudar en esta tarea.
Miguel Angel Nieto miguelangel@irontec.com
Qu necesitamos?
Una lista en formato texto con millones de pginas categorizadas. Que se actualize constantemente. Que tenga un precio razonable o incluso que sea gratuito. Que sea compatible con squidguard.
http://squidguard.shalla.de/shallalist.html Dispone de 1.400.000 entradas. Descargamos y descomprimimos el tar.gz en /var/squid/db Abrimos el fichero de configuracin de /etc/squid/squidGuard.conf
Configuracin de SquidGuard
dbhome /var/squid/db logdir /var/log/squid/squidGuard.log dest porn { domainlist porn/domains urllist porn/urls log pornaccesses } acl { default { pass !porn all redirect http://localhost/block.html } }
Una vez configurado squidGuard.conf es necesario crear las bases de datos que hemos configurado. Si ejecutamos squidGuard -C all nos crear la base de datos de porn. Configuramos squid para que use squidGuard. Aadimos:
redirect_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf
Ejercicio
Crear una nueva regla para pginas relacionadas con las drogas. No permitir el acceso. Guardar los logs de acceso en logdrogas. Permitirme a mi ip el acceso a las drogas y al porno. Para buscar ayuda:
http://www.squidguard.org/Doc/extended.html
Solucin
dbhome /var/squid/db logdir /var/log/squid
porn/domains porn/urls
} acl { yo { pass all } default { pass !porno !drogas all redirect http://www.disney.com } } Miguel Angel Nieto miguelangel@irontec.com
Pregunta
Dnde
Respuesta
Accesos continuos al disco duro. Ancho de banda. Capacidad de procesamiento. Memoria RAM.
Sistema de ficheros
El mayor cuello de botella es la velocidad de escritura y lectura del disco duro. Un solo proceso de squid se tiene que encargar de todo. Existen diferentes algoritmos para llevar a cabo esta tarea, cada cual con sus pros y contras. Vamos a ver: ufs,aufs,diskd,coss,null Por defecto squid trabaja con ufs. No es el que mejor Miguel Angel Nieto rendimiento nos puede dar.
miguelangel@irontec.com
UFS
Es el sistema por defecto de squid. Es el ms lento. Todo el proceso de lectura, escritura, recepcin de peticiones, envo de objetos, etc. se hace con un solo demonio. Muchos accesos simultaneos mediante este sistema puede producir cuellos de botella considerables.
AUFS
Sobre la base es exactamente lo mismo que ufs. La diferenca es que lanza multiples demonios para la lectura, escritura, borrado, etc. Aufs consume una gran cantidad de procesador y memoria cuando se ve ante una carga de trabajo alta.
DISKD
Tambien basado en ufs y aufs. La diferencia en este caso es que solo levanta un demonio extra. Es una solucin intermedia entre ufs y aufs.
COSS
Ofrece un mayor rendimiento que el resto de opciones. Utiliza un sistema de ficheros especial y optimizado para squid. Toda la informacin se guarda en un solo fichero. Se escriben en bloques de datos. No es del todo estable ni recomendable su uso.
NULL
No guarda ninguna cache en el disco duro. Aunque no lo parezca tiene utilidad. En sistemas de proxy annimos.
Ejercicio
Configurar en nuestro proxy un cache en /var/cache/aufs de formato... aufs Para ello utilizaremos la biblia.
Solucin
m r / var / cache/ auf s kdi chm pr oxy: pr oxy / var / cache/ auf s od cache_ di r auf s / var / cache/ auf s 512 16 256 Reiniciar squid
cache_di r si st em di r ect or i o m es l evel 1 l evel 2 a byt
Configurar coss
Coss utiliza su propio sistema de ficheros, por lo que la configuracin es algo diferente.
cache_dir coss /var/cache/coss 512 max-size=16384 Crear un fichero llamado stripe en /var/cache/coss donde se almacenara el sistema de ficheros. Ser de un mximo de 512 megas y los objetos que se almacenen tendrn un mximo de tamao de 16 megas.
An con unos cuantos aos de desarrollo, se encuentra en una fase beta. Al almacenarse todo en un solo fichero, debemos tener en cuenta las limitaciones del propio sistema de ficheros que lo contiene. Por ejemplo, si es fat32 estaramos limitados a 4 GB. El tamao de la cache que squid guarda en memoria antes de escribirla al disco es 1 MB. Se cambia con la opcin enable-coss-membuf-size. Una vez que el fichero est completo, empezar desde el principio sobreescribiendo los datos que encuentre.
Estas polticas son las que definirn que objetos se mantienen en cache o memoria y cuales son eliminados dejando espacio para nuevos objetos. Estas polticas se aplicarn a cualquier cache_dir que configuremos despus de esta poltica.
Resumen
LRU
Los menos accedidos son los primeros en ser eliminados. Los objetos mas solicitados permanecen en cache, sin importar el tamao. Un objeto grande impide que se cacheen muchos pequeos. Los objetos pequeos ms solicitados permanecen en cache. Tiene menos eficiencia ya que descarga objetos grandes aunque se utilicen amenudo.
LFUDA
GDSF
Ejercicio
Configurar nuestro squid para poner el algoritmo LFUDA, tanto en la cache de disco como en la de memoria.
Solucin
Maximum object size (en disco o memoria) Con esta directiva se indica que los ficheros con un tamao mayor del indicado (en kilobytes) no se guardaran en el disco duro. Por defecto, si no se indica nada, son 4 megas. Ejemplo: maximum_object_size 2000 KB | maximum_object_size_in_memory 2000 KB
Minimum object size (en disco o memoria) Los objetos de menor tamao no sern guardados en el disco duro. El valor es especficado en kilobytes. Por defecto el valor es 0. Ejemplo: minimum_object_size 2000 KB | minimum_object_size_in_memory 2000 KB
Cache Mem Cantidad de memoria ram que ser utilizada como cache. En la memoria ram se cachean los objetos descargados directamente desde el servidor origen y desde los servidores hermanos, aumentando de una forma considerable la velocidad de respuesta si estos se piden muy amenudo. En cambio, no cachea en memoria los objetos leidos del disco duro. Un valor entre 8 y 32 megas es los recomendable, pero depender de la cantidad de memoria que tengamos en el sistema. Ejemplo: cache_mem 8 MB
Miguel Angel Nieto miguelangel@irontec.com
Refresh pattern
Tenemos un proxy casi funcional, pero no hemos indicado que objetos y como deben cachearse. Tenemos un proxy cojo.
Refresh pattern
Nos permite indicar, mediante expresiones regulares la duracin de un objeto en cache. Sirve para objetos que no se indica su caducidad (la mayora) por parte del webmaster. Se deben indicar todos los objetos que deseemos cachear. La lista puede ser muy larga, lo mejor es copy/paste y modificar los valores a nuestro gusto.
Los objetos con expire (una fecha de caducidad) no pasan por nuestro refresh pattern. Es el webmaster el que debe indicarlo en su cdigo. Si la fecha de expire no se ha superado, squid coge el objeto de la cache. Si la fecha de expire se ha superado, squid consulta la fecha de ultima modificacion. Si no hay modificacin, vuelve a coger el objeto de la cache.
Terminologa
Objeto fresco: el objeto no ha caducado, por lo que squid puede seguir cogiendolo de la cache. Objeto caducado: el objeto ha caducado, squid debe borrar el objeto de la cache y pedir una nueva versin al servidor web.
Aqu entra en juego nuestros refresh_pattern. refresh_pattern \.zip$ 2880 50% 28800 \.zip hace referencia a los ficheros terminados en .zip. 2880 es el tiempo mnimo (en minutos) que puede ser consideraro fresco (no caducado). 50% se calcula sobre el tiempo de ltima modificacin. Si este es 6 das, su 50% sern 3. 28800 es el tiempo mximo que podr ser considerado fresco.
Ejercicio
Buscad una lista grande de refresh pattern para nuestro squid. Ms adelante podremos configurarlo a nuestro gusto partiendo de esa base.
Solucin
http://www.rediris.es/si/cache/refrescos.es.html
El siempre recurrente problema del ancho de banda. Usuarios que bajan videos, imgenes de Cds, mp3, etc. Cmo podemos controlar el uso de ancho de banda con squid?
DELAY POOLS
Delay pool
Imaginemos (por qu no se dibujar) un pozo lleno de agua, con dos tuberas Una pequea por la que entra agua. Otra grande por la que la gente coge agua. Si la gente se pasa cogiendo agua, el pozo se vaciar y solo podrn coger lo que entre por la tubera pequea. En lugar de agua, tendremos ancho de banda.
Se compone de un solo pozo. Se limita de manera global a todos los usuarios, sin importar el uso que estos hagan ni como este montada la lan. Es la manera mas sencilla.
Se compone de un pozo grande que alimenta 256 pozos mas pequeos de clase 1 (red de clase C). Es posible controlar el uso que le dan 256 clientes. Un solo cliente no puede dejar sin ancho de banda al resto.
Es un pozo grande, que alimenta 256 pozos de clase 2 y estos a su vez 256 pozos de clase 1. En total, 65,536 pozos (una red de clase B). Se utilizan en redes muy grandes.
Hacemos que la dmz y los servidores no pasen por las delay pools
delay_access 1 allow !servidores !dmz all delay_access 1 deny all
Jerarquias de caches
Un solo servidor para miles de clientes? Problemas de rendimiento? Hay que pedir ayuda a la familia.
Hermanos y padres
Un proxy puede tener hermanos (sibling) y padres (parent). Se utiliza el protocolo ICP de comunicacin entre proxys. Si un proxy no tiene un objeto lo pide al hermano. Si el hermano lo tiene se lo entrega, si no le devuelve error. Si recibe un error, se lo pide al padre y este lo pedir a internet en caso de que tampoco lo tenga. http://www.rfc-es.org/rfc/rfc2187-es.txt
Configuracin de jerarquias
Hermano 1
icp_port 3130 // puerto icp cache_peer 172.16.112.131 parent 3128 3130 default // definimos cache padre. Puerto proxy 3128 y puerto icp 3130 cache_peer 172.16.112.136 sibling 8081 3130 proxy-only // definimos cache hermano. Puerto proxy 8081 y puerto icp 3130 icp_access allow all // permitimos acceso icp a todos
Hermano 2
icp_port 3130 // puerto icp cache_peer 172.16.112.131 parent 3128 3130 default // definimos cache padre. Puerto proxy 3128 y puerto icp 3130 cache_peer 172.16.112.135 sibling 8080 3130 proxy-only // definimos cache hermano. Puerto proxy 8081 y puerto icp 3130 icp_access allow all // permitimos acceso icp a todos
Padre
icp_port 3130 // puerto icp icp_access allow all // permitimos acceso icp a todos
Esquema de jerarquias
172.16.112.135 Cache: 3128 ICP: 3130
Pregunta
Fin