Tema:
Esta semana me llamó un colega que recién está incursionando en el mundo de Squid (y en GNU/Linux en general) y me indicaba que estaba configurando unas reglas para restringir la navegación de sus usuarios pero que no le funcionaban.
Al revisar al detalle su configuración me volví a encontrar con un error común que cometemos cuando hacemos nuestros primeros pininos en Squid. A continuación detallo este error común para los novatos y también para los avanzados, considerando que estos últimos podrían hacer hincapie de esto en las clases o asesorias que imparten.
El Caso:
Se tiene un Servidor Proxy Cache implementado con GNU/Linux y Squid dentro de una red local 192.168.31.0/24.
Inicialmente se tienen 2 tipos de usuarios: Jefes y los demás usuarios. Los Jefes tienen acceso a todo y los demás usuarios solo a las páginas del grupo industrial.
La implementación de este requerimiento inicial se ve representada en la sgte configuración:
/etc/squid/usuarios_jefes:
192.168.31.20
192.168.31.21
192.168.31.22
192.168.31.23
/etc/squid/paginas_basicas:
.miempresa.com.ec
.miasociada.com.ec
.misubsidiaria.com.ec
Las ACL's y reglas que se tienen en squid.conf son:
acl usuarios_jefes src "/etc/squid/usuarios_jefes"
acl paginas_basicas dstdomain "/etc/squid/paginas_basicas"
acl red_local src 192.168.31.0/255.255.255.0
http_access allow usuarios_jefes
http_access allow red_local paginas_basicas
http_access deny all
Hasta aquí todo funciona bien, los Jefes tienen acceso a todo y el resto de usuarios de la red local solo a las páginas del grupo industrial.
A partir de este momento nace otro requerimiento, el cual es, de que el area contable de la empresa adicionalmente tenga acceso a las paginas de algunos bancos. Para lo cual se agrega la siguiente configuración:
/etc/squid/usuarios_contabilidad:
192.168.31.41
192.168.31.42
192.168.31.43
192.168.31.44
/etc/squid/paginas_bancos:
.pichincha.com
.bp.fin.ec
.sfbp.fin.ec
.intermatico.com
.bancointernacional.com.ec
.bancomachala.com
.bancoguayaquil.com
.cashbg.bankguay.com
Las ACL's y reglas en squid.conf quedan de la siguiente manera:
acl usuarios_jefes src "/etc/squid/usuarios_jefes"
acl usuarios_contabilidad src "/etc/squid/usuarios_contabilidad"
acl paginas_basicas dstdomain "/etc/squid/paginas_basicas"
acl paginas_bancos dstdomain "/etc/squid/paginas_bancos"
acl red_local src 192.168.31.0/255.255.255.0
http_access allow usuarios_jefes
http_access allow usuarios_contabilidad paginas_basicas paginas_bancos
http_access allow red_local paginas_basicas
http_access deny all
El problema es que los usuarios de Contabilidad siguen sin acceder a las páginas de los bancos.
La Solución:
http_access allow usuarios_jefes
http_access allow usuarios_contabilidad paginas_basicas
http_access allow usuarios_contabilidad paginas_bancos
http_access allow red_local paginas_basicas
http_access deny all
Por qué?:
http_access allow usuarios_contabilidad paginas_basicas paginas_bancos
Es como si yo dijera:
- PERMITIR el acceso SI se cumple: usuarios_contabilidad AND paginas_basicas AND paginas_bancos
Es decir nunca se va a cumplir la condición porque no hay forma que usuarios_contabilidad vaya al mismo tiempo a paginas_basicas y a paginas_bancos.
En cambio:
http_access allow usuarios_contabilidad paginas_basicas
http_access allow usuarios_contabilidad paginas_bancos
Es como si yo dijera:
- PERMITIR el acceso SI se cumple: usuarios_contabilidad AND paginas_basicas
- PERMITIR el acceso SI se cumple: usuarios_contabilidad AND paginas_bancos
OR
Lo cual si se va a cumplir ;)
Para resumir:
La lógica de combinación de ACL's es así:
http_access allow|deny acl AND acl AND ...
OR
http_access allow|deny acl AND acl AND ...
OR
...
Es importante tenerlo bien en claro :D
Referencias:
Comentarios
Creo que tienes un error,
Creo que tienes un error, supongo que de tipeo. Las ACL siguientes:
acl paginas_basicas src "/etc/squid/paginas_basicas"
acl paginas_bancos src "/etc/squid/paginas_bancos"
¿No deberían ser de tipo "dst" o "dstdomain"?
Saludos,
- Edwin
----
Edwin Boza
about.me/edwinboza
Tienes razón
Tienes razón, copy/paste mortal. Ya corrijo ;)
Gracias!
"Transporta un puñado de tierra todos los días y construirás una montaña" - Confucio
floss.iknaxio.net
Buen Artículo Saludos
Buen Artículo
Saludos
Vamos Ecuador, si se puede
Gracias
Yo también pague con esta novatada. Y mas aun, mi tesis de grado era sobre una interfaz gráfica para squid, y no sabia porque diantres no funcionaba, hasta que me puse a leer documentación y allí estaba la respuesta jejeje
"Transporta un puñado de tierra todos los días y construirás una montaña" - Confucio
floss.iknaxio.net
No podía faltar RTFM
No podía faltar RTFM ;)
Definitivamente
Definitivamente RTFM jejeje }:)
"Transporta un puñado de tierra todos los días y construirás una montaña" - Confucio
floss.iknaxio.net
Hay otro punto en el que
Hay otro punto en el que suelen fallar (equivocarse), en uno de los URLs que citas como referencias se puede leer:
[quote]For each request that Squid receives it will look through all the http_access statements in order until it finds a line that matches. It then either accepts or denys depending on your setting. The remaining rules are ignored.[/quote]
Es decir, que las reglas se leen en orden, hasta que se encuentra una regla que hace match, y el resto es ignorado, por lo que si primero se puso un accept y luego se quiere poner un deny, pues no llega hasta el deny, ojo con el orden de las reglas ;)
bye
;)
Eso es cierto
El orden de las reglas también es un error muy común al implementar squid y esto también aplica en iptables.
"Transporta un puñado de tierra todos los días y construirás una montaña" - Confucio
floss.iknaxio.net