Print This Page

Configuration postfix dovecot sur openldap et active directory

Configuration d'un serveur de mail sous openldap et active directory.

 

L'objectif de cette documentation est d'illustrer la mise en oeuvre de la distribution de mails dans un domaine virtuel postfix, en autorisant l'authentification à la fois sur un serveur openldap et sur un serveur Active Directory.
Les configurations des deux annuaires sont spécifiques, mais j'espère que cet exemple pourra être utile à quelques administrateurs de messagerie.

1) Configuration des annuaires.

a) l'annuaire OpenLdap.
les comptes unix sont stockés dans une branche 'People' de l'annuaire. Ils sont organisés hiérarchiquement et sont des objets de type 'posixAccount'. Le point déterminant est qu'on les a également fait hériter de la classe 'inetLocalMailRecipient' ce qui leur permet de disposer d'un attribut 'mailLocalAddress', auquel on a attribué la valeur 'prenom.nom'. Le parcours de l'annuaire peut se faire en 'anonymous', du moins pour les attributs qui nous intéressent.
b)l'annuaire Active Directory
l'annuaire dispose d'un compte spécifique permettant le parcours des attributs qui nous intéressent. Dans la configuration en question le 'userPrincipalName' de l'utilisateur est son adresse mail.

2) Configuration du serveur postfix.


configuration du domaine virtuel:
virtual_mailbox_domains= my.domain.fr
virtual_alias_maps= hash:/etc/postfix/aliases,regexp:/etc/postfix/virtual
virtual_mailbox_base = /home
virtual_minimum_uid = 100
virtual_uid_maps = static:500
virtual_gid_maps = static:500
unknown_virtual_alias_reject_code = 550
unknown_virtual_mailbox_reject_code = 550
virtual_mailbox_maps = ldap:ad_virtual_mbox, ldap:openldap_virtual_mbox,ldap:openldap_virtual_mbox
,hash:/etc/postfix/localmbox

configuration des requêtes sur le serveur AD:

ad_virtual_mbox_server_host =  adserver.my.domain.fr
ad_virtual_mbox_server_port = xxxx #exotic port...
ad_virtual_mbox_timeout = 10
ad_virtual_mbox_bind = yes
ad_virtual_mbox_bind_dn = cn=xxx,ou=xxx,dc=my,dc=domain,dc=fr
ad_virtual_mbox_bind_pw = ******
ad_virtual_mbox_search_base = dc=my,dc=domain,dc=fr
ldap_virtual_mbox_query_filter = (userPrincipalName=%u@my.domain.fr)
ad_virtual_mbox_result_attribute = userPrincipalName
ad_virtual_mbox_result_filter = Mail/%u/Maildir/
ad_virtual_mbox_lookup_wildcards = yes

configuration des requêtes sur le serveur openldap pour la connexion avec un uid unix:

openldap_virtual_mbox_server_host =  ldap.my.domain.fr
openldap_virtual_mbox_server_port = 389
openldap_virtual_mbox_timeout = 10
openldap_virtual_mbox_bind = no
openldap_virtual_mbox_search_base = ou=People,dc=my,dc=domain,dc=fr
openldap_virtual_mbox_query_filter = (uid=%u)
openldap_virtual_mbox_result_attribute = mailLocaAddress
openldap_virtual_mbox_result_filter = Mail/%u/Maildir/
openldap_virtual_mbox_lookup_wildcards = yes

configuration des requêtes sur le serveur openldap pour la connexion avec un identifiant prenom.nom:

openldap_virtual2_mbox_server_host =  ldap.my.domain.fr
openldap_virtual2_mbox_server_port = 389
openldap_virtual2_mbox_timeout = 10
openldap_virtual2_mbox_bind = no
openldap_virtual2_mbox_search_base = ou=People,dc=my,dc=domain,dc=fr
openldap_virtual2_mbox_query_filter = (mailLocalAddress=%u)
openldap_virtual2_mbox_result_attribute = mailLocalAddress
openldap_virtual2_mbox_result_filter = Mail/%u/Maildir/
openldap_virtual2_mbox_lookup_wildcards = yes

3) configuration de dovecot:


extrait du fichier de configuration dovecot.conf:
# %L lowercase
# %n : partie hors domaine du nom de l'utilisateur.
mail_location = maildir:/home/Mail/%Ln/Maildir
auth_verbose = yes
auth_debug = yes
auth_debug_passwords = yes
auth default
passdb ldap
userdb ldap
userdb ldap
user = root
}
fichier dovecot-AD.conf
auth_bind = yes
hosts = adserver.my.domain.fr:xxxx #xxxx: port exotique
ldap_version = 2
#authentification du compte d'exploration
dn=cn=xxxxx,ou=xxxx,dc=my,dc=domain,dc=fr
dnpass = *****
base = dc=my,dc=domain,dc=fr
scope = subtree
user_filter = (&(objectClass=organizationalPerson)(|(userPrincipalName=%u)(userPrincipalName=%u@my.domain.fr)))
pass_filter = (&(objectClass=organizationalPerson)(|(userPrincipalName=%u)(userPrincipalName=%u@my.domain.fr)))
user_global_uid = 500
user_global_gid = 500

fichier de configuration dovecot-Openldap.conf

auth_bind = yes
hosts = ldap.my.domain.fr
ldap_version = 3
#connexion anonyme pour la recherche de l'uid
dn =
dnpass =
base = dc=my,dc=domain,dc=fr
scope = subtree
user_attrs = uid,mailLocalAddress,,,,
user_filter = (&(objectClass=posixAccount)(|(uid=%u)(mailLocalAddress=%u)))
# on remplace a la deuxieme passe le user par le mail local address
# pour une config homogene avec Active Directory
pass_attrs = mailLocalAddress=user,,,,,
pass_filter = (&(objectClass=posixAccount)(|(uid=%u)(mailLocalAddress=%u)))
user_global_uid = 500
user_global_gid = 500