33.5. El archivo de configuración /etc/squid/squid.conf

La configuración de Squid se almacena en el archivo de configuración /etc/squid/squid.conf. Para poder iniciar Squid por primera vez, no es necesario hacer cambios en este archivo, aunque los clientes externos tendrán inicialmente el acceso denegado. El proxy necesita ejecutarse en localhost y normalmente utilizará el puerto 3128. Las opciones son muy extensas y están documentadas con muchos ejemplos en el archivo /etc/squid/squid.conf preinstalado. Casi todas las líneas comienzan por el símbolo # (significa que la línea está comentada y su contenido no se evaluará); las opciones relevantes se encuentran al final de la línea. Los valores por defecto corresponden casi siempre a los valores que necesitaremos, así que para muchas opciones sólo será necesario quitar el símbolo de comentario al principio de la líneas. De cualquier modo, es recomendable dejar el ejemplo comentado y reescribir la línea con los nuevos parámetros una línea más abajo. De esta manera se puede ver fácilmente cuales son los valores por defecto y cuales son los cambios introducidos.

[Tip]Adaptar el archivo de configuración tras una actualización

Si está actualizando desde una versión anterior de Squid, se recomienda editar el nuevo /etc/squid/squid.conf y añadirle la configuración del archivo anterior. Si trata de implementar directamente el antiguo archivo de configuración squid.conf, es posible que no funcione correctamente debido a modificaciones en algunas opciones o a los nuevos cambios en la nueva versión.

33.5.1. Opciones generales de configuración (selección)

http_port 3128

Este es el puerto en el que Squid atenderá las peticiones de los clientes. El puerto por defecto es 3128, aunque también suele emplearse 8080. Es posible especificar varios puertos separándolos por espacios en blanco.

cache_peer hostname type proxy-port icp-port

Esta opción permite especificar otro servidor proxy como “padre” (parent), por ejemplo si quiere usar el de su proveedor. En la opción hostname se especifica el nombre y la dirección IP del proxy al que nos vayamos a conectar, en la opción type, especificamos parent. Para proxy-port, se debe escribir el número de puerto especificado por el operador del “padre” para los navegadores (normalmente se utiliza el 8080). Como icp-port puede introducirse 7 o bien 0 si no se conoce el puerto ICP del proxy padre y su uso carece de interés para el proveedor. Asimismo, default y no-query se deben especificar después de los números de puerto para no permitir el uso del protocolo ICP. Squid se comportará en ese caso como un navegador normal en lo que respecta al proxy del proveedor.

cache_mem 8 MB

Esta entrada define la cantidad máxima de memoria RAM que utilizará Squid para los cachés. El valor por defecto es 8 MB.

cache_dir ufs /var/cache/squid/ 100 16 256

La entrada correspondiente a cache_dir fija el directorio donde se almacenarán los datos. Los números al final indican el tamaño máximo en “MB” que se va a utilizar, seguido del número de directorios de primer y segundo nivel. El parámetro ufs debe dejarse tal y como está. El valor por defecto es “100 MB” de espacio en disco ocupado en el directorio /var/cache/squid, para luego crear 16 subdirectorios más, y en cada uno de ellos se crearán 256 directorios más. Al especificar el espacio de disco a utilizar, siempre se debe dejar espacio suficiente de reserva. Se recomienda manejar valores de tamaño para el caché entre el 50 a un 80 por ciento del espacio total disponible. Los últimos dos números sólo deben ser incrementados con precaución ya que demasiados directorios pueden provocar problemas de funcionamiento. En caso de disponer de más discos para repartir entre ellos el caché, se pueden especificar varias líneas de cache_dir.

cache_access_log /var/log/squid/access.log

ruta para archivos de registro.

cache_log /var/log/squid/cache.log

ruta para archivos de registro.

cache_store_log /var/log/squid/store.log

Ruta para archivos de registro.

Estas tres entradas especifican la ruta donde Squid guardará sus archivos de registro. Normalmente no hace falta cambiar nada. Si Squid soporta una carga relativamente elevada, puede ser necesario distribuir el caché y estos archivos de registro en discos diferentes.

emulate_httpd_log off

Si se le asigna a la entrada el valor on, será posible obtener archivos de registro en formato legible. Sin embargo, algunos programas de evaluación no pueden interpretarlos.

client_netmask 255.255.255.255

Esta entrada permite enmascarar las direcciones IP en los archivos de registro para ocultar la identidad de los clientes. Especificando en esta opción el valor 255.255.255.0, la última cifra de la dirección IP se interpretará como cero.

ftp_user Squid@

Esta opción se utiliza para definir la contraseña usada por Squid para realizar el registro (login) para FTP anónimo. Es importante especificar una dirección de correo electrónico válida, ya que algunos servidores FTP pueden comprobar si es válida o no.

cache_mgr webmaster

Dirección de correo electrónico a la que Squid enviará un mensaje en caso que termine inesperadamente. Por defecto se enviarán al webmaster.

logfile_rotate 0

Squid puede rotar archivos de registro al ejecutar el comando squid -k rotate. Los archivos serán enumerados durante este proceso y, una vez alcanzado el valor especificado, el archivo más antiguo será sobreescrito. El valor que se utiliza normalmente es 0, ya que para archivar y borrar archivos de registro en SUSE LINUX se usa un cronjob que se encuentra en el archivo de configuración /etc/logrotate/squid.

append_domain <dominio>

Con la opción append_domain, se puede especificar qué dominio se añadirá automáticamente en caso de que no se facilite ninguno. Normalmente se especifica el propio dominio, de forma que basta con introducir www en el navegador para acceder al servidor web propio.

forwarded_for on

Al desactivar esta opción con el valor off, Squid eliminará las direcciones IP y el nombre de la máquina de los clientes en las peticiones HTTP.

negative_ttl 5 minutes; negative_dns_ttl 5 minutes

Normalmente no es necesario cambiar estos valores. No obstante, si se dispone de una conexión telefónica, a veces puede ocurrir que no sea posible acceder a Internet. Si esto sucede, Squid tomará nota de las peticiones fallidas y se negará a realizarlas otra vez, incluso aunque la conexión ya se haya restablecido. En ese caso puede cambiar el valor minutes a seconds. Después de esto, al pulsar en el botón de Recargar en el navegador la conexión se reiniciará al cabo de unos segundos.

never_direct allow acl_name

Si desea impedir que Squid conteste a peticiones que vengan directamente de Internet, puede utilizar el siguiente comando para forzar la conexión a otro proxy. Este debe estar ya introducido en la opción cache_peer. Si como acl_name se especifica el valor all, todas las peticiones serán redirigidas al caché padre. Esto puede ser necesario, por ejemplo, en caso de disponer de un proveedor que estipule estrictamente el uso de sus proxys o que no permita acceso directo a Internet a través de su cortafuegos.

33.5.2. Listas de control de acceso o ACLs

Squid dispone de un elaborado sistema para controlar el acceso al proxy que, gracias al uso de ACLs, puede ser configurado de forma fácil y flexible. Se trata de listas de normas procesadas secuencialmente. Las ACLs deben ser definidas antes de poder utilizarse. Algunas ACLs como all y localhost ya están predefinidas. La mera definición de una ACL no tiene ningún efecto. Es necesario que se aplique por ejemplo en combinación con http_access para que puedan procesarse las reglas definidas anteriormente.

acl <acl_nombre> <tipo> <datos>

Una ACL necesita por lo menos tres especificaciones para definirla. El nombre <acl_nombre> se puede elegir arbitrariamente. El <tipo> se puede elegir de entre diferentes opciones disponibles en la sección ACCESS CONTROLS del archivo /etc/squid/squid.conf. La parte de datos depende del tipo de ACL y también puede ser leída desde un archivo que contenga, por ejemplo, nombres de máquinas, direcciones IP o bien URLs. A continuación algunos ejemplos:

acl usuarios srcdomain .mi-dominio.com
acl profesores src 192.168.1.0/255.255.255.0
acl alumnos src 192.168.7.0-192.168.9.0/255.255.255.0
acl mediodía time MTWHF 12:00-15:00
http_access allow <acl_nombre>

http_access determina a quién le está permitido usar el proxy y quién puede acceder a Internet. Para ello deben definirse ACLs que permitan o denieguen el acceso mediante allow o deny (localhost y all ya han sido definidas con anterioridad). Se puede crear una lista completa de entradas http_access que será procesada de arriba a abajo y, dependiendo de qué regla pueda aplicarse en primer lugar, se permitirá o no el acceso a Internet para cada URL. Por eso la última entrada de todas debe ser http_access deny all. En el ejemplo siguiente localhost (el ordenador local) dispone de acceso libre mientras que todos los otros hosts tienen el acceso denegado.

http_access allow localhost
http_access deny all

Otro ejemplo donde se utilizan las reglas definidas anteriormente: el grupo profesores siempre tendrá acceso a Internet, mientras que el grupo alumnos solamente tiene acceso de lunes a viernes durante el mediodía.

http_access deny localhost
http_access allow profesores
http_access allow alumnos mediodía time
http_access deny all

Para mantener el orden se recomienda insertar la lista con las entradas http_access propias en el archivo /etc/squid/squid.conf entre las líneas

# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR 
# CLIENTS

y

http_access deny all
redirect_program /usr/bin/squidGuard

Con esta opción se puede especificar un programa de redirección como squidGuard capaz de bloquear el acceso a URLs no deseadas. El acceso a Internet puede ser controlado individualmente para varios grupos de usuarios con la ayuda de la autentificación por proxy y listas de control de acceso apropiadas. squidGuard es un paquete independiente que se debe instalar y configurar separadamente.

auth_param basic program /usr/sbin/pam_auth

Si los usuarios deben ser autentificados en el proxy, se puede especificar un programa como pam_auth que realice esta función. Cuando se accede a pam_auth por primera vez, el usuario verá una pantalla de login donde deberá introducir el nombre de usuario y la contraseña. Además será necesario especificar una ACL para que sólo los usuarios registrados puedan acceder a Internet:

acl password proxy_auth REQUIRED

http_access allow password
http_access deny all

El texto REQUIRED después de proxy_auth puede también sustituirse por una lista de usuarios permitidos o por la ruta a esa lista.

ident_lookup_access allow <acl_nombre>

Con esta opción se consigue que para todos los clientes que pertenezcan a la ACL especificada se ejecute un programa que determine la identidad del cliente. Al especificar el valor all como <acl_nombre>, la regla será válida para todos los clientes. Para ello deberá ejecutar un daemon denominado ident en todos los clientes. En Linux, se puede utilizar para este propósito el paquete pidentd; en el caso de Windows, hay software libre disponible que se puede descargar de Internet. Para asegurar que sólo se permita el acceso a clientes correctamente identificados, se deberá igualmente especificar otra ACL tal y como se define a continuación:

acl identhosts ident REQUIRED

http_access allow identhosts
http_access deny all

Aquí también se puede cambiar el valor REQUIRED por una lista de usuarios autorizados. El uso de ident puede reducir la velocidad del sistema debido a que el proceso de autentificación se repite para cada petición.


SUSE LINUX Manual de administración 9.3