# vim: set syntax=asyd:
Cette documentation a pour but de d'aider a la mise en place d'un système de
mail complet basé sur LDAP.
- iPlanet Directory Server 5.2 (OpenLDAP est utilisable sans problème)
- Postfix 2.1.4.5
- Debian Sarge / 2.4.27
- Courier 0.47
- OpenSSL 0.9.7e-2
Prérequis :
- Des connaissances LDAP
- Des connaissances SSL
Objectif :
- Système virtuel (les utilisateurs mails n'ont pas besoin de compte unix)
- Accès POP3
- Accès IMAP avec possibilité d'utiliser des répertoires partagées
- Accès authentifié SMTP (pour servir de relai)
- Stockage au format maildir
- Gestion centralisé des informations via un annuaire de type LDAP
-------------- Configuration Postfix -------------------------------------------
Créer un utilisateur standard nommé mailuser (groupe mailuser). Il sera utilisé
pour délivrer/stocker les messages.
$ groupadd mailuser
$ useradd -g mailuser mailuser
(ici uid/gid 1000/1000)
/etc/postfix/main.cf
--8<--
smtpd_helo_required = yes
smtpd_helo_restrictions = reject_unknown_hostname
reject_non_fqdn_hostname
reject_invalid_hostname
smtpd_sender_restrictions = reject_unknown_sender_domain
smtpd_recipient_restrictions = permit_mynetworks
permit_sasl_authenticated
reject_unauth_destination
# On définis le mapping LDAP pour les comptes.
# La recherche s'effectue sur le champ mail (ex: bonfils@debian-fr.org)
# La table retourne le champ uid, puis rajoute la partie /Maildir/
# Le / final indique un stockage sous la forme maildir
accounts_server_host = ldap.domain
accounts_search_base = ou=People,'suffix'
accounts_query_filter = (mail=%s)
accounts_result_attribute = uid
accounts_result_filter = %s/Maildir/
accounts_bind = no
# On utilise le MDA virtual intégré a postfix qui délivre au format maildir
# On utilise un seul UID/GID pour l'ensemble des boites, d'ou l'utilisation
# de la ligne static:1000
# Le répertoire final de distribution est calculé de la facon suivante :
# /home/mailuser + resultat de la recherche ldap:accounts
# Soit par exemple : /home/mailuser/bonfilbr/Maildir/
virtual_transport = virtual
virtual_mailbox_base = /home/mailuser
virtual_uid_maps = static:1000
virtual_gid_maps = static:1000
virtual_mailbox_maps = ldap:accounts
virtual_mailbox_domains = debian-fr.org
# Gestion des certificats
smtpd_tls_key_file = /etc/ssl/postfix.key
smtpd_tls_cert_file = /etc/ssl/postfix.pem
smtpd_tls_CAfile = /etc/ssl/cacert.pem
smtpd_use_tls = yes
# On active l'authentification SMTP via SASL
smtpd_sasl_auth_enable = yes
--8<--
/etc/postfix/sasl/smtpd.conf
--8<--
pwcheck_method: saslauthd
--8<--
-------------- Configuration Courier -------------------------------------------
$ apt-get install courier-authdaemon courier-ldap courier-pop courier-imap
/etc/courier/authdaemonrc
--8<--
# On dit d'utiliser le module LDAP
authmodulelist="authldap"
authmodulelistorig="authcustom authcram authuserdb authldap authpgsql authmysql authpam"
# Nombre de daemon
daemons=5
version=""
authdaemonvar=/var/run/courier/authdaemon
--8<--
/etc/courier/authldaprc
--8<--
LDAP_SERVER ldap.
LDAP_PORT 389
LDAP_PROTOCOL_VERSION 3
LDAP_BASEDN ou=People,<suffix>
LDAP_BINDDN cn=postfix,ou=Security,<suffix>
LDAP_BINDPW secret
LDAP_TIMEOUT 5
LDAP_AUTHBIND 1
LDAP_MAIL mail
# Ne pas utiliser le champ UID/GID de l'entrée
LDAP_GLOB_UID mailuser
LDAP_GLOB_GID mailuser
# Utilise pour construire le chemin de distribution
LDAP_HOMEDIR uid
LDAP_MAILROOT /home/mailuser
LDAP_DEFAULTDELIVERY defaultDelivery
LDAP_FULLNAME cn
LDAP_CLEARPW clearPassword
LDAP_CRYPTPW userPassword
LDAP_DEREF never
LDAP_TLS 0
--8<--
-------------- Configuration SASL ----------------------------------------------
$ apt-get install libsasl2 sasl2-bin libsasl2-modules
/etc/saslauthd.conf
--8<--
ldap_servers: ldap://ldap.domain/
ldap_bind_dn: cn=sasl,ou=Security,'suffix'
ldap_search_base: ou=People,'suffix'
ldap_password: secret
ldap_filter: mail=%u@%d
--8<--
/etc/default/saslauthd
--8<--
START=yes
PARAMS="-m /var/spool/postfix/var/run/saslauthd"
MECHANISMS="ldap"
--8<--
Il faut également modifier le fichier /etc/init.d/saslauthd :
--8<--
[..]
PIDFILE=/var/spool/postfix/var/run/saslauthd/saslauthd.pid
[..]
--8<--
Quelques explications :
Par défaut, le daemon saslauthd ouvre la socket Unix /var/run/saslauthd/mux.
Cependant, comme le processus smtpd de postfix est chrooté dans le répertoire,
il faut modifier le chemin de la socket ouvert par saslauthd. Cependant, le
script d'init.d de saslauthd n'est prévu pour cela. C'est pourquoi il faut
modifier la variable PIDFILE.
-------------- LDAP ------------------------------------------------------------
Exemple d'une entrée utiliateur (au format LDIF) :
--8<--
dn: cn=Bruno Bonfils,ou=infra,ou=people,<suffix>
objectClass: top
objectClass: posixAccount
objectClass: shadowAccount
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: account
uid: bonfilbr
cn: Bruno Bonfils
sn: Bonfils
homeDirectory: /home/bonfilbr
uidNumber: 10095
gidNumber: 10007
givenName: Bruno
mail: asyd@debian-fr.org
mail: asyd@asyd.net
mail: asyd@zshwiki.org
mail: bbonfils@debian-fr.org
loginShell: /bin/bash
userPassword: {CRYPT}wEz0jE0plDfzY
--8<--
Comme vous pouvez le constater, la seule contraite est que l'uid soit unique
pour toutes les entrées. Il ne doit cependant pas être difficile de modifier ce
comportement (pour par exemple utilisée une OU par domaine mail à gérer).