Recevoir des mails sur une adresse Picasoft
Notre MTA est postfix; pour que les boîtes mails soient indépendantes des fichiers et utilisateurs existant sur le conteneur hôte, on a fait le choix d’utiliser des virtual mailboxes.
Nos politiques de relai de mail font que tous les mais qui passent à travers notre serveur doivent respecter l’une des contraintes suivantes:
- Le destinataire a une adresse en @picasoft.net
- L’émetteur a une adresse en @picasoft.net, et le relai de mail a été demandé par un utilisateur authentifié.
Le bind décrit sur cette page ajoute une contrainte supplémentaire: l’adresse aaa@picasoft.net doit exister, c’est-à-dire qu’un bind LDAP doit permettre de trouver un utilisateur dont le login est aaa. (Les boîtes mail partagées ne sont pas encore implémentées, pour le moment on considère que une adresse ⇔ un utilisateur).
Ainsi, à chaque fois qu’un courriel transite, Postfix va chercher dans l’ensemble de l’annuaire ldap un utilisateur correspondant à la partie gauche de l’adresse; si il n’en trouve pas, alors le mail ne sera pas transmis (relayé).
Implémentation
Elle se fait au niveau de /etc/postfix/main.conf
postconf -e "virtual_mailbox_maps = ldap:/etc/postfix/ldap-virtual-mailbox-maps"
Où ldap-virtual-mailbox-maps est un fichier texte qui décrit comment s’effectue le bind LDAP. Il peut être placé n’importe où et porter n’importe quel nom. Voici un exemple de configuration possible:
#hôte, port et protocole (on pourrait utiliser ldaps) server_host = ldap://ldap.test.picasoft.net:389 #niveau de l'arborescence LDAP à partir duquel on commencer à chercher dans les entrées search_base = dc=picasoft,dc=net #filtre permettant d'accepter certaines entrées: ici, le paramètre en entrée est %s #uid correspond au champ LDAP utilisé, on aurait pu aussi utiliser cn, ou n'importe quel autre champ, c'est arbitraire. query_filter = uid=%s #ce qui sera retourné par la requête. Comme le but est seulement de vérifier si l'adresse existe, il faut juste que ce champ soit non vide. result_attribute = uid #le bind au serveur (un utilisateur spécial utilisé pour se connecter au LDAP et lire son arborescence (à l'exception des hashs de password)) bind = yes bind_dn = cn=nss,dc=picasoft,dc=net bind_pw = rdonly