Domaines virtuels - Debian 5.0 Lenny
Rédigé par Marc GUILLAUME | Aucun commentaireUne petite présentation des différents types de domaines pour les emails.
Les bases : gestion des domaines virtuels avec une base de données
Avant d'entrer dans les détails des domaines virtuels, il faut tout d'abord comprendre le concept des...
Domaines locaux
Postfix est le composant qui reçoit les mails depuis Internet. De façon classique Postfix connaît les domaines locaux (configurés dans la section mydestination
) et les utilisateurs locaux (ceux qui peuvent se connecter au système et sont listés dans le fichier /etc/passwd
). Cela signifie que tous les utilisateurs du système recevront des mails de n'importe quel domaine local. Par exemple vous pouvez avoir configuré...
mydestination = example1.com, example2.com, example3.com
Admettons que vous ayez créé un utilisateur johndoe sur le système (en utilisant la commande adduser). Cette configuration simple autorisera Postfix à recevoir des mails pour :
- johndoe@example1.com
- johndoe@example2.com
- johndoe@example3.com
Vous ne pouvez pas faire en sorte que le compte de johndoe ne fonctionne qu'avec un seul domaine. On ne peut utiliser cette configuration pour différents utilisateurs dans différents domaines. Cela ne fonctionnera pas non plus avec de très nombreux utilisateurs, car il faudrait leur créer à chacun un compte sur le système.
Domaines Virtuels
Au lieu de définir vos domaines email dans un fichier texte et de créer de nombreux comptes sur le système, il existe un meilleur choix pour un serveur de mails moins basique basé sur Postfix. Les noms de domaine et les comptes utilisateurs peuvent être stockés dans un répertoire de type LDAP ou dans une base de données de type MySQL ou PostgreSQL. Postfix n'a besoin que de savoir comment accéder à cette base de données pour récupérer ces informations de contrôle. Dans une telle configuration les domaines de mail dont Postfix est responsable sont appelés virtual domains
(domaines virtuels). De la même façon, les comptes d'utilisateurs sont appelés virtual users
(utilisateurs virtuels). Ils n'existent que dans la base de données.
Il existe deux sortes de domaines virtuels de base connus par Postfix. Les Virtual alias domains peuvent être utilisés pour la redirection d'une adresse mail vers une autre adresse mail, ou vers des adresses multiples (ce qu'on appelle en anglais aliasing). Les domaines virtuels d'alias ne reçoivent de courrier pour aucun utilisateur. Ils se contentent de les rediriger ailleurs. Les tables de désignation virtual_alias_maps contiennent juste des redirections (une source, une destination) d'utilisateurs ou de domaines vers d'autres adresses mail ou d'autes domaines. Incidemment ces virtual_alias_maps fonctionnent également pour les adresses de courrier locales. Du coup vous n'avez pas réellement besoin d'alias de domaines puisque vous pouvez déclarer tout domaine comme un domaine de courrier virtuel et utilisre les virtual_alias_maps pour les redirections.
L'autre type de domaines virtuels sont les domaines de courrier virtuels, qui sont plus importants dans notre propos. Ils définisent des domaines utilisés pour recevoir effectivement des mails.
Tout cela commence à vous sembler un peu ésothérique ? Pas de panique, regardons simplement un exemple de base de données qui indique quels comptes utilisateur peuvent recevoir des mails et à quel endroit il convient de ranger ces mails.
Utilisateur virtuel | Emplacement de la boîte virtuelle |
---|---|
john@doe.org | /var/mail/doe.org/john/Maildir |
jack@doe.org | /var/mail/doe.org/jack/Maildir |
jeff@foo.org | /var/mail/foo.org/jeff/Maildir |
Le tableau ci-dessus est un exemple tout à fait valide de ce que Postfix attend d'une table de désignation de type "virtual_mailbox_maps
".
Bien que vous puissiez penser que la table de désignation ci-dessus contient toute l'information nécessaire, il y a encore une chose que Postfix s'attend à trouver : une liste des domaines virtuels. Dans l'exemple ci-dessus, cette liste contiendrait doe.org et foo.org. Cette table de désignation s'appellerait "virtual_mailbox_domains
" et ressemblerait à ça :
Domaine virtuel | Une chaîne quelconque |
---|---|
doe.org | banana daiquiri |
foo.org | tequila sunrise |
Vous vous demandez sans doute à quoi correspond cette seconde colonne contenant un texte apparemment inutile. La raison de sa présence est que Postfix attend toujours deux colonnes dans une table de désignation. La colonne de gauche (LHS pour Left-hand side) est classiquement la clé et contient la valeur que Postfix recherche. La colonne de droite (RHS pour right-hand side) et celle qui indique à Postfix l'action à effectuer. Pour la liste des domaines virtuels, il suffit juste qu'il existe une ligne dans la table de désignation où le domaine soit listé dans la colonne de gauche. Certaines personnes écrivent simplement dans la colonne de droite "OK". Cela n'a aucune importance.
Vous avez compris qu'une table de désignation associait une valeur à une autre. Si vous lancez une requête sur la base de données, vous devez indiquer à Postfix de quelles deux colonnes vous voulez parler. Ceci est réalisé dans les fichiers de configuration en ".cf", comme indiqué dans http://www.postfix.org/MYSQL_README.html ou dans "man 5mysql_table".
Exemple de fichier :
# Information on how to connect to your MySQL server user = someone password = some_password hosts = 127.0.0.1 # The database name on the servers. dbname = mailserver # The SQL query template. query = SELECT destination FROM virtual_aliases WHERE source='%s'
Ce fichier définit la façon dont Postfix peut obtenir des données depuis votre base de données. Il serait indiqué pour une table de désignation virtual_alias_maps
(il est utilisé pour la redirection d'email - ce dont nous nous occuperons plus loin). Imaginons que vous enregistriez les lignes ci-dessus dans un fichier de configuration /etc/postfix/mysql-virtual-alias-maps.cf
. Dans ce cas la ligne suivante dans vote fichier /etc/postfix/main.cf
ferait que Postfix interrogerait votre base de données :
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual_alias_maps.cf
Comment cela fonctionne-t-il ? Imaginez que Postfix s'apprête à envoyer un mail à john@doe.net et qu'il veuille vérifier la table de désignation des alias virtuels. Postfix ouvre alors une connexion au serveur MySQL à l'adresse IP 127.0.0.1 en s'identifiant sur le server avec le nom d'utilisateur someone
et le mot de passe some_password
. Il sélectionne la base mailserver
et envoit une requête en remplaçant '%s' par ce qu'il recherche :
SELECT destination FROM virtual_aliases WHERE source='john@doe.net'
dans ce cas la requête renvoit les lignes suivantes :
- jack@example.com
- jeff@example.com
- kerstin@example.com
Ce comportement équivaut à avoir un fichier texte dans lequel figure un alias du style :
john@doe.net -> jack@example.com, jeff@example.com, kerstin@example.com
Tout cela pour vous donner un aperçu de la façon dont les tables de désignation sont utilisées avec une base de données.