Control de acceso en Squid | Algo de Linux

jueves, 31 de octubre de 2013

Control de acceso en Squid

Con este post tan sólo pretendo hacer una "breve" introducción al control de acceso mediante Squid, algo que considero fundamental para entender lo más básico a la hora de establecer nuestras propias reglas.

Archivos de configuración.-
Antes de nada, recordar que toda la configuración de squid se encuentra por defecto en el fichero /etc/squid/squid.conf. No obstante, siempre podemos separar ciertas configuraciones en otros ficheros e incluirlas mediante "include" en el fichero principal. Por ejemplo:

Nosotros tenemos separada la configuración de la caché en un archivo /etc/squid/squid-cache.conf o las reglas de refresco en un archivo /etc/squid/squid-cache-refresh.conf. La configuración de estos dos ficheros, se añade al fichero squid.conf simplemente mediante dos includes dentro de dicho fichero:

include /etc/squid/squid-cache.conf
include /etc/squid/squid-cache-refresh.conf

Esto nos va a simplificar el control de las configuraciones.

Cómo se lleva a cabo el control de acceso.-
Básicamente, el control de acceso se realiza mediante dos componentes:
  • Listas de Control de Acceso (ACL), que nos van a permitir definir listas de acceso basadas en IP's, MAC's, nombres de dominio...
  • Reglas de acceso, que nos van  a proporcionar la posibilidad de permitir o denegar el acceso mediante las listas de control de acceso.
Defninición de listas de control de acceso:
Una lista de control de acceso tiene una de las siguientes formas:
  • acl nombreacl tipoacl [-i] valor...
  • acl nombreacl tipoacl [-i] "archivo"
Esto significa que podemos definir los elementos afectados por la acl en la misma línea de configuración (acl nombreacl tipoacl [-i] valor...) o en un archivo (acl nombreacl tipoacl [-i] "archivo").

La opción "-i" nos va a permitir eliminar la restricción de distinguir entre mayúsculas y minúsculas.

Un ejemplo del primer caso: 
acl equipodirectivo src 192.168.1.10-192.168.1.25/32

Un ejemplo del segundo caso: 
acl equipodirectivo src "/etc/squid/acl/ips_equipodirectivo"

En el primer caso, separaríamos cada uno de los elementos mediante un espacio en blanco.
En el segundo caso, colocaríamos la definición de IP's dentro del archivo, especificando cada elemento en una línea.

Definición de reglas de acceso:
Una regla de acceso se define mediante la directiva http_access:
  • http_access allow|deny [!]nombreacl ...
Con http_access vamos a permitir o denegar una o varias acl.

El símbolo "!" es opcional y sirve para negar una acl. Lo usaremos cuando queramos aplicar lo contrario de una acl definida.

Ejemplos:
http_access allow equipodirectivo
http_access deny all

Flujo de procesamiento.-
  • Squid analiza las reglas de una en una en el orden en el que están escritas en el documento de configuración, de arriba a abajo.
  • La primera regla que coincida es la que se aplica, interrumpiendo el procesamiento de las reglas posteriores.
  • En una regla puede haber más de una acl. 
  • Si en una regla de acceso hay más de una acl, todas las acl's de la regla deben cumplirse para que se aplique. 
  • Si después de evaluar todas las reglas de acceso, no se encuentra ninguna regla que se cumpla, se realizará al acción contraria a la definida por la última regla de la lista. Debido a ésto,  es conveniente que definamos una última regla al final que deniegue el acceso: http_access deny all

Publicado por primera vez en http://enavas.blogspot.com.es