Squid es un servidor proxy de código abierto muy popular que mejora el rendimiento de una red al almacenar en caché contenido web comúnmente solicitado. Actúa como intermediario entre clientes y servidores, permitiendo funciones como control de acceso, filtrado de contenido, registro de tráfico y anonimato. Squid también soporta autenticación básica mediante archivos de usuarios y contraseñas y la agrupación de usuarios en grupos con diferentes permisos.
1. Resumen Squid
La palabra proxy significa intermediario en inglés. Un proxy, en una red informática, es un
programa o dispositivo que realiza una acción en representación de otro, esto es, si una
hipotética máquina A solicita un recurso a una C, lo hará mediante una petición a B; C
entonces no sabrá que la petición procedió originalmente de A. Está situación estratégica de
punto intermedio suele ser aprovechada para soportar una serie de funcionalidades:
proporcionar caché, control de acceso, registro del tráfico, prohibir cierto tipo de tráfico
etcétera.
De ellos, el más famoso es el servidor proxy web (comúnmente conocido solamente como
«proxy»).Intercepta la navegación de los clientes por páginas web, por varios motivos posibles:
seguridad, rendimiento, anonimato, etc.
Tipos de proxy:
• proxy local: En este caso el que quiere implementar la política es el mismo que hace la
petición. Por eso se le llama local. Suelen estar en la misma máquina que el cliente que hace
las peticiones. Son muy usados para que el cliente pueda controlar el tráfico y pueda
establecer reglas de filtrado que por ejemplo pueden asegurar que no se revela información
privada (Proxys de filtrado para mejora de la privacidad).
• Proxy externo: El que quiere implementar la política del proxy es una entidad externa. Por
eso se le llama externo. Se suelen usar para implementar cacheos, bloquear contenidos,
control del tráfico, compartir IP, etc.
Ventajas En general (no sólo en informática), los proxies hacen posible:
• Control: sólo el intermediario hace el trabajo real, por tanto se pueden limitar y restringir los
derechos de los usuarios, y dar permisos sólo al proxy.
• Ahorro. Sólo uno de los usuarios (el proxy) ha de estar preparado para hacer el trabajo real.
Con estar preparado queremos decir que es el único que necesita los recursos necesarios para
hacer esa funcionalidad. Ejemplos de recursos necesarios para hacer la función pueden ser la
capacidad y lógica de cómputo o la dirección de red externa (IP).
• Velocidad. Si varios clientes van a pedir el mismo recurso, el proxy puede hacer caché:
guardar la respuesta de una petición para darla directamente cuando otro usuario la pida. Así
no tiene que volver a contactar con el destino, y acaba más rápido.
• Filtrado. El proxy puede negarse a responder algunas peticiones si detecta que están
prohibidas.
• Modificación. Como intermediario que es, un proxy puede falsificar información, o
modificarla siguiendo un algoritmo.
• Anonimato. Si todos los usuarios se identifican como uno sólo, es difícil que el recurso
accedido pueda diferenciarlos. Pero esto puede ser malo, por ejemplo cuando hay que hacer
necesariamente la identificación.
2. Desventajas
En general (no sólo en informática), el uso de un intermediario puede provocar:
• Abuso. Al estar dispuesto a recibir peticiones de muchos usuarios y responderlas, es posible
que haga algún trabajo que no toque. Por tanto, ha de controlar quién tiene acceso y quién no
a sus servicios, cosa que normalmente es muy difícil.
• Carga. Un proxy ha de hacer el trabajo de muchos usuarios.
• Intromisión. Es un paso más entre origen y destino, y algunos usuarios pueden no querer
pasar por el proxy. Y menos si hace de caché y guarda copias de los datos.
• Incoherencia. Si hace de caché, es posible que se equivoque y dé una respuesta antigua
cuando hay una más reciente en el recurso de destino. En realidad este problema no existe con
los servidores proxy actuales, ya que se conectan con el servidor remoto para comprobar que
la versión que tiene en cache sigue siendo la misma que la existente en el servidor remoto.
• Irregularidad. El hecho de que el proxy represente a más de un usuario da problemas en
muchos escenarios, en concreto los que presuponen una comunicación directa entre 1 emisor
y 1 receptor (como TCP/IP).
SQUID permite realizar autenticación mediante diferentes métodos, Basic, Digest y NTLM.
Estos métodos especifican como SQUID recibe el nombre de usuario y la clave desde los
clientes. Por cada método, SQUID provee varios módulos de autenticación (helpers) que serán
los encargados de realizar la validación (NCSA, PAM, SASL, YP y SMB). Aquí veremos como
configurar Basic utilizando el modulo NCSA.
Creación de usuarios
Desde la línea de comandos, creamos un archivo en el directorio /etc/squid/claves: #touch
/etc/squid/claves y luego los usuarios:
# htpasswd2 /etc/squid/claves usuario1
Luego se solicitaría la clave y la confirmación de la misma. Hay que tener en cuenta que
htpasswd2
Debe estar instalado (pertenece a Apache2).
5
Configuración
En el archivo /etc/squid/squid.conf se debe configurar el tipo de autenticación (basic), la ruta
del modulo NCSA y la ruta del archivo que contiene los usuarios y sus passwords.
auth_param basic program /usr/sbin/ncsa_auth /etc/squid/claves
3. Luego se debe crear una acl que al ser invocada en una regla de control de acceso solicitara el
usuario y la clave: acl con_clave proxy_auth REQUIRED Para comprender como se utiliza la acl
que definimos veremos un ejemplo. Si se desea que todas las
Personas que accedan al sitio www.ociosos.com ingresen un usuario y clave, y que para el
resto de las paginas no haya restricción alguna:
acl all src 0.0.0.0/0.0.0.0
acl ocio dstdomain www.ociosos.com
acl con_clave proxy_auth REQUIRED
http_access allow ocio con_clave
http_access allow all
Si en cambio, quisieramos que para navergar por el proxy todos los usuarios de la red tengan
que ingresar usuario y clave, dentro de las reglas de control de accesso basta con poner:
http_access allow all con_clave
La combinación de diferentes acl nos otorga gran flexibilidad, teniendo en cuenta que
agregando a cualquier regla de control de accesso la acl con_clave obligamos a validar contra
SQUID para permitir el acceso a un determinado sitio, ip, en alg´un rango horario, etc.
Autenticación por grupos La autenticación que vimos en el punto anterior tiene una
deficiencia, supongamos que quisiéramos subdividir un cierto grupo de usuarios para que
tengan diferentes permisos de acceso a sitios web. Por ejemplo, el grupo de comunicación
deberá poder acceder a leer los diarios, no así el grupo de desarrollo que solo tiene permitido
ingresar al sitio www.lawebdelprogramador.com. Con lo visto anteriormente no podríamos
hacerlo ya que tenemos todos los usuarios y sus correspondientes claves en un mismo archivo.
Para solucionar este inconveniente deberíamos realizar pequeñas modificaciones a las listas de
Control de acceso. La definición de los usuarios con sus claves ser´a exactamente igual que en
el punto anterior, a diferencia que ahora podremos definir en un nuevo archivo los usuarios
que pertenecen a un determinado grupo. Con el siguiente ejemplo quedaría mas claro.
acl all src 0.0.0.0/0.0.0.0
acl diario dstdomain www.litoral.com.ar
acl web_programar dstdomain www.lawebdelprogramador.com
acl con_clave proxy_auth REQUIRED
acl comunicacion proxy_auth ‘‘/etc/squid/comunicacion’’
acl desarrolladores proxy_auth ‘‘/etc/squid/desarrolladores’’
http_access allow desarrolladores web_programar
4. http_access allow comunicacion diario
Cada usuario que pertenezca a un grupo deber´a encontrarse en una ´unica linea ya sea para el
grupo de comunicación ( /etc/squid/comunicacion) como para el grupo de desarrolladores
(/etc/squid/desarrolladores
). Y también debería estar creado mediante el comando htpasswd2 al igual que en el punto
anterior
en /etc/squid/claves.
En conclusi´on, todos los usuarios por m´as que pertenezcan a diferentes grupos deben ser
creados en
un archivo utilizando htpasswd2, la divisi´on de grupos se realizar´a guardando los nombres de
los
usuarios en diferentes archivos, uno por linea y luego se aplicar´an como se vio en el ejemplo
mediante
las acl y las reglas de control de acceso (http_access ).
6
3.5. Verificaci´on de logs
SQUID almacena en el directorio /var/log/squid informaci´on sobre los accesos, di´alogos con
otros
servidores SQUID, etc. Existen varios archivos de logs, el que nos brinda informaci´on sobre el
acceso
al servidor es access.log. Cuando se entrega a un cliente un objeto que se encontraba
almacenado, se
produce un HIT y si el objeto debe ser consultado hacia internet entonces es un MISS.
El analisis de los logs por lo general se realiza con herramientas de software independientes de
SQUID.
Dos de las m´as utilizadas son SARG (Squid Analysis Report Grpahics) y Webalizer, las mismas
generan
reportes gr´aficos con estad´ısticas en un archivo html. Son una excelente herramienta para
llevar un
control detallado sobre la utilizaci´on de la navegaci´on web.
3.6. Un ejemplo simple
Una servidor proxy simple podr´ıa definirse de la siguiente manera:
5. Listas de control de acceso:
#---parametros globales---#
visible_hostname squid1
http_port 3128
icp_port 3130
cache_dir ufs /var/cache/squid 400 16 256
#---consulta de cach´es---#
#cache_peer <host> <type> <http_port> <icp_port> <options>
cache_peer 192.168.1.252 parent 3128 7 no-query default
cache_peer 192.168.1.108 sibling 3128 3130 proxy-only
#--- ACL---#
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl webserver dst 192.168.1.10/255.255.255.255
acl todalared src 192.168.1.0/255.255.255.0
#--- Reglas de control de acceso---#
http_access allow manager localhost
http_access deny manager
never_direct allow !webserver
http_access allow todalared
http_access deny all
icp_access allow all
Squid es un sistema de admistracion que está bajo la distribución de Linux este nos permite
tener un control de usuarios conectados a la red local Una de las funciones principales de un
6. servidor proxy es actuar como cache de contenido principalmente Web (http). Esto mejora el
desempeño de una red consumiendo menos recursos, debido que frente a un Nuevo pedido
de un sitio que ya ha sido realizado, en vez de generar tráfico hacia internet se entrega El sitio
cuyo contenido se encuentra almacenado en el servidor.
Squid es el software para servidor Proxy más popular y extendido entre los sistemas operativos basados
sobre UNIX®. Es muy confiable, robusto y versátil. Al ser software libre, además de estar disponible el
código fuente, está libre del pago de costosas licencias por uso o con restricción a un uso con
determinado número de usuarios.