Lo más habitual es que utilicemos Squid en modo transparente para filtrar tráfico en nuestra organización y supongo que se debe a que es la opción que menos trabajo da porque no nos obliga a configurar cada navegador de cada equipo para usar nuestro proxy. No obstante, en ocasiones puede ser muy interesante filtrar en modo no transparente o, si no tenemos posibilidad de cambiarlo todo, usar ambos mecanismos.
Así que, si pensáis en que queréis o necesitáis filtrar por usuario, es imprescindible que éste acceda a internet en modo no transparente. De otro modo, el filtrado por usuario no va a funcionar. ¿Y qué implica ésto? Que el usuario deberá introducir su login y su password cada vez que abra el navegador. Y os dirán que es muy incómodo tener que teclearlo una y otra vez. Bueno, pues les decís que dejen que el navegador guarde los datos de acceso.
Autenticación externa.-
Para lograr que squid filtre por usuario vamos a utilizar un programa de autenticación externo. Si queréis, podéis escribir vuestro propio programa/script de autenticación externo, pero no os preocupéis porque squid ya nos proporciona unos cuantos.
En Debian, encontraréis los programas de autenticación externos que squid nos proporciona en el directorio /usr/lib/squid/. Como nuestra autenticación está basada en ldap, de todos los programas que hay, usaremos dos:
Autenticación externa.-
Para lograr que squid filtre por usuario vamos a utilizar un programa de autenticación externo. Si queréis, podéis escribir vuestro propio programa/script de autenticación externo, pero no os preocupéis porque squid ya nos proporciona unos cuantos.
En Debian, encontraréis los programas de autenticación externos que squid nos proporciona en el directorio /usr/lib/squid/. Como nuestra autenticación está basada en ldap, de todos los programas que hay, usaremos dos:
- ldap_auth: Para validar usuarios.
- squid_ldap_group: Para validar grupos.
Validación de usuarios.-
Antes de configurar squid, lo mejor que podemos hacer es utilizar el programa de autenticación externa desde un terminal para comprobar que funcionan las consultas que el programa va a realizar al servidor ldap. Veamos cómo:
Suponiendo que el nombre de nuestro servidor es "ldap", la base del árbol ldap donde se encuentran los usuarios es "ou=People,dc=instituto,dc=extremadura,dc=es" y utilizamos la versión 3 del protocolo LDAP, abrimos un terminal y ejecutamos el programa:
# /usr/lib/squid/ldap_auth -h ldap -b "ou=People,dc=instituto,dc=extremadura,dc=es" -v 3
Al ejecutarlo, el programa quedará esperando a que introduzcamos un usuario y su contraseña, separados por un espacio en blanco.
Si introducimos un usuario y un password válidos en ldap, nos devolverá OK:
root@ldap:~# /usr/lib/squid/ldap_auth -h ldap -b "ou=People,dc=instituto,dc=extremadura,dc=es" -v 3
profesor claveprofesor
OK
Si introducimos un usuario que no existe o el password introducido no es válido en ldap, nos devolverá ERR Success:
root@ldap:~# /usr/lib/squid/ldap_auth -h ldap -b "ou=People,dc=instituto,dc=extremadura,dc=es" -v 3
profesor claveerronea
ERR Success
Validación de grupos.-
Además de establecer un control por usuario, puede que nos interese realizar también un control por grupos, para establecer reglas en squid que controlen el acceso a los contenidos en función del grupo al que pertenece el usuario.
Al igual que en el caso anterior, lo mejor que podemos hacer es utilizar el programa de autenticación externa desde un terminal para comprobar que funcionan las consultas que el programa va a realizar al servidor ldap. Veamos cómo:
Al igual que en el caso anterior, lo mejor que podemos hacer es utilizar el programa de autenticación externa desde un terminal para comprobar que funcionan las consultas que el programa va a realizar al servidor ldap. Veamos cómo:
Suponiendo que el nombre de nuestro servidor es "ldap", la base del árbol ldap donde se encuentran los grupos es "ou=Group,dc=instituto,dc=extremadura,dc=es" y utilizamos la versión 3 del protocolo LDAP, abrimos un terminal y ejecutamos el programa:
# /usr/lib/squid/squid_ldap_group -h ldap -b "ou=Group,dc=instituto,dc=extremadura,dc=es" -f "(&(objectClass=posixGroup)(cn=%a)(memberuid=%v))" -B "ou=People,dc=instituto,dc=extremadura,dc=es" -v 3 -s sub
Como podéis ver, con el parámetro -f, indicamos el filtro para comprobar que un usuario es miembro de un grupo. Al ejecutarlo, el programa quedará esperando a que introduzcamos un usuario y un grupo, separados por un espacio en blanco.
Si introducimos un usuario y un grupo al que pertenece el usuario, nos devolverá OK:
# /usr/lib/squid/squid_ldap_group -h ldap -b "ou=Group,dc=instituto,dc=extremadura,dc=es" -f "(&(objectClass=posixGroup)(cn=%a)(memberuid=%v))" -B "ou=People,dc=instituto,dc=extremadura,dc=es" -v 3 -s sub
ponente teachers
OK
Si introducimos un usuario que no existe o existe pero no pertenece al grupo introducido, nos devolverá ERR:
# /usr/lib/squid/squid_ldap_group -h ldap -b "ou=Group,dc=instituto,dc=extremadura,dc=es" -f "(&(objectClass=posixGroup)(cn=%a)(memberuid=%v))" -B "ou=People,dc=instituto,dc=extremadura,dc=es" -v 3 -s sub
ponente students
ERR
Cuando terminemos de hacer comprobaciones, pulsamos Ctrl+C y saldremos del programa.
Configurar squid para autenticar usuarios.-
Bien, pues una vez que hemos visto cuáles son los programas de autenticación de usuarios y grupos mediante ldap que squid nos proporciona, ahora vamos a ver cómo configurar squid para autenticar usuarios.
Lo primero que haremos será editar el fichero /etc/squid/squid.conf:
Una vez abierto, buscamos el TAG: auth_param. Si no lo tenéis porque habéis quitado los comentarios de este fichero, buscadlo en el archivo squid.conf original, que viene completamente comentado, para saber en qué parte del squid.conf debéis insertar las siguientes líneas y las insertamos al final de la sección TAG: auth_param:
Como podéis ver, básicamente estamos definiendo el programa que vamos a usar como autenticador y es el mismo que habíamos comprobado que funcionaba desde la línea de comandos.
A continuación nos vamos a la sección del documento donde se definen las ACL. Para ello buscamos el TAG: acl, nos desplazamos al final de esta sección e insertamos la siguiente línea:
Por último, buscamos el TAG: http_access e insertamos una línea como la siguiente:
Esta vez no insertamos la línea al final de la sección. Tendremos que insertarla en el lugar que corresponda de acuerdo con las otras reglas que tengamos establecidas.
Una vez hecho ésto, reiniciamos squid para aplicar los cambios y listo:
Lo primero que haremos será editar el fichero /etc/squid/squid.conf:
# nano /etc/squid/squid.conf
Una vez abierto, buscamos el TAG: auth_param. Si no lo tenéis porque habéis quitado los comentarios de este fichero, buscadlo en el archivo squid.conf original, que viene completamente comentado, para saber en qué parte del squid.conf debéis insertar las siguientes líneas y las insertamos al final de la sección TAG: auth_param:
auth_param basic program /usr/lib/squid/ldap_auth -h ldap -b "ou=People,dc=instituto,dc=extremadura,dc=es" -v 3
auth_param basic children 5
Como podéis ver, básicamente estamos definiendo el programa que vamos a usar como autenticador y es el mismo que habíamos comprobado que funcionaba desde la línea de comandos.
A continuación nos vamos a la sección del documento donde se definen las ACL. Para ello buscamos el TAG: acl, nos desplazamos al final de esta sección e insertamos la siguiente línea:
# acl ldapauth proxy_auth REQUIRED
# http_access allow ldapauth
Esta vez no insertamos la línea al final de la sección. Tendremos que insertarla en el lugar que corresponda de acuerdo con las otras reglas que tengamos establecidas.
Una vez hecho ésto, reiniciamos squid para aplicar los cambios y listo:
# service squid restart
Configurar squid para restringir algunos usuarios.-
Por otra parte, en la sección donde se definen las ACL podríamos definir una nueva como la siguiente:# acl usuariosrestringidos proxy_auth "/etc/squid/acl/deny_users"
Y en la sección de reglas definir reglas de filtrado para los usuarios que especifiquemos en el archivo /etc/squid/acl/deny_users
Configurar squid para autenticar grupos.-
Con lo expuesto anteriormente, todos aquellos usuarios registrados en el servidor ldap podrán navegar por internet. Eso sí, al abrir el navegador se les solicitará que introduzcan su usuario y contraseña.
Si ahora queremos ir un paso más allá y permitir o denegar que los usuarios de un cierto grupo naveguen o que lo hagan de forma limitada, vamos a volver a modificar el fichero squid.conf.
Esta acl externa a la que hemos llamado group_auth, nos va a permitir lograr que squid compruebe si un usuario es miembro de un grupo.
A continuación nos vamos a la sección del documento donde se definen las ACL. Para ello buscamos el TAG: acl, nos desplazamos al final de esta sección e insertamos las acl que queramos. Por ejemplo, podemos especificar una acl para profesores:
Donde, teachers es uno de los grupos registrados en nuestro servidor ldap.
También podríamos crear una acl para usar en reglas de filtrado para alumnos:
Por último, buscamos el TAG: http_access e insertamos reglas de filtrado:
Esta vez no insertamos la línea al final de la sección. Tendremos que insertarla en el lugar que corresponda de acuerdo con las otras reglas que tengamos establecidas y dependiendo de cómo queráis filtrar.
Una vez hecho ésto, reiniciamos squid para aplicar los cambios y listo:
Publicado por primera vez en http://enavas.blogspot.com.es
Si ahora queremos ir un paso más allá y permitir o denegar que los usuarios de un cierto grupo naveguen o que lo hagan de forma limitada, vamos a volver a modificar el fichero squid.conf.
# nano /etc/squid/squid.conf
Una vez abierto el fichero, buscamos la regla:
http_access allow ldapauth
Y la comentamos:
# http_access allow ldapauth
A continuación, buscamos el TAG: external_acl_type y al final de esta sección insertarmos lo siguiente:
external_acl_type group_auth %LOGIN /usr/lib/squid/squid_ldap_group -b "ou=Group,dc=instituto,dc=extremadura,dc=es" -f "(&(objectclass=posixGroup)(cn=%a)(memberuid=%v))" -h ldap -B "ou=People,dc=instituto,dc=extremadura,dc=es" -v 3 -s sub
A continuación nos vamos a la sección del documento donde se definen las ACL. Para ello buscamos el TAG: acl, nos desplazamos al final de esta sección e insertamos las acl que queramos. Por ejemplo, podemos especificar una acl para profesores:
# acl profesores external group_auth teachers
También podríamos crear una acl para usar en reglas de filtrado para alumnos:
# acl alumnos external group_auth students
Por último, buscamos el TAG: http_access e insertamos reglas de filtrado:
http_access allow profesores
Una vez hecho ésto, reiniciamos squid para aplicar los cambios y listo:
# service squid restart
0 comentarios:
Publicar un comentario