Sistema de Correo Electrónico integrado con un Directorio Activo de Microsoft o Samba 4 de Sernet (Correcciones – 1)

Saludos, nuevamente.

En la sección B de la tercera parte de esta serie de artículos hice alusión a la parte de la autenticación de Exim 4 contra el servicio LDAP de un Directorio Activo de Microsoft o Samba 4. Bueno, esta parte tiene un error. Me di cuenta cuando estaba configurando algo similar en el servidor de correo interno de un amigo, y gracias al modo de debug de Exim vi todo el proceso y dónde era que fallaba la autenticación.

Me hubiese gustado tener un extracto de la salida del debug para ponerla aquí como ejemplo, pero se me pasó. 🙁

En fin, la modificación que tuve que hacer fue la siguiente:

##################################################################
# AUTHENTICATION CONFIGURATION
# SMTP AUTHENTICACION
##################################################################
begin authenticators

LDAP_AD_AUTH1_MAIL_RCPT_FILTER = (&(|(objectClass=person)(objectClass=user))(sAMAccountType=805306368)(&(memberOf=LDAP_AD_MAIL_SERVICE_ALLOWED_USERS_GROUP_CN)(!(memberOf=LDAP_AD_MAIL_SERVICE_DENIED_USERS_GROUP_CN)))(userPrincipalName=$1))
LDAP_AD_AUTH2_MAIL_RCPT_FILTER = (&(|(objectClass=person)(objectClass=user))(sAMAccountType=805306368)(&(memberOf=LDAP_AD_MAIL_SERVICE_ALLOWED_USERS_GROUP_CN)(!(memberOf=LDAP_AD_MAIL_SERVICE_DENIED_USERS_GROUP_CN)))(userPrincipalName=$2))

LDAP_AD_AUTH1_USER_DN = \
        user=LDAP_AD_BIND_DN \
        pass=LDAP_AD_BIND_PASS \
        ldap:///LDAP_AD_ENTERPRISE_USERS_BASE_DN?\
                LDAP_AD_USER_DN_ATTR?sub?\
                LDAP_AD_AUTH1_MAIL_RCPT_FILTER

LDAP_AD_AUTH2_USER_DN = \
        user=LDAP_AD_BIND_DN \
        pass=LDAP_AD_BIND_PASS \
        ldap:///LDAP_AD_ENTERPRISE_USERS_BASE_DN?\
                LDAP_AD_USER_DN_ATTR?sub?\
                LDAP_AD_AUTH2_MAIL_RCPT_FILTER

plain_server:
    driver = plaintext
    public_name = PLAIN
    server_prompts = :
    server_condition = \
        ${lookup ldap{user=”${lookup ldapdn{LDAP_AD_AUTH2_USER_DN}}” \
                      pass=$3 \
                      ldap:///}\
          {yes}fail}
    server_set_id = $2

login_server:
    driver = plaintext
    public_name = LOGIN
    server_prompts = “Username:: : Password::”
    server_condition = \
        ${if ldapauth{user=”${lookup ldapdn{LDAP_AD_AUTH1_USER_DN}}” \
                      pass=${quote:$2} \
                      ldap:///}\
          {yes}{no}}
    server_set_id = $1

cram_md5_server:
    driver = plaintext
    public_name = CRAM-MD5
    server_prompts = “Username:: : Password::”
    server_condition = \
        ${if ldapauth{user=”${lookup ldapdn{LDAP_AD_AUTH2_USER_DN}}” \
                      pass=${quote:$3} \
                      ldap:///}\
          {yes}{no}}
    server_set_id = $2

Durante el proceso de autenticación en el MTA, los parámetros de entrada (valor del usuario y la contraseña) se guardan en:

  • Autenticación LOGIN: Argumentos $1 y $2 (aunque también se pueden usar $auth1 y $auth2)
  • Autenticación PLAIN o CRAM-MD5: Argumentos $2 y $3 (aunque también se pueden usar $auth2 y $auth3)

Es por ello que se tuve que crear nuevas macros que contuviesen dichos argumentos en la parte de la búsqueda en la URI de LDAP.

NOTA IMPORTANTE: Hasta el momento no he podido lograr completar la parte de la autenticación enviando la contraseña cifrada (CRAM-MD5). En una buena cantidad de foros en Inet se desaconseja su uso. No obstante, es algo que quiero hacer. De momento, el debug de Exim muestra como valor del argumento $2 la dirección de correo completa seguida de un espacio y luego la contraseña cifrada en MD5.:-(

Espero les sirva.:-)

Acerca de Hector Suarez Planas

Es Licenciado en Ciencia de la Computación (3 de julio de 2002). Ha sido Administrador de Red en varias organizaciones, Programador y Analista de Sistemas. Actualmente se desempeña como Administrador de Red del Telecentro Tele Turquino de Santiago de Cuba. Tiene experiencia con sistemas Windows y GNU/Linux, Infraestructura de Redes (Cisco, AlliedTelesis, Netgear y HP ProCurve, Vyatta/VyOS), Servidores tanto físicos como virtuales (plataformas VMWare, Proxmox VE y Xen), Sistemas de Seguridad Informática (Snort/Suricata IDS, appliances AlienVault OSSIM), programador (Delphi, C++ Builder, Perl [poco], Python [algo]), entre otras cosas. Actualmente estoy incursionando en todo lo que tiene relación con Cloud Computing (OpenStack) y Centros de Datos. :-)
Esta entrada fue publicada en Correo Electrónico, Debian, Directorio Activo, Exim, Linux, MTA. Guarda el enlace permanente.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *