Instalar y configurar Squid en RedHat/CentOS/Fedora

| 2013-05-27 | 10 Comentarios »

Squid es un Servidor Intermediario de alto desempeño que se ha venido desarrollando desde hace varios años y es hoy en día un muy popular y ampliamente utilizado entre los sistemas operativos como GNU/Linux y derivados de Unix®. Es muy confiable, robusto y versátil y se distribuye bajo los términos de la Licencia Pública General GNU (GNU/GPL). Siendo equipamiento lógico libre, está disponible el código fuente para quien así lo requiera.

Entre otras cosas, Squid puede funcionar como Servidor Intermediario y caché de contenido de Red para los protocolos HTTP, FTP, GOPHER y WAIS, Proxy de SSL, caché transparente, WWCP, aceleración HTTP, caché de consultas DNS y otras muchas más como filtración de contenido y control de acceso por IP y por usuario.

Puerto por defecto de Squid: 3128

Sitio web de Squid: http://www.squid-cache.org/

Squid sólo se instala de manera predeterminada cuando se instala el grupo de paquetes denominado «Servidor Web». El procedimiento de instalación es exactamente el mismo que con cualquier otro equipamiento lógico.

Instalación a través de yum

yum -y install squid

SELinux y el servicio squid

En CentOS 6 y Red Hat™ Enterprise Linux 6, la política squid_connect_any viene habilitada de modo predeterminado. En CentOS 5 y Red Hat™ Enterprise Linux 5, esta política viene deshabilitada de modo predeterminado. Esta política hace que SELinux permita al servicio squid acepte conexiones de los clientes desde cualquier dirección IP.

Configuración básica

Squid utiliza el archivo de configuración localizado en /etc/squid/squid.conf y podrá trabajar sobre este utilizando su editor de texto simple preferido. Existen un gran número de opciones, de los cuales se recomienda configurar los siguientes:

  • Al menos una Lista de Control de Acceso
  • Al menos una Regla de Control de Acceso
  • http_port
  • cache_dir
  • error_directory, sólo si va a personalizar mensajes de error.

El resto de los opciones, mencionados en este documento, son opcionales.

Edite el archivo /etc/squid/squid.conf: vim /etc/squid/squid.conf

Controles de acceso

Para poder controlar el tráfico de los clientes hacia Internet, es necesario establecer Listas de Control de Acceso que definan una red o bien ciertos anfitriones en particular. A cada lista se le asignará una Regla de Control de Acceso que permitirá o denegará el acceso a Squid.

Listas de control de acceso

De modo predeterminado en CentOS 6 y Red Hat™ Enterprise Linux 6, Squid habilita el acceso a todas las redes locales, definidas en el RFC1918. Es decir, permite el acceso a 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, fc00::/7 y fe80::/10.

Deshabilitar todo lo anterior, colocando una almoadilla (# al inicio de cada línea.# Example rule allowing access from your local networks.

# Adapt to list your (internal) IP networks from where browsing
# should be allowed
# acl localnet src 10.0.0.0/8     # RFC1918 possible internal network
# acl localnet src 172.16.0.0/12  # RFC1918 possible internal network
# acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
# acl localnet src fc00::/7   # RFC 4193 local private network range
# acl localnet src fe80::/10  # RFC 4291 link-local (directly plugged) machines

Regularmente una lista de control de acceso se establece con la siguiente sintaxis:

acl [nombre de la lista] src [lo que compone a la lista]

Si se desea establecer una lista de control de acceso que abarque a toda la red local, basta definir la IP correspondiente a la red y la máscara de la sub-red. Por ejemplo, si se tiene una red donde los anfitriones tienen direcciones del segmento IP 192.168.0.1/24, se puede utilizar lo siguiente: acl localnet src 192.168.0.1/24

También puede definirse una Lista de Control de Acceso especificando un archivo localizado en cualquier parte del disco duro y la cual contiene una lista de direcciones IP. Ejemplo: acl permitidos src «/etc/squid/listas/permitidos»

El archivo /etc/squid/listas/permitidos tendría un contenido similar al siguiente:

192.168.0.1
192.168.0.4

Lo anterior estaría definiendo que la Lista de Control de Acceso denominada permitidos estaría compuesta por las direcciones IP incluidas en el archivo /etc/squid/listas/permitidos.

Reglas de Control de Acceso

Estas definen si se permite o deniega acceso hacia Squid. Se aplican a las Listas de Control de Acceso. Deben colocarse en la sección de reglas de control de acceso definidas por el administrador, es decir, a partir de donde se localiza la siguiente leyenda:

#

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

#

La sintaxis básica de una regla de control de acceso es la siguiente:

http_access [deny o allow] [lista de control de acceso]

Para desactivar la configuración predeterminada y poder utilizar una diferente, localice La línea que incluye http_access allow localnet.

Deshabilite esta línea colocando una almohadilla (# al inicio de ésta: # Example rule allowing access from your local networks.

# http_access allow localnet
http_access allow localhost

En el siguiente ejemplo se considera una regla que establece acceso permitido a Squid a la Lista de Control de Acceso denominada permitidos: http_access allow permitidos

También pueden definirse reglas valiéndose de la expresión !, la cual significa no. Pueden definirse, por ejemplo, dos listas de control de acceso, una denominada lista1 y otra denominada lista2, en la misma regla de control de acceso, en donde se asigna una expresión a una de estas. La siguiente establece que se permite el acceso a Squid a lo que comprenda lista1 excepto aquello que comprenda lista2:http_access allow lista1 !lista2

Este tipo de reglas son útiles cuando se tiene un gran grupo de IP dentro de un rango de red al que se debe permitir acceso y otro grupo dentro de la misma red al que se debe denegar el acceso.

Aplicando Listas y Reglas de control de acceso

Una vez comprendido el funcionamiento de la Listas y las Regla de Control de Acceso, se procede a determinar cuáles utilizar para la configuración.

Caso:

Considerando como ejemplo que se dispone de una red 192.168.0.1/24, si se desea definir toda la red local, se utilizaría la siguiente línea en la sección de Listas de Control de Acceso:

acl localnet src 192.168.0.1/24

A continuación se procede a aplicar la regla de control de acceso: http_access allow localnet

Habiendo hecho lo anterior, la zona de reglas de control de acceso debería quedar de modo similar al siguiente:

Reglas de control de acceso: Acceso a una Lista de Control de Acceso.

# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
http_access allow localhost
http_access allow localnet
http_access deny all

La regla http_access allow localnet permite el acceso a Squid a la Lista de Control de Acceso denominada localnet, la cual, en el siguiente ejemplo, está conformada por 192.168.0.1/24. Esto significa que cualquier anfitrión desde  192.168.0.1 hasta 192.168.0.255  podrá acceder a Squid

.

Opción cache_mgr

Este opción es de carácter informativo. De modo predeterminado, si algo ocurre con el caché, como por ejemplo que muera el procesos, se enviará un mensaje de aviso a la cuenta webmaster del servidor. Puede especificarse una distinta si acaso se considera conveniente.

cache_mgr joseperez@midominio.net

Opción http_port

Este opción es utilizado para indicar el puerto a través del cual escuchará peticiones Squid. EL valor predeterminado es 3128.

El puerto estándar designado para servidores de caché de Internet (webcache) es el puerto 8080.

http_port 8080

La opción permite establecer también si se quiere utilizar una dirección IP en particular. Esto añade mayor seguridad al servicio, pues si se tiene dos tarjetas de red, una con una dirección IP pública y otra con una dirección IP privada, se puede establecer que Squid solo permita conexiones desde la dirección IP privada.

http_port 192.168.0.250:8080

Si se necesita configurar un servidor proxy en modo transparente, solo es necesario añadir la opción intercept, misma que desde la versión 3.1 de Squid reemplaza a la opción transparent.

http_port 192.168.0.250:8080 intercept

Opción cache_dir

Este opción se utiliza para establecer que tamaño se desea que utilice Squid para almacenamiento de caché en el disco duro. De modo predeterminado Squid utilizará el formato ufs para crear en el directorio /var/spool/squid un caché de 100 MB, dividido en jerarquías de 16 directorios subordinados, hasta 256 niveles cada uno:

cache_dir ufs /var/spool/squid 100 16 256

Se puede incrementar el tamaño del caché hasta donde lo desee el administrador. Mientras más grande sea el caché, más objetos se almacenarán en éste y por lo tanto se consumirá menos el ancho de banda. La siguiente línea establece un caché de 2 GB:

cache_dir ufs /var/spool/squid 2048 16 256

El formato de cache ufs puede llegar a bloquear el proceso principal de Squid en operaciones de entrada/salida sobre el sistema de archivos cuando hay muchos clientes conectados. Para evitar que esto ocurra, se recomienda utilizar aufs, que utiliza el mismo formato de ufs, pero funciona de manera asincrónica, consiguiéndose un mejor desempeño.

cache_dir aufs /var/spool/squid 2048 16 256

Opción maximum_object_size.

Esta opción se utiliza para definir el tamaño máximo de los objetos en el caché. Se recomienda establecerla en escenarios con alta carga de trabajo, puesto que permite evitar desperdiciar recursos de sistema almacenando en el caché objetos de gran tamaño que probablemente sólo sean aprovechados por unos pocos usuarios, optimizando el uso del caché con objetos pequeños que de otro modo generarían una gran cantidad de peticiones hacia las redes públicas. En el siguiente ejemplo se establece un límite de 48 MB para los objetos del caché.

maximum_object_size 48 MB

Opciones cache_swap_low y cache_swap_high.

Es posible realizar una limpieza automática del caché de Squid cuando éste llegue a cierta capacidad. La opción cache_swap_low establece el porcentaje a partir del cual se comenzará a limpiar el cache. La opción cache_swap_high establece el porcentaje a partir del cual se comenzará a limpiar de manera agresiva el cache. En el siguiente ejemplo se establece que el cache se comienza a limpiar cuando alcanza el 90% y se comienza a limpiar de manera agresiva cuando alcanza el 95%.

cache_swap_low 90
cache_swap_high 95

Lo anterior permite tener un caché saludable que se limpia automáticamente. Se recomienda utilizar estas opciones en escenarios con alta carga de trabajo.

Opción cache_replacement_policy.

A través de esta opción se incluye soporte para los siguientes algoritmos para el caché:

Opción cache_mem.

La opción cache_mem establece la cantidad ideal de memoria para lo siguiente:

–          Objetos en tránsito.

–          Objetos frecuentemente utilizados (Hot).

–          Objetos negativamente almacenados en el caché.

Los datos de estos objetos se almacenan en bloques de 4 Kb. La opción cache_mem especifica un límite máximo en el tamaño total de bloques acomodados, donde los objetos en tránsito tienen mayor prioridad. Sin embargo los objetos frecuentemente utilizados (Hot) y aquellos negativamente almacenados en el caché, podrán utilizar la memoria sin utilizar hasta que esta sea requerida. De ser necesario, si un objeto en tránsito es mayor a la cantidad de memoria especificada, Squid excederá lo que sea necesario para satisfacer la petición.

De modo predeterminado, desde la versión 3.1 de Squid, se establecen 256 MB, que es más que suficiente para las necesidades de redes de área local con pocos anfitriones. Puede especificar una cantidad menor para obtener un mejor rendimiento, pues conviene utilizar la memoria disponible para hacer cache en memoria de muchos objetos pequeños que son frecuentemente visitados, que hacer cache de unos pocos objetos grandes que sólo unos pocos usuarios aprovecharán. En el siguiente ejemplo se establecen 48 MB como límite de tamaño para los objetos en tránsito:

cache_mem 48 MB

Estableciendo el idioma de los mensajes mostrados por de Squid hacia el usuario.

Squid incluye traducción a distintos idiomas de las distintas páginas de error e informativas que son desplegadas en un momento dado durante su operación. Dichas traducciones se pueden encontrar en /usr/share/squid/errors/. Desde la versión 3.0 de Squid, el idioma se detecta automáticamente a partir del navegador utilizado por el usuario. Es innecesario modificar opción alguno, salvo que se haya personalizado los mensajes, en cuyo caso conviene utilizar una ruta distinta a la del idioma utilizado para evitar se sobre-escriban los archivos después de actualizar el sistema.

Iniciando, reiniciando y añadiendo el servicio al arranque del sistema.

Una vez terminada la configuración, ejecute el siguiente mandato para iniciar por primera vez Squid:

service squid start

Si necesita volver a cargar la configuración para probar cambios realizados, sin detener el servicio, ejecute lo siguiente:

service squid reload

Si necesita reiniciar para probar cambios hechos en la configuración, considerando que este proceso puede llegar a demorar algunos minutos, ejecute lo siguiente:

service squid restart

Si desea que Squid inicie de manera automática la próxima vez que inicie el sistema, ejecute lo siguiente:

chkconfig squid on

Lo anterior habilitará a Squid en todos los niveles de ejecución

Depuración de errores

Cualquier error al inicio de Squid sólo significa que hubo errores de sintaxis, errores de dedo o bien se están citando incorrectamente las rutas hacia los archivos de las Listas de Control de Acceso.

Puede realizar diagnóstico de problemas indicándole a Squid que vuelva a leer configuración, lo cual devolverá los errores que existan en el archivo /etc/squid/squid.conf.service squid reload

Cuando se trata de errores graves que impiden iniciar el servicio, puede examinarse el contenido del archivo /var/log/squid/squid.out con el mandato less, more o cualquier otro visor de texto:tail -80 /var/log/squid/squid.out

Personalizando reglas Squid (Bloquear dominios y extensiones)

cd /etc/squid
mkdir listas
cd /etc/squid/listas
touch sitios_denegados
touch ext_denegados

 

En el archivo ext_denegados ingresaremos las extensiones que se bloquearan:

 \.exe$

En el archivo sitios_denegados ingresaremos los dominios que deseemos bloquear:

 .paraguay.com

 

(vim /etc/squid/squid.conf)

#Declaracion de listas de acceso

acl sitios_denegados dstdomain "/etc/squid/listas/sitios_denegados"
acl ext_denegados urlpath_regex  "/etc/squid/listas/ext_denegados "

(Más info: http://wiki.squid-cache.org/SquidFaq/SquidAcl)

 

# IP’s y reglas

http_access allow localnet !sitios_denegados !ext_denegados

 

Por último, recordar que si se utiliza SELinux se debe abrir el puerto del Squid (3128 por defecto) y se debe de configurar los navegadores de las distintas pcs de la red para acceder al proxy.

Acerca del autor: Rodrigo Paszniuk

Ingeniero Informático, amante de la tecnología, la música, el ciclismo y aprender cosas nuevas.




SEGUÍNOS EN FACEBOOK


GITHUB