Pourquoi faire ?
- Postfix permet de stocker les informations des tables de correspondance dans des tables de bases de données mysql. Cela permet une plus grand souplesse dans la création et la gestion des adresses email et des comptes utilisateurs.
Voir la [http://postfix.traduc.org/index.php/DATABASE_README.html documentation sur les tables de correspondances] de postfix, et, plus particuliérement, celle détaillant [http://postfix.traduc.org/index.php/MYSQL_README.html les tables mysql] pour le fonctionnement général.
L'usage de ce type de table, associé à l'utilisation des [http://postfix.traduc.org/index.php/VIRTUAL_README.html virtual_mailbox] permet d'avoir des comptes utilisateurs complétement dissociés des comptes unix du serveur.
La configuration du serveur imap (l'utilisation de [:Dovecot/BackendMysql:dovecot] est vivement conseillée) doit bien entendu être synchrone à la configuration mysql de postfix.
Comment faire ?
Notez que les façons de faire sont multiples. Ceci n'est qu'une façon de faire parmi beaucoup.
Cette documentation part du principe que le schéma de base de données utilisé est [http://trac.sn.auf.org/guia/browser/trunk/guia/noyau/greffons/Postfix_MySQL/bases/postfix.sql celui de GUIA] et que la base de donnée est déjà crée et peuplée.
Lister dans virtual_mailbox_domains les domaines qui seront gérés en "virtuel", donc sans aucun utilisateur au niveau unix. Vérifier que ces mêmes domaines ne sont pas listés en même temps dans mydestination ni virtual_domains, pour éviter tout soucis de d'incohérence.
virtual_mailbox_domains = ca.auf.org, secours
- Configurer le système de "virtual_mailbox" pour qu'il cherche ses informations dans une table mysql.
# ce fichier défini la requête à faire pour récuperer les données # ici, la requete sera "quel répertoire pour stocker les mails de telle adresse ?" virtual_mailbox_maps = proxy:mysql:/etc/postfix/virtual_mailbox_maps.cf # un préfixe à ajouter devant chaque chemin de boîte aux lettres. # Plutôt mettre des chemins absolus dans la base pour se simplifier la vie ensuite : # certains soft (postfix) autorises l'ajout de préfixes, d'autre seulement de suffixe. virtual_mailbox_base = /
- Spécifier l'utilisateur unix à qui appartiendront les fichiers des boîtes aux lettres. Il faut créer un utilisateur spécialement dédié à cet usage, et ne pas céder à la facilité en utilisant "mail:mail", déjà existant mais destiné à d'autres usages.
virtual_gid_maps = static:127 virtual_uid_maps = static:127 virtual_minimum_uid = 127
Créer le fichier /etc/postfix/virtual_mailbox_maps.cf] qui décrit la façon dont accéder aux données
user = utilisateur-mysql password = pass-de-utilisateur-mysql hosts = hote-mysql dbname = nom-de-la-base-mysql query = SELECT homedir FROM users WHERE mail = '%s'
et l'utilisateur mysql correspondant:
mysql> grant select on nom-de-la-base-mysql.* to utilisateur-mysql@'localhost' identified by 'pass-de-utilisateur-mysql';
- On peut utiliser des tables mysql partout où des tables hash: (par exemple) existent déjà. Par exemple, dans un virtual_maps :
virtual_maps = proxy:mysql:/etc/postfix/mysql_virtual.cf
Il suffit d'adapter la requête pour aller chercher les informations correspondantes. Ici, le contenu de mysql_virtual.cf pourra être :
user = utilisateur-mysql password = pass-de-utilisateur-mysql hosts = hote-mysql dbname = nom-de-la-base-mysql query = SELECT destination FROM virtuals WHERE source = '%s'
Que faire lorsque ça ne fonctionne pas ?
Toute d'abord, bien entendu, [:VérifierLesLogsEnCasDeSoucis:analyser les logs]
- Si Postfix n'arrive pas à se connecter à la base mysql en général : essayer de se connecter au même serveur en ligne de commande, avec les mêmes paramètres.
- Si certains modules de postfix n'arrivent pas à se connecter à la base, d'autre, si : postfix lance certains de ses modules en chroot. Si le serveur mysql est sur la même machine, cela va passer par un fichier 'socket' plutôt que par une connexion réseau, qui ne sera donc pas accessible dans l'environnement chroot. Vérifier alors que le mot "proxy:" précède bien les entrées "mysql:" correspondantes. Dans ce cas, un proxy dédié à l'interrogation de la base mysql sera lancé, et ferra l'intermédiaire entre postfix et mysql.
- "loops back to myself"
- ... ?