Exim y LDAP

De Astillas.net

Destinos locales para exim4 en LDAP

Cuando se tienen usuarios virtuales en un directorio LDAP se hace obligatorio obtener de allí los destinos locales para que exim4 sepa cuándo considerarlo local.

Tomamos como premisa que existe los usuarios están registrados bajo un árbol LDAP y que se identifican por el campo uid. Su dirección principal de correo será el contenido de uid en el dominio principal empresa.net.

dn: uid=coco,ou=users,dc=empresa,dc=net
uid: coco 
--

Un enrutador Exim para verificar si un usuario pertenece al dominio debería en este caso buscar directamente por el registro de esta forma:

ldap_users:
        debug_print = "R: LDAP users lookup for $local_part@$domain"
        driver  = accept
        domains = +local_domains
        condition = ${lookup ldap {ldap://LDAP_SERVER/LDAP_BASE??sub?(uid=${quote_ldap:$local_part})}}
        transport = LOCAL_DELIVERY

En este caso hemos definido previamente como macros lo siguiente:

  • LDAP_SERVER = localhost
  • LDAP_BASE = ou=users,dc=empresa,dc=net

y, por supuesto, contamos con que LOCAL_DELIVERY esté apuntando al transporte local correcto.

La condición que se cumple para este fragmento es que el dominio sea uno de los locales y que la búsqueda en el directorio LDAP de algún fruto. Nada más.

Depurando el enrutador

Supongamos que estamos usando Debian y que la configuración de exim4 se presente en fragmentos bajo /etc/exim4/conf.d. Para depurar el funcionamiento de este enrutador haremos lo siguiente:

  1. Creamos el archivo fuente del enrutador en conf.d/router/999_exim4-local_user_ldap.
  2. Recreamos la configuración completa en un archivo temporal: update-exim4.conf -v -o test.conf
  3. Verificamos la síntaxis con: exim4 -bV -C /etc/exim4/test.conf.
  4. Y le pasamos alguna dirección para probar esa parte: exim4 -bt -d+route -C /etc/exim4/test.conf info@empresa.net