Configuración básica de Squid

En este sección veremos una introducción a los archivos de configuración de Squid, así como la configuración de los parámetros generales para una configuración básica de un proxy cache con Squid.

Introducción al archivo de configuración de Squid

Squid mantiene sus archivos de configuración en el directorio /etc/squid3/. El archivo principal de configuración de squid es /etc/squid3/squid.conf.

El archivo de configuración de squid /etc/squid3/squid.conf incluye todas las directivas de configuración disponibles, la mayoría están comentadas y tienen un valor predefinido, estos valores predefinidos son óptimos para la mayoría de las instalaciones y solo se tendrán que cambiar en caso de que la configuración lo requiera, en algunos otros casos se descomentan las directivas aun cuando se deje el valor predeterminado con propósitos de hacer explicitas las configuraciones.

Ya que no existe página de manual para el archivo de configuración squid.conf, en su lugar, la información de las directivas de configuración están incluidas como comentarios en el mismo archivo squid.conf se recomienda que antes de que haga cambios en el archivo squid.conf haga una copia de respaldo para que la pueda usar como manual de referencia.

# cp /etc/squid3/squid.conf{,.defaults}
[Importante] Importante

Recuerde actualizar el archivo con los valores default cada vez que actualice la versión de squid.

En varios documentos en la red mencionan que al descomentar una linea no se debe de dejar un espacio entre el borde y la directiva, por ejemplo así:

  http_port 192.168.221.254:3128

Por lo que deben de quedar sin ningún espacio así:

http_port 192.168.221.254:3128

Yo he probado con espacios y sin espacios en varias configuraciones y he tenido el mismo resultado, con las dos el servicio squid arranca sin reportar problemas, quizás esto sucedía en versiones anteriores de squid, dicho esto nos apegaremos a esa practica de no dejar espacios antes de las opciones, también se recomienda que no deje espacios en blanco al final de las líneas que edite.

Validando los archivos de configuración de Squid

Cada vez que se modifique el archivo squid.conf se recomienda correr el programa squid con el parámetro -k parse para realizar una revisión de la sintaxis del archivo, por ejemplo:

# squid3 -k parse

Si no regresa algún mensaje entonces significa que el archivo de configuración está correctamente configurado.

# squid3 -k parse
2008/05/12 18:08:19| parseConfigFile: line 74 unrecognized:
 'htttp_port 192.168.1.101:8080'

Donde dice que la linea 74 del archivo squid.conf no reconoce la opción htttp_port.

Solo cuando la validación de la configuración este correcta puede iniciar o reinicar el proceso squid3.

Configuración de parámetros de red

El parámetro http_port define el puerto en el que Squid escuchará peticiones HTTP de los clientes. Esta es un parámetro requerido, el puerto predefinido de Squid es el 3128, por ejemplo:

# http_port 3128
[Nota] Nota

En este ejemplo, squid abrirá el puerto TCP 3128 en todas las direcciones IP del sistema, puede usar netstat -pltn.

Si el sistema es multi-homed, es decir, tiene más de una interfaz de red y desea limitar en que redes dar el servicio de proxy, por ejemplo, para que solo escuche peticiones en la dirección IP 192.168.221.254 asignada a la interfaz que esta conectada a la LAN use:

http_port 192.168.221.254:3128

Debe recargar la configuración del proxy para que este cambio tome efecto.

La directiva visible_hostname define el nombre de host con el que squid se anunciará, y también será el nombre que aparecerá en las paginas de error. Defina un nombre valido, por ejemplo:

visible_hostname fwproxy.example.com

Squid por default usa los servidores DNS definidos en el archivo /etc/resolv.conf a menos que se definan los servidores DNS usando la directiva dns_nameservers, si no desea que squid use los servidores DNS del sistema defina la lista de servidores, por ejemplo:

dns_nameservers 192.168.221.253 192.168.221.252

Se recomienda que el servidor proxy squid tenga acceso a uno o más servidores DNS cache para acelerar el servicio de resolución de nombres puede instalar un servidor BIND en modo cache..

Configuración de parámetros administrativos

El parámetro cache_effective_user define el nombre del usuario con el que Squid operará, por ejemplo:

cache_effective_user proxy
[Importante] Importante

Como buena práctica de seguridad nunca corra squid con los privilegios de root, use un usuario no privilegiado como nobody o uno dedicado como proxy o squid.

El parámetro cache_mgr define la dirección de correo del administrador del proxy, esta dirección es usada en las paginas de error, además, si el proceso Squid muere, un email es enviado a la dirección usada.

Este parametro viene predefinido con la dirección de root, se recomienda que use una dirección válida ya que es la que los usuarios usarían para notificar problemas con el proxy, por ejemplo

cache_mgr proxy@example.com

Continuemos con la configuración de parámetros de cache memoria y disco.

Configurando el uso del cache en memoria

El parámetro cache_mem especifica la cantidad ideal de memoria que será usada para mantener el cache de los objetos entrantes en memoria, en especifico los objetos más populares: In-Transit, Hot y Negative-Cached.

Para nuestra instalación definiremos 64 MB para el cache de objetos en memoria, cambie el parámetro cache_mem, por ejemplo:

cache_mem 64 MB

El parámetro cache_mem NO especifica el tamaño máximo de memoria asignada al proceso squid. Solo especifica cuanta memoria usará para el cache de objetos de memoria.

[Nota] Nota

Squid usa memoria para otras tareas, la memoría asignada para el cache de objetos en memoria es la tercer causa de consumo total de memoria.

Defina un valor no tan alto para el cache de memoria ya que podría afectar el rendimiento del proxy. Para más información sobre el uso de memoria de squid se recomienda leer la página SquidMemory del Wiki oficial de Squid.

Configuración y creación del directorio de cache

El parámetro cache_dir define el directorio para almacenar los objetos en cache de disco, este parámetro define la ruta del directorio, el tipo de cache de disco y su tamaño, su formato es:

cache_dir Type Directory-Name Mbytes Level1 Level2 [options]
[Nota] Nota

Puede especificar múltiples directorios para cache en disco, por ejemplo, para repartir el cache en varios discos duros y balancear el acceso al cache.

El tipo define el sistema de almacenamiento que squid usará para almacenar los objetos en disco, el tipo predeterminado es UFS, este sistema usa un solo proceso para escribir en el disco, puede causar cuellos de botella de tipo I/O. El tipo aufs (antes async-io) usa el mismo sistema de almacenamiento que UFS pero este usa hilos POSIX y así evitar bloquear el proceso squid con operaciones de I/O al disco.

Directory-Name define la ruta absoluta al directorio designado para el cache, en la mayoría de distribuciones GNU/Linux el directorio predeterminado es /var/spool/squid, en Debian/Ubuntu se usa /var/spool/squid3, por ejemplo:

cache_dir ufs /var/spool/squid3 100 16 256

Mbytes define la cantidad de disco en MB (Mbytes) para el directorio definido , en el valor predeterminado es 100 MB, por ejemplo:

cache_dir ufs /var/spool/squid3 100 16 256
[Importante] Importante

Recuerde que el tamaño del cache influenciará el tamaño de memoria que squid usara en el sistema.

[Importante] Importante

No ponga el tamaño del disco duro aquí, mejor, si quiere que squid use todo el disco, reste el 20% de la capacidad total y use ese valor.

Level1 define sub directorios de primer nivel que serán creados en el directorio, el valor predeterminado es 16. Level2 define el número de sub directorios para el segundo nivel del directorio. El valor predeterminado es 256.

Squid mantiene en memoria entre 72 (arquitecturas 32-bit) y 104 (arquitecturas 32-bit) bytes de memoria para la meta información (metadata) de cada objeto en el cache, llamada estructura de datos StoreEntry. Squid usa aproximadamente 10 MB de memoria por cada 1 GB de disco en arquitecturas de 32-bit, y 14 MB en arquitecturas de 64-bit, por lo tanto se recomienda que tome esto en consideración ya que, por ejemplo, un cache_dir de 10GB va a requerir aproximadamente 100MB de memoria adicionales para la meta información.

Squid realiza muchas operaciones de I/O en disco, por lo que se recomienda tener el directorio de cache en un disco rápido, de preferencia que este separado del disco en el que esta instalado el sistema operativo, por ejemplo:

Si tiene un disco duro adicional, por ejemplo un SATA de 80 GB, se le asigno el nombre de dispositivo /dev/sdb, creamos una partición de 10GB que usaremos para el cache de disco, la partición es /dev/sdb1.

Es recomendable que la partición sea formateada con un sistema de archivos sin journaling para evitar la carga extra, por ejemplo ext2:

# mke2fs /dev/sdb1

Se recomienda que la partición sea montada sin soporte de actualización de los tiempos de acceso (atime), agregue a las opciones de montaje la opción noatime al dispositivo asignado para el cache de squid, por ejemplo:

# /etc/fstab: static file system information.
#
# <file system> <mount point>         <type>  <options>                         <dump>  <pass>
/dev/sda3       /                     ext3    defaults,relatime                 0       1
...
...
# Cache Squid
/dev/sdb1       /var/spool/squid3     ext2    defaults,noatime                  0       0
[Nota] Nota

Ponga en cero (0) la opción pass, no querra realizar un fsck cuando reinicie el sistema con caches de disco muy grandes ya que podría retrasar el tiempo en el que reinicia el sistema hasta el que el fsck termine.

Actualice el tamaño del directorio cache a 8 GB, por ejemplo:

cache_dir ufs /var/spool/squid3 8000 16 256

Si el nuevo cache lo va a montar en el mismo directorio, entonces debe detener el proceso de squid para montar la partición y después inicializar el nuevo directorio del cache, por ejemplo:

Detenga el proceso squid:

# /etc/init.d/squid3 stop

Elimine los archivos viejos del cache:

# rm -rf /var/spool/squid3/*

Monte la nueva partición:

# mount /var/spool/squid3

Asegúrese de que el usuario proxy tiene rxw sobre el directorio del cache:

# chown proxy:proxy /var/spool/squid3
# chmod 750 /var/spool/squid3

Cree la estructura de directorios en el directorio del cache:

# squid3 -z

Recuerde que puede tener múltiples caches, es decir, puede tener varias lineas cache_dir y así distribuir la carga de acceso a disco de un solo cache en varios discos.

Configurando el tamaño para los objetos en cache

El parámetro maximum_object_size define el tamaño máximo de los objetos que serán almacenados en el cache de disco. Los objetos mayores a este tamaño NO serán almacenados en disco. El valor está especificado en kilobytes, y su valor predeterminado es 4MB.

maximum_object_size 4096 KB

Si desea tener una mantener objetos mayores incremente el tamaño, si desea incrementar la velocidad en lugar de ahorrar ancho de banda mantenga un valor bajo.

Configuración de los parámetros de logs

El parámetro logformat define el formato para almacenar los logs de acceso. Con este parámetro podemos definir que información almacenar sobre las peticiones realizadas por los clientes, esta información será importante para ser usada por las herramientas de análisis de logs y generación de reportes de acceso que veremos en capítulos posteriores.

La directiva logformat tiene la sintaxis:

logformat  <name> <format specification>

El nombre es una etiqueta para el formato especificado, las especificaciones de formato definen códigos de formato incluir, este parámetro esta comentado, se recomienda descomentar la línea predefinida, por ejemplo:

logformat squid %ts.%03tu %6tr %>a %Ss/%03Hs %<st %rm %ru %un %Sh/%<A %mt
[Nota] Nota

Descomentar la linea del formato squid y eliminar el espacio entre squid y %t

En la siguiente tabla se muestran los códigos de formato:

Tabla 3.1. Códigos de formato

Código Descripción
>a Client source IP address
>A Client FQDN
<A Server IP address or peer name
la Local IP address (http_port)
lp Local port number (http_port)
ts Seconds since epoch
tu subsecond time (milliseconds)
tl Local time. Optional strftime format argument default %d/%b/%Y:%H:%M:S %z
tg GMT time. Optional strftime format argument default %d/%b/%Y:%H:%M:S %z
tr Response time (milliseconds)
>h Request header. Optional header name argument on the format header[:[separator]element]
<h Reply header. Optional header name argument as for >h
un User name
ul User login
ui User ident
ue User from external acl
Hs HTTP status code
Ss Squid request status (TCP_MISS etc)
Sh Squid hierarchy status (DEFAULT_PARENT etc)
mt MIME content type
rm Request method (GET/POST etc)
ru Request URL
rv Request protocol version
et Tag returned by external acl
ea Log string returned by external acl
<st Reply size including HTTP headers
<sH Reply high offset sent
<sS Upstream object size
% a literal % character

El parámetro access_log define la ruta del archivo en el que se va a registrar la actividad de los clientes, además se define el formato en el que se registrará la información, por ejemplo:

access_log /var/log/squid3/access.log squid
[Nota] Nota

Si no desea registrar la actividad de los clientes, use el argumento none.

[Importante] Importante

El usuario proxy debe tener permisos de escritura sobre este archivo.

El parámetro cache_log define la ruta del archivo en la que se registrarán los eventos generados por el proceso squid, cuando squid es iniciado registra la información en este log, si hubiese algún problema al leer ciertos archivos, esa información se registra en este log, problemas con espacio insuficiente o en la autenticación la veremos en el archivo definido aquí.

cache_log /var/log/squid3/cache.log

El parámetro cache_store_log define el archivo de log en el que se registran los objetos puestos en el cache, por ejemplo:

cache_store_log /var/log/squid3/store.log

Mediante la opción -k rotate del comando squid3(8) puede ordenar al proceso squid en ejecución que realice una rotación del log access.log, el parámetro logfile_rotate define el número de archivos access.log que se almacenarán antes de ser rotados.

Si diario ejecuta el comando squid3 -k rotate diariamente, probablemente quera guardar los logs antiguos por una semana, para hacerlo cambie el valor a 7, por ejemplo:

logfile_rotate 7

Para mayor información acerca de la rotación de logs y motorización de la actividad de los clientes y generación de reportes de acceso ver el capitulo Monitorizacion de peticiones y generacion de reportes de acceso.

Configurando las paginas de error de squid

El parámetro error_directory define la ruta del directorio en el cual se almacenan los mensajes que son devueltos a los clientes web, los mensajes por default están en inglés, si desea cambiar los mensajes a Español cambié el parámetro error_directory por ejemplo:

error_directory /usr/share/squid3/errors/Spanish
[Nota] Nota

En la página de acceso denegado no se muestra la dirección de correo del administrador del cache, si desea mostrar esa información use la versión en ingles y modifique el HTML.

Las páginas de error son archivos de texto plano en HTML, la dirección de correo especificada en cache_mgr es incluía como dirección de contacto, si desea agregar más información en la pagina de conexiones rechazadas, edite el archivo /usr/share/squid3/errors/Spanish/ERR_ACCESS_DENIED y al final del archivo, después de la etiqueta </UL> agregue algo así::

<P>
Si cree que el sitio fué bloqueado por equivocación contacte al administrador del proxy en el correo
<A HREF="mailto:%w%W">%w</A> o marque al departamento de TI en la extensión XXXX.
</P>
[Nota] Nota

No incluya las etiquetas HTML de cierre </HTML> </BODY>, squid las cerrará.

Puede editar estos archivos para personalizar los mensajes devueltos a los clientes cuando entren a una pagina denegada, cuando no puedan acceder a un sitio cuando el servidor esta caído o porque el puerto esta rechazado por la política del firewall.

Configuración de parámetros misceláneos

El parámetro ftp_user define la dirección de correo que se usará como contraseña para las conexiones FTP anónimas, de esta forma, cuando un usuario haga una conexión FTP anónima a través del proxy Squid se enviará automáticamente la contraseña usando la dirección de correo especificada.

Si va a usar Squid como proxy FTP cambie el parámetro ftp_user a una dirección de correo válida ya que algunos servidores FTP validan las direcciones, por ejemplo:

ftp_user wwwproxy@example.com

Des activamos el forward de dirección IP y nombre de cliente en las cabeceras HTTP:

forwarded_for off

Lea los comentarios del archivo de configuración squid.conf para más parámetros de configuración.