Configuración e instalación de Squid
Como instalar el servidor Squid
Instalación mediante RPM
La manera más sencilla de instalar el servidor Squid en nuestro sistema, es mediante una versión en RPM ya sea desde el CD de nuestra distribución o desde por ejemplo nuestra sección privada, ninguna versión anterior a la 2.4 STABLE1 se considera apropiada y lógicamente nosotros recomendamos instalar la versión estable más reciente posible.
Para instalar una versión en RPM, simplemente tenemos que ejecutar como usuario root la siguiente orden:
rpm -i squid-2.4.STABLE6-6.7.3.i386.rpm
(El RPM indicado viene con la distribución de RedHat 7-3 y es el que utilizaremos para realizar esta documentación).
Instalación mediante código fuente
Si no deseamos esperar a que salga la última versión en RPM y queremos instalar Squid desde el código fuente, simplemente tenemos que descargar la versión más actualizada desde www.squid-cache.org y descomprimirla mediante la orden:
tar -xzvf squid-2.5.STABLE2.tar.gz
Una vez descomprimido el paquete debemos de ejecutar el siguiente script con los siguientes parámetros:
./configure -prefix=/usr/local/squid
Esta orden permite especificar el directorio donde instalaremos Squid. Una vez realizada esta operación se generan los ficheros Makefiles y librerías necesarias para compilar el código.
Para compilar el código fuente ejecutar la orden make all y posteriormente make install para instalar el software de Squid en nuestro sistema.
Ejemplo de configuración de sus directivas
En esta sección se muestra un ejemplo de las directivas más importantes que deberían de situarse descomentadas dentro del fichero squid.conf, para hacer funcionar el servidor Squid.
#Directivas para Proxy y caché
http_port 3128
cache_mem 16 MB
cache_dir ufs /var/spool/squid 100 16 256
maximum_object_size 4096 KB
cache_access_log /var/log/squid/access.log
reference_age 1 month
refresh_pattern . 0 20% 4320
ftp_user Carles@mi-dominio.net
ftp_passive on
#Directivas para definir listas
acl password proxy_auth REQUIRED
acl redlocal src 192.168.0.0/255.255.255.0
acl adult url_regex www.sex microsoft
#Mínimas por defecto
acl all src 0.0.0.0/0.0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl SSL_ports port 443 563 --> HTTPS, SNEWS
acl Safe_ports port 80 21 443 563 --> HTTP, FTP, HTTPS, SNEWS
acl Safe_ports port 70 210 1025-65535 --> GOPHER, WAIS, Rango puertos
acl Safe_ports port 280 488 --> HTTP-MGMT, GSS-HTTP
acl CONNECT method CONNECT
#Directivas para definir reglas sobre las listas
http_access allow adult password
http_access allow redlocal
#Mínimas por defecto
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access deny all
#Otras directivas
no_cache deny adult
reply_body_max_size 4096 KB
cache_mgr Carles@mi-dominio.net
authenticate_program /usr/lib/squid/ncsa_auth /etc/squid/squid-passwd
#Directivas para la jerarquía de caches
icp_port 3130
cache_peer 192.168.0.84 parent 3128 3130
cache_peer 192.168.0.90 sibling 3128 0
En el siguiente apartado se muestra una descripción detallada con
ejemplos de cada una de las directivas presentadas y en el orden en que se
encuentran en esta página.
Explicación de las directivas
Una vez presentadas las directivas explicaremos su utilidad y funcionamiento para una mayor compresión de sus posibilidades.
Para el correcto funcionamiento de las directivas, se aconseja descomentarlas situándolas a la izquierda del todo.
http_port (Asignar Puerto)
Permite especificar uno o varios puertos de escucha para el servidor Squid. Sus valores pueden ser: [dirección-IP:]puerto... tal como se muestra a continuación.
http_port 3128 80
http_port 192.168.0.87:3128
La segunda línea especifica la dirección IP de la máquina donde se encuentra el Proxy. Si queremos que Squid escuche en el puerto 80, debemos de tener en cuenta que los servidores web como Apache utilizan este puerto por defecto y por tanto deberemos de asignarle uno diferente.
cache_mem (Tamaño para la caché en memoria)
Permite indicar la cantidad ideal de memoria RAM como máximo para almacenar caché de objetos en tránsito, objetos Hot y objetos negativamente almacenados en la caché.
Los datos de estos objetos se almacenan en bloques de 4KB. Cache_mem especifica un límite ideal en el tamaño total de bloques acomodados, donde los objetos en tránsito tienen mayor prioridad, es decir que el resto de objetos la podrán usar hasta que sea requerida.
En el supuesto caso que el objeto en tránsito requiera una memoria mayor a la especificada se excederá para satisfacer la petición, a continuación se muestra un ejemplo.
cache_mem 16 MB
Si el servidor tiene como mínimo 128 MB de RAM es aconsejable indicar este valor.
cache_dir (Tamaño y directorio para la caché física)
Permite indicar la cantidad de memoria física máxima para almacenar caché en el disco duro, es decir cuanto espacio almacenar de objetos de Internet. Sus valores pueden ser: tipo directorio tamaño numero_subdir numero_niveles, tal como se muestra a continuación.
cache_dir ufs /var/spool/squid 100 16 256
El numero 100 corresponde a 100MB como espacio máximo para almacenar caché, el 16 son el numero de subdirectorios que contendrá el directorio principal (en este caso /var/spool/squid) y el 256 significa el numero de niveles para cada subdirectorio. En caso de especificar un tamaño máximo inferior al espacio real disponible, el servidor Squid se bloqueará.
maximum_object_size (Tamaño máximo para cacheados)
Permite especificar en kilobytes el tamaño máximo de los objetos que se pueden cachear, es decir, los objetos más grandes del tamaño indicado no serán cacheados, a continuación se muestra un ejemplo.
maximum_object_size 4096 KB
En el ejemplo se han indicado 4MB como tamaño máximo de objetos en la caché.
cache_access_log (Log de peticiones y uso de la caché)
Permite definir en que fichero Squid debe guardar una lista de las peticiones que va recibiendo, con la información de la página que se ha consultado y si ésta ha sido facilitada desde la caché o desde el servidor web, a continuación se muestra un ejemplo.
cache_access_log /var/log/squid/access.log
Squid presenta más directivas para definir donde registrar sus logs, a continuación se muestran las siguientes dos que pueden ser de mayor utilidad.
- cache_log /var/log/squid/cache.log
- Información general sobre el comportamiento de la caché
- cache_store_log /var/log/squid/store.log
- Muestra que objetos son ejecutados des de la caché y hasta cuando serán guardados.
reference_age (Tiempo máximo en la caché)
Permite especificar el tiempo máximo que puede permanecer un objeto en la caché sin que se acceda a él, transcurrido ese tiempo será borrado.
Squid el objeto que ha estado mas tiempo sin ser accedido lo calcula dinámicamente con el fin de ser borrado según el espacio disponible en la caché. Sus valores pueden ser: time-units, tal como se muestra a continuación.
reference_age 1 year
reference_age 3.5 days
referense_age 2 hours
refresh_pattern (Factor para páginas sin caducidad)
Permite especificar que fecha en minutos deben de tener los documentos que su servidor no estableció una cabecera Expires indicando su caducidad.
Sus valores pueden ser: expresión_regular mín porcentaje máx, tal como se muestra a continuación.
refresh_pattern -i \.gif$ 14400 70% 43200
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern . 0 20% 4320
El valor correspondiente a la expresión regular debe de contener la especificación del objeto basándose en la dirección (URL) de la petición o un "." para indicar el resto. En los ejemplos se muestra como especificar cualquier objeto "gif" y cualquier petición "FTP".
El valor mín corresponde a los minutos mínimos que un objeto que no dispone de una cabecera Expires (indicando su caducidad), pueda ser considerado como no caducado (fresco). El valor "0" se recomienda para que no se obligue la retención de objetos no deseados como pueden ser los dinámicos.
El valor porcentaje sirve para especificar en aquellos objetos sin fecha de caducidad, cual será su fecha, aplicando un porcentaje sobre su tiempo desde la última modificación (la última modificación de un objeto se obtiene de la cabecera Last-Modified).
El valor máx corresponde a los minutos máximos que un objeto podrá ser considerado como no caducado.
ftp_user (Acceso anónimo para FTP)
Permite indicar el correo que debe usarse como contraseña para acceder de forma anónima a un servidor FTP. Esto es útil si se desea acceder a servidores que validan la autenticidad de la dirección de correo especificada como contraseña, a continuación se muestra un ejemplo.
ftp_user Carles@mi-dominio.net
Requerir autentificación por contraseña
Hasta el momento hemos visto mediante las directivas acl y http_access como controlar el acceso según el origen de la petición o según el destino. En este apartado aprovechando también estas directivas mostraremos como conseguir que independientemente de la máquina que se utilice se requiera introducir un nombre de usuario y una contraseña en el cliente para poder acceder a través del Proxy.
- Crear el fichero que contendrá los usuarios y sus contraseñas de forma encriptada.
touch /etc/squid/squid-passwd
- Establecer permisos de lectura y escritura para Squid.
chmod 600 /etc/squid/squid-passwd
chown squid:squid /etc/squid/squid-passwd
- Dar de alta los usuarios con sus contraseñas.
htpasswd /etc/squid/squid-passwd nombre_usuario
La orden nos pedirá introducir su contraseña correspondiente. El nombre de usuario es lógicamente independiente a los que hay ya definidos en el sistema y la orden htpasswd está disponible en el paquete: apache-1.3.22 o superior.
- Definir en el fichero squid.conf que programa gestiona las autenticaciones (ver sección: Explicación de las directivas).
authenticate_program /usr/lib/squid/ncsa_auth /etc/squid/squid-passwd
- Definir en el fichero squid.conf la lista acl correspondiente.
acl password proxy_auth REQUIRED
- Aplicar reglas en el fichero squid.conf para quienes queramos que sean autenticados.
acl all src 0.0.0.0/0.0.0.0 --> Todas las IP's posibles
acl redlocal src 192.168.0.0/24 --> Red correspondiente a 192.168.0.*
http_access allow redlocal password --> Usuarios con esas IP's autenticarse
http_access deny all --> Denegamos el acceso a los demás.
acl all src 0.0.0.0/0.0.0.0 --> Todas las IP's posibles
acl redlocal src 192.168.0.0/24
acl adult url_regex www.sex.com erotic
http_access allow adult password --> Solo acceder a contenido adulto mediante
previa autenticación.
http_access allow redlocal --> Permitimos el acceso a las IP's de la red.
http_access deny all --> Denegamos el acceso a los demás.
Una vez hemos configurado nuestro servidor Proxy solo tenemos que realizar una petición a un contenido prohibido y observaremos como nuestro navegador muestra una ventana para que nos autentiquemos.