Autenticación en Apache con Windows Active Directory

Mediante el módulo, mod_authnz_ldap, podremos autorizar el acceso a determinados sitios web en base a la pertenencia del usuario a un grupo determinado del Directorio Activo de Windows.

Para ello, dentro de las directivas <Directory> o <Location> tendremos que incluir la siguiente configuración:

Especificamos que usaremos ldap como método de autenticación:

AuthBasicProvider ldap

Las contraseñas irán en claro pero ya veremos al final del post como hacer que la comunicación sea sobre SSL para evitar «miradas indiscretas»:

AuthType Basic

Si falla el ldap no permitimos otros métodos de autenticación. Si queremos permitirlos, lo dejaremos en «off«:

AuthzLDAPAuthoritative on

Mensaje que verá el usuario al entrar en el sitio web:

AuthName "Acceso restringido"

En el proceso, podemos distinguir dos fases. En la primera de ellas (fase bind, autenticación) el cliente se conecta al servidor LDAP para lo cual necesitamos especificar unas credenciales:

AuthLDAPBindDN "CN=consultas,CN=Users,DC=midominio,DC=local"
AuthLDAPBindPassword password

Además, necesitaremos especificar el atributo a buscar que, en el caso del Directorio Activo, es «sAMAccountName«:

AuthLDAPURL "ldap://dcserver.midominio.local/CN=Users,DC=midominio,DC=local?sAMAccountName?sub?(objectClass=*)"

En la fase II (compare, autorización) se intenta determinar si el usuario tiene derecho para acceder al recurso (por ejemplo, la web de administración de Nagios):

require ldap-group CN=Nagios_users,CN=Users,DC=midominio,DC=local

Por último, decimos que se use el «Distinguished Name» (DN) del usuario al comprobar si pertenece a un dominio:

AuthLDAPGroupAttributeIsDN on

Resumiendo, la configuración requerida es:

# Parámetros básicos de configuración para la autenticación contra LDAP
AuthBasicProvider ldap
AuthType Basic

# Si falla el LDAP el usuario no se puede autentica con otros métodos (ej. htaccess)
AuthzLDAPAuthoritative off
AuthName "Acceso restringido"

# Fase I: AUTENTICACIÓN contra LDAP
AuthLDAPBindDN "CN=consultas,CN=Users,DC=midominio,DC=local"
AuthLDAPBindPassword password
AuthLDAPURL "ldap://dcserver.midominio.local/CN=Users,DC=midominio,DC=local?sAMAccountName?sub?(objectClass=*)"

# Fase II: AUTORIZACIÓN contra LDAP
AuthLDAPGroupAttributeIsDN on
# Autorización a los miembros del grupo Nagios_users
require ldap-group CN=backend_cert,CN=Users,DC=midominio,DC=local

LDAP sobre SSL

Para habilitar la comunicación LDAP sobre SSL, en primer lugar será necesario que el servidor Windows esté configurado para ofrecer un certificado en el puerto 636, tal como vimos en Habilitar LDAP sobre SSL con Active Directory en Windows 2003.

Subimos el certificado de la CA exportado al servidor Apache y lo dejamos, por ejemplo en:

/etc/apache2/ssl/winca.cer

Este fichero debe poder ser leído por Apache, por lo tanto ojo a los permisos, tanto de él como del directorio que lo contiene (por experiencia…).

Podemos testear que tenemos comunicación desde el servidor Apache al servidor Windows usando el cliente de openssl:

openssl s_client -connect dcserver.midominio.local:636 -CAfile /etc/apache2/ssl/winca.cer

Si la comunicación es correcta, aparte de ver el certificado ofrecido por el servidor, deberemos ver que obtenemos «Verify return code: 0 (ok)«:

SSL handshake has read 4875 bytes and written 315 bytes
---
New, TLSv1/SSLv3, Cipher is RC4-MD5
Server public key is 1024 bit
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : RC4-MD5
    Session-ID: 16190000F8034733DCC09F44EB63398C011213CF3A918CF2C45ABBEDDF918B0F
    Session-ID-ctx:
    Master-Key: 270E0E1A4BDED85F149D7CF214A2ED647A968A7CE9F162B1C78449F06BA86E8136887AB8C06CCE14D6EE2F07B078CB0B
    Key-Arg   : None
    Start Time: 1318344445
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)

Para habilitar LDAPS en Apache, en la configuración global de Apache (no en un VirtualHost o un Directory) añadiremos la directiva:

LDAPTrustedGlobalCert CA_BASE64 /etc/apache2/ssl/winca.cer

y modificaremos AuthLDAPURL para que use ldaps en vez de ldap, dejándola como sigue:

AuthLDAPURL "ldaps://dcserver.midominio.local/CN=Users,DC=midominio,DC=local?sAMAccountName?sub?(objectClass=*)"

Reiniciamos Apache y ya sólo nos queda probar que funciona.

En honor al gran SuperCoco,

:wq

tags: , ,
Escrito en Seguridad por Ignacio Vazquez

Follow comments via the RSS Feed | Deja un comentario | Trackback URL

Leave Your Comment

 
desdelaconsola.es