Pourquoi faire ?

Postfix peut stocker les informations des tables de correspondance (alias, virtual et autres) dans des tables MySQL. Cela permet une grande souplesse dans la création et la gestion des adresses email et des comptes utilisateurs : il n'y a plus de fichier texte à manipuler (avec les postmap qu'on oublie toujours) et on peut construire des requêtes SQL "intelligentes" qui sauront calculer les correspondances.

L'usage de ce type de stockage, associé à l'utilisation des virtual_mailbox permet d'avoir des comptes utilisateurs complétement dissociés des comptes Unix du serveur.

Voir la documentation sur les tables de correspondances de Postfix, et, plus particuliérement, celle détaillant les tables mysql pour le fonctionnement général.

Note : la configuration du serveur IMAP/POP (l'utilisation de Dovecot est vivement conseillée) doit bien entendu être synchrone à la configuration MySQL de Postfix. C'est facile car Dovecot peut lui aussi utiliser des tables MySQL.

Comment faire ?

Les façons de faire sont multiples... Ce qui est indiqué ci-dessous n'est qu'une technique parmis d'autres.

Schéma conseillé pour la base de données

Cette documentation part du principe que le schéma de base de données utilisé est celui de GUIA (mais l'utilisation de GUIA n'est pas obligatoire... vu qu'il n'existe pas encore ;) ). Dans la suite on suppose que la base de donnée existe et contient déjà toutes les informations nécessaires.

Exemple typique : gestion de boites aux lettres virtuelles

On place dans virtual_mailbox_domains les domaines qui seront gérés en "virtuel", c'est-à-dire sans aucun utilisateur au niveau Unix. Vérifier que ces domaines ne sont pas dans mydestination ni virtual_domains, pour éviter les incohérences.

On configure le système de "virtual_mailbox" pour qu'il cherche ses informations dans une table mysql :

On spécifie l'utilisateur Unix à qui appartiendront les fichiers de toutes boîtes aux lettres. Il faut créer un utilisateur dédié à ce seul usage et ne pas utiliser "mail:mail", destiné à d'autres usages.

On créé le fichier /etc/postfix/virtual_mailbox_maps.cf] qui décrit la façon d'accéder aux données, c'est-à-dire à quelle base se connecter et quelle requête effectuer :

Et bien sûr il faut créer l'utilisateur MySQL correspondant, en ne lui donnant que le droit "select" sur les tables nécessaires :

Voilà... A partir de là, quand il aura besoin de faire une correspondance entre une boite aux lettre d'un des domaines virtuels et le répertoire où stocker le message, Postfix lancera la rêquete SQL (si aucun résultat ne revient, c'est que l'adresse n'est pas gérée). Il placera alors le message (fichier) dans le répertoire (plus exactement dans le sous-répertoire new/), ce fichier appartenant à l'utilisateur "127".

Généralisation

On peut utiliser des tables MySQL partout où des tables existent déjà, par exemple des tables hash:.

Autre exemple avec virtual_maps :

Il faut ensuite adapter la requête pour aller chercher les informations correspondantes. Ici, le contenu de mysql_virtual.cf pourra être :

Que faire lorsque ça ne fonctionne pas ?

Postfix/BackendMysql (dernière édition le 2008-02-21 22:09:36 par localhost)