Autenticación de Usuarios de Navegación en un Directorio


Desde mis inicios como administrador de red siempre he apoyado la máxima del uso de credenciales únicas para la autenticación de los servicios de red no importa que tan variados o diferente sean. Mantener un directorio único centralizado permite una mejor administración, organización y menos puntos de fallos a la hora de analizar la caída de los mismos. La tendencia siempre ha sido a la autenticación contra servidores de bases de datos, ya sean MySQL, SQL Server u Oracle, los cuales en sus tablas de usuarios guardan las contraseñas encriptadas de los diferentes servicios y usuarios. Por mi parte en algún momento implementé esa variante en servidores de navegación (squid) o servicios de correo (postfix) pero al final me decidí (felizmente) por un directorio de usuarios profesional.

Un directorio es un conjunto de objetos con atributos organizados en una manera lógica y jerárquica. El ejemplo más común es el directorio telefónico, que consiste en una serie de nombres (personas u organizaciones) que están ordenados alfabéticamente, con cada nombre teniendo una dirección y un número de teléfono adjuntos. Para entender mejor, es un libro o carpeta, en la cual se escriben nombres de personas, teléfonos y direcciones, y se ordena alfabéticamente. Es un servicio establecido en uno o varios servidores en donde se crean objetos tales como usuarios, equipos o grupos, con el objetivo de administrar los inicios de sesión en los equipos conectados a la red, así como también la administración de políticas en toda la red. Su estructura jerárquica permite mantener una serie de objetos relacionados con componentes de una red, como usuarios, grupos de usuarios, permisos y asignación de recursos y políticas de acceso.

Los servicios de directorio más conocidos mundialmente son el Directorio Activo de Microsoft y OpenLDAP una vía totalmente libre de costo que implementa muchas de las posibilidades de su homólogo en Windows (aunque todavía muy lejos).

Supongamos el siguiente escenario. Nuestra empresa de dominio midominio.com brinda servicios de navegación a los clientes internos a través de un proxy squid, las credenciales de autenticación serán las mismas del Directorio Activo que establece las políticas en nuestro dominio. Con ello garantizamos credenciales únicas para entrar a cada una de las estaciones y la navegación de internet. Debemos tener en cuenta que en nuestro directorio se encuentran todos los empleados y directivos de la empresa pero solo personal autorizado tendrá salida a la internet.

Básicamente el proceso de navegación y la autenticación cuenta con dos pasos, cada uno excluyente por sí mismo, quiere decir que ambos son de cumplimiento obligatorio. Primero el usuario que inserta sus credenciales deben existir en el Directorio (lo cual es cierto si es empleado o directivo) y la autenticación del mismo debe ser satisfactoria. Si este paso se cumple pues debemos proceder a revisar si además el usuario es parte de ese selecto grupo que puede navegar en internet, solo entonces el acceso es aceptado.

El proxy squid trae en su implementación una serie de helpers, que no son más que pequeños scripts para realizar tareas externas al mismo, devolviendo SUCCESS o FALSE en cualquier caso. A nuestra disposición se encuentra un helper para cada uno de los pasos anteriores.

Configuración del squid.conf (Supongamos que la instalación y configuración básica del squid se ha realizado satisfactoriamente)

  # Active Directory
  auth_param basic program /usr/lib/squid3/squid_ldap_auth -R -b "ou=Users,dc=midominio,dc=com" -D squid@midominio.com -W /etc/squid3/ldappass.txt -f sAMAccountName=%s -v 3 -s sub -h ad.midominio.com
  auth_param basic children 10
  auth_param basic realm proxy.midominio.com
  auth_param basic credentialsttl 2 hour

  # Groups ACL
  external_acl_type Group %LOGIN /usr/lib/squid3/squid_ldap_group -R -b "ou=Users,dc=midominio,dc=com" -D squid@midominio.com -W /etc/squid3/ldappass.txt -f "(&(objectclass=user)(sAMAccountName=%u)(memberof=cn=%g,dc=midominio,dc=com))" -h ad.midominio.com

  # TAG: acl
  acl GrupoInternet external Group Internet

  http_access allow GrupoInternet
  http_access deny all

Como ven el primer helper /usr/lib/squid3/squid_ldap_auth autentica las credenciales proporcionadas por los usuarios, los mismos los busca en el servidor ad.midominio.com dentro de la unidad organizacional Users. Si el proceso devuelve SUCCESS, el helper /usr/lib/squid3/squid_ldap_group verifica que el usuario pertenezca al grupo Internet del directorio activo. Permitimos el acceso de todos los que pasen ambos pasos y denegamos todo.

Esta configuración es básica pero totalmente funcional, pueden adoptarla a su entorno, quizás necesiten más grupos de acceso dependiendo de las reglas propias de la entidad. Es totalmente recomendable remitirse a las documentaciones del Directorio Activo de Windows o LDAP si lo prefieres, así como el sitio oficial del proxy squid.

Documentación Directorio Activo

OpenLDAP

Proxy squid

Latest posts by Leroy Ley (see all)