Está en la página 1de 5

Squid, OpenLDAP y Gosa.

Contenido:
● Configuración de Squid para autentificar usando los usuario en OpenLDAP.
● Configuración de quotas de navegación por “usuario”, en cantidad de MB
por día, semana, mes, y Horario de Navegación.
● Configuración de ACLs de Squid, según grupo al que pertenece el usuario
en LDAP.
● Sencilla Administración de todos estos parámetros usando Gosa.

Esta configuración esta hecha sobre Debian Etch y todo lo explicado aquí esta
sujeto al sistema de paquetería de Debian y su fácil modo de Instalación, de
igual forma no creo que sea mucha dificultad adaptarlo a otra distro.
Es muy importante que se tenga una noción básica de LDAP, OpenLDAP, Squid y
conocimientos básicos de Linux.
Y como alguien dijo alguna vez, no configure ni media aplicación sin echarle un
vistazo a /var/log/syslog y /var/log/messages.
No voy a explicar aquí que es Squid y como funciona.
Un vez terminada esta configuración quedará un Servidor Proxy (Squid) con
quotas de navegación, horario de Navegación y ACLs dependiendo del grupo al
que pertenecen los usuarios.

Este Manual a sido elaborado por:


Yatniel González Hernández yatniel@gmail.com
Alien Torres Sobrino thebug2k5@yahoo.es
En esta Configuración vamos a asumir que usted tiene un Servidor con
OpenLDAP funcionando así como Gosa configurado correctamente, si este no es
el caso, usted puede ver la guía de Samba-OpenLDAP y Gosa.
Lo primero, instalamos squid.
“apt-get install squid”

Configuramos algunos aspecto básicos de Squid para que este escuchando por el
puerto que deseamos y se este ejecutando correctamente.
Para integrar el Proxy Squid con LDAP vamos a necesitar unos Scripts que vienen
con Gosa, y que podemos encontrar en:
/usr/share/doc/gosa/contrib/scripts/

Una breve descripción de cada Script:


goAgent.pl (No es necesario para Squid, puede ser útil cuando estamos
pensando en Samba donde si necesitaríamos los Home de los Usuarios.)
Crea Directorios Home de los usuarios que están en LDAP, hay que configurar
dentro del script nuestro Server LDAP y nuestra BASE.

goQuota.pl
Lee de nuestro server LDAP las Quotas que hemos puesto y crea una BD con
esas Quotas para una rápida lectura de Squid, podemos poner una tarea en el
Crontab para que se ejecute cada cierto tiempo o modificar el código fuente de
Gosa para cuando demos clic en aplicar haga un php_exec(goQuota.pl).

goQuotaView.pl
Sirve para visualizar la quota de un usuario desde consola, según lo que este en
la BD creado por el script "goQuota.pl".
Nota: En este script debemos comentar una linea, quedando de la siguiente
forma:
#time2str("%d.%m.%Y %H:%M:%S",$cache{TIMESTAMP}),

goSquid.pl
Es el redirector que nos va a llevar a una web una vez hallamos excedido nuestra
Quota ya sea de Navegación en MB o de Tiempo, este script consulta la BD
creado por “goQuota.pl”.

Existe otro script que hace una lista de paginas censuradas y demás, pero no
nos ha funcionado.

Cada uno de estos script necesitan ser editado y debemos ponerle algunos
datos, como nuestro server LDAP, la Base de nuestro server LDAP y en algunos
casos el puerto donde escucha nuestra server LDAP.
Vamos a tomar como ejemplo los datos que debemos ponerle al script
goQuota.pl, si editamos dicho script podemos ver dentro en las primeras lineas
algo como lo siguiente:
my $LDAP_HOST = "ldap.cfg.x.cu";
my $LDAP_PORT = "389";
my $LDAP_BASE = "ou=people,dc=cfg";

Bastaría con ajustarlo a nuestro caso y listo.


Como pueden ver todos los scripts están hechos en perl y vamos a necesitar
instalar una biblioteca de perl para que funcionen correctamente, en debian es
tan sencillo como:
“apt-get install libnet-ldap-perl”

Terminado estos pasos previos podemos pasar a la Configuración de SQUID.

Para autentificar a Squid contra LDAP usamos una linea como la siguiente:
auth_param basic program /usr/lib/squid/ldap_auth -h ldap.cfg.x.cu -b
ou=people,dc=cfg -v3 -f (&(uid=%s)(objectClass=gosaProxyAccount))

-h nos permite especificar el host de nuestro server ldap, ya sea el numero IP o


un nombre DNS como este caso “ldap.cfg.x.cu”.
-b la base de búsqueda que en nuestro caso seria “ou=people,dc=cfg”.
-v3 es que usaremos la version 3 del Protocolo LDAP para conectarnos a nuestro
server.
-f este parámetro nos permite especificar un filtro, done deben cumplirse 2
condiciones, 1- que el UID puesto en el campo usuario exista. 2- que tenga ese
usuario el ObjectClass “gosaProxyAccount”.

Este ObjectClass se le pone a un usuario si abrimos Gosa y editando al usuario


vamos a la Pestaña “Conectividad” y marcamos “Cuenta Proxy”.
Nota: Cuando damos clic en la Pestaña “Conectividad”, recibimos un error,
sobre OpenGroupWare, para quitar el molesto cartel de error editamos:
/usr/share/gosa/plugins/personal/connectivity/class_opengwAccount.inc
Y Comentamos las siguientes lineas:(como es PHP con // al inicio de la linea
resolvemos.)
print_red(_("]OpenGroupware: Your configuration is missing a postgresql extension. Can't perform
any database queries."));
print_red(_("OpenGroupware: Missing database configuration for opengroupware. Can't get or set
any informations."));

Continuando con la Configuración de Squid ahora vamos a crear una ACL Externa
para luego tener ACLs según el grupo al que pertenezca el usuario en LDAP.
external_acl_type ldap_group %LOGIN /usr/lib/squid/squid_ldap_group -R -b
ou=groups,dc=cfg -v3 -f
"(&(objectClass=posixGroup)(cn=%g)(memberUid=%u))" -h ldap.cfg.x.cu

Aquí vemos algo bastante parecido a la linea para autentificar al usuario, donde
creamos una ACL externa con nombre “ldap_group” y con la diferencia que la
Base de búsqueda es “ou=groups,dc=cfg” y además el filtro hace que el usuario
pasado mediante “%u” sea miembro del grupo que más adelante definimos
como una ACL.

Luego tenemos otra linea:


redirect_program /etc/squid/gosa/goSquid.pl
Que lo que hace es consultar la BD de las Quotas credada por “goQuota.pl” y
cuando la quota este excedida nos lleva a una URL que debemos poner dentro
del script.
Quedaría algo como esto en nuestro squid:
authenticate_ip_ttl 5 minutes
auth_param basic children 5
auth_param basic realm Servidor Proxy Cienfuegos!
auth_param basic program /usr/lib/squid/ldap_auth -h ldap.cfg.x.cu -b
ou=people,dc=cfg -v3 -f (&(uid=%s)(objectClass=gosaProxyAccount))
external_acl_type ldap_group %LOGIN /usr/lib/squid/squid_ldap_group -R -b
ou=groups,dc=cfg -v3 -f
"(&(objectClass=posixGroup)(cn=%g)(memberUid=%u))" -h ldap.cfg.x.cu
auth_param basic credentialsttl 5 minutes
auth_param basic casesensitive on
authenticate_cache_garbage_interval 1 hour
redirect_program /etc/squid/gosa/goSquid.pl
redirect_children 5

El camino al script “goSquid.pl” se puede cambiar al lugar que deseemos,


nosotros lo hemos puesto en /etc/squid/gosa/.

Ahora vamos a hacer 2 ACLs como ejemplo para mostrar como seria con la ACL
externa “ldap_group”:
acl password proxy_auth REQUIRED
acl usuario_full external ldap_group user_full
acl usuario_res external ldap_group user_res

Donde “usuario_full” es el nombre de la ACL que estamos creando de Tipo


External usando las reglas de “ldap_group”, y “user_full” es un grupo en LDAP.

De esta forma queda claro, que debemos crear un grupo en LDAP, mediante
Gosa y hacer al usuario que queremos miembro de ese grupo.

Y luego perfectamente podemos hacer en nuestro squid algo como esto:


http_access allow usuario_full

Y con esto los usuario que pertenecen al grupo user_full de LDAP tendrán
navegación.

Nota1: Cuando creamos un usuario en LDAP que pertenece a un grupo y le


activamos la casilla “Cuenta Proxy” que esta en la Pestaña “Conectividad”,
debemos ejecutar el script “goQuota.pl” para que actualice la BD que crea en
el sistema que es consultada por el Script “goSquid” para permitirnos el acceso
si no excedimos la quota o no tenemos quota en absoluto. (es conveniente poner
una tarea en el Crontab que ejecute el script “goQuota.pl” cada poco tiempo,
para ahorrarnos el trabajo de tener que ejecutarlo cada vez que cambiemos la
quota de un usuario.)

Nota2: El tiempo de navegación que sale en Gosa, osea el horario, es el tiempo


donde queremos que el usuario NO NAVEGUE.
Nota3: Si queremos dar acceso a un número de IP o varios números de IP, sin
que se autentifique el usuario, debemos hacer algo como esto:
acl no_autntifica src 192.168.10.1
redirector_access deny no_autentifica all
http_access allow no_autentifica

Lo que hacemos es decirle que las ACLs con determinados números IP o rangos
de Red no pasen por el Redirector.

Ultima Actualización 27 de Mayo del 2008