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.:-)





