Ce document ne concerne que les versions 2.0 ou supérieures de Postfix.
Ce document donne une vue d'ensemble de la façon dont Postfix peut être employé pour accueillir des domaines Internet multiples, dont la livraison finale se fait sur la machine elle-même et/ou pour transférer le courrier vers d'autres destinations.
Il ne décrit pas seulement les mécanismes de livraison de Postfix mais donne des liens pour utiliser des logiciels de livraison étrangers à Postfix.
Les sujets suivants sont abordés :
La plupart des systèmes Postfix sont la destination finale de seulement quelques noms de domaine. Ceci inclut le nom de machine, [l'adresse IP] de la machine et parfois le nom du domaine parent. Le reste de ce document se réferera à ces domaines comme domaines canoniques. Ils correspondent généralement à la classe d'adresses "domaine local" de Postfix tel que décrit à la page ADDRESS_CLASS_README.
En plus des domaines canoniques, Postfix peut être configuré pour être la destination finale de plusieurs autres domaines. Ces domaines sont appelés "hébergés", car ils ne sont pas directement associés au nom de la machine. Ces domaines hébergés correspondent généralement à la classe d'adresses "domaine virtuel d'alias de postfix et/ou à la classe d'adresses domaine virtuel de boîtes-aux-lettres comme défini à la page ADDRESS_CLASS_README.
Mais attendez, il y a mieux!. Postfix peut être configuré pour être le serveur MX de secours d'autres domaines. Dans ce cas, Postfix n'est pas la destination finale de ces domaines. Il conserve le courrier lorsque le serveur MX principal ne fonctionne pas, et transfère le courrier dès qu'il fonctionne de nouveau. Cette fonctionnalité est utilisée avec la classe d'adresses domaine relayé comme définie à la page ADDRESS_CLASS_README.
Finalement, Postfix peut être configuré comme machine de retransmission du courrier à travers Internet. Evidemment, Postfix n'est pas la destination finale de ces messages. Cette fonction est disponible pour les clients et/ou utilisateurs autorisés et est implémentée par la classe d'adresses domaine par défaut définie à la page ADDRESS_CLASS_README.
L'exemple ci-dessous utilise des tables de correspondances issues de fichiers locaux tels des bases DBM ou Berkeley. Elles sont faciles à déboguer avec la commande postmap :
Exemple: postmap -q info@exemple.com hash:/etc/postfix/virtual
Reportez-vous à la page LDAP_README, MYSQL_README et PGSQL_README pour étudier le remplacement des fichiers locaux par ces bases. Le lecteur est fortement incité à faire fonctionner son système avec des fichiers locaux avant de migrer vers des bases de données réseau et à utiliser la commande postmap pour vérifier que ces bases de données produisent exactement le même résultat que les fichiers locaux.
Exemple: postmap -q info@exemple.com ldap:/etc/postfix/virtual.cf
La plus simple méthode pour ajouter un domaine supplémentaire est de l'ajouter aux domaines listés dans le paramètre de configuration mydestination et d'ajouter les noms d'utilisateur dans le fichier des mots de passe UNIX.
Cette approche ne fait aucune distinction entre les domaines canoniques et hébergés. Chaque utilisateur reçoit le courrier de tous les domaines.
Dans les exemples suivants, nous utiliserons "exemple.com" comme domaine hébergé par la machine locale.
/etc/postfix/main.cf: mydestination = $myhostname localhost.$mydomain ... exemple.com
Les limites de cette approche sont :
L'exemple qui suit fournit une solution pour ces deux limites.
Avec l'approche décrite dans ce paragraphe, chaque domaine hébergé peut avoir ses propres informations, adresses électroniques, etc. Toutefois, il utilise toujours les comptes du système UNIX pour ses livraisons locales.
Avec les domaines d'alias virtuels, chaque adresse hébergée est un alias d'un compte du système UNIX ou d'une adresse extérieure. L'exemple suivant montre comment utiliser ce mécanisme pour le domaine exemple.com.
1 /etc/postfix/main.cf: 2 virtual_alias_domains = exemple.com ...autres domaines hébergés... 3 virtual_alias_maps = hash:/etc/postfix/virtual 4 5 /etc/postfix/virtual: 6 postmaster@exemple.com postmaster 7 info@exemple.com joe 8 sales@exemple.com jane 9 # Décommentez l'entrée suivante pour implémenter une adresse de collecte 10 # @exemple.com jim 11 ...alias virtuel pour d'autres domaines...
Notes :
Ligne 2 : le paramètre virtual_alias_domains indique à Postfix que le domaine exemple.com est un domaine d'alias virtuels. Si vous l'oubliez, Postfix rejetera le courrier (relais interdit) ou ne saura pas le livrer (le courrier pour exemple.com sera renvoyé à la machine elle-même.
Ne listez JAMAIS un domaine d'alias virtuels dans la liste des domaines mydestination!
Lignes 3-8 : le fichier /etc/postfix/virtual contient les alias virtuels. Avec cet exemple, le courrier de postmaster@exemple.com est livré au postmaster local alors que celui de sales@exemple.com est envoyé au compte UNIX jane. Le courrier de toutes les autres adresses du domaine exemple.com est rejeté avec le message d'erreur "User unknown".
Ligne 10 : l'entrée commentée (texte après #) montre comment implémenter une adresse de collecte qui reçoit tout le courrier des adresses du domaine exemple.com non listées dans le fichier d'alias virtuels. Ce n'est pas sans risque. Les spammers essaient d'envoyer du courrier semblant venir et à destination de n'importe quel nom possible. Une adresse de collecte est susceptible de recevoir de nombreux messages de spam ou de notification de messages envoyés avec une adresse n-importe-quoi@exemple.com.
Lancez la commande "postmap /etc/postfix/virtual" après modification du fichier virtual, puis lancez la commande "postfix reload" après avoir modifié le fichier main.cf.
Note : les alias virtuels peuvent correspondre à une adresse locale, à une adresse extérieure ou au deux. Ils ne doivent pas nécessairement correspondre à des comptes du système UNIX de votre machine.
Pour plus de détails sur les fichiers d'alias et en paticulier pour les destinataires multiples, reportez-vous à la page de manuel virtual(5).
Les alias virtuels résolvent un problème : ils permettent à chaque domaine d'avoir ses propres adresses de courrier. Mais il en reste un : chaque adresse virtuelle correspond à un compte UNIX. A chaque nouvelle adresse, vous augmentez les comptes du système UNIX.
Lorsqu'un système accumule les domaines et les utilisateurs, il devient moins souhaitable de créer pour chaque utilisateur un compte sur le système UNIX.
Avec l'agent de livraison de courrier virtual(8) de Postfix, chaque adresse de destination peut avoir sa propre boîte-aux-lettres virtuelle. Contrairement aux domaines d'alias virtuels, les domaines de boites-aux-lettres virtuelles ne nécessitent pas d'avoir une correspondance pour chaque adresse de destination, et les propriétaires d'une boîte aux lettres n'ont pas besoin de disposer d'un compte du système UNIX.
L'agent de livraison de courrier virtual(8) de Postfix examine le chemin de la boîte-aux-lettre de l'utilisateur, l'uid et le gid via des tables séparées suivant l'adresse de destination. Le répertoire de livraison est déterminé en terminant le chemin de la boîte-aux-lettres par "/".
Si vous trouvez saugrenue l'idée d'utiliser plusieurs tables, souvenez-vous que vous pouvez stocker les informations dans une base SQL. Si vous prenez ce chemin, lisez le paragraphe "fichiers locaux et bases de données" de cette page.
Ci-dessous un exemple d'un domaine virtuel de boîtes-aux-lettres "exemple.com" :
1 /etc/postfix/main.cf: 2 virtual_mailbox_domains = exemple.com ...autres domaines... 3 virtual_mailbox_base = /var/mail/vhosts 4 virtual_mailbox_maps = hash:/etc/postfix/vmailbox 5 virtual_minimum_uid = 100 6 virtual_uid_maps = static:5000 7 virtual_gid_maps = static:5000 8 virtual_alias_maps = hash:/etc/postfix/virtual 9 10 /etc/postfix/vmailbox: 11 info@exemple.com exemple.com/info 12 sales@exemple.com exemple.com/sales/ 13 # Décommentez la ligne ci-dessous pour implémenter une adresse de collecte. 14 # @exemple.com exemple.com/catchall 15 ...virtual mailboxes for more domains... 16 17 /etc/postfix/virtual: 18 postmaster@exemple.com postmaster
Notes:
Ligne 2 : Le paramètre virtual_mailbox_domains indique à Postfix que exemple.com est un domaine de boîtes-aux-lettres virtuelles. Si vous l'oubliez, Postfix rejetera le courrier (relais interdit) ou ne sera pas en mesure de le livrer (le courrier de exmple.com bouclera).
Ne listez JAMAIS un domaine de boîtes-aux-lettres virtuelles dans les domaines "mydestination"!
N'inscrivez JAMAIS un domaine de boîtes-aux-lettres virtuelles dans la liste des domaines d'ALIAS virtuels!
Ligne 3 : Le paramètre virtual_mailbox_base indique le répertoire de base pour toutes les boîtes aux lettres virtuelles. C'est un mécanisme évitant les erreurs : le courrier ne peut être livré n'importe où.
Lines 4, 10-15: Le paramètre virtual_mailbox_maps indique la table des correspondances entre les adresses virtuelles et les boîtes-aux-lettres (ou les répertoires). Dans cet exemple, le courrier de info@exemple.com est envoyé dans le fichier /var/mail/vhosts/exemple.com/info et celui de sales@exemple.com est envoyé dans le répertoire de boîtes /var/mail/vhosts/exemple.com/sales/.
Ligne 5 : Le paramètre virtual_minimum_uid indique la limite basse de l'UID du propriétaire de la boîte-aux-lettres ou du répertoire. C'est un mécanisme de sécurité évitant les erreurs. Il évite d'écrire sur des fichiers sensibles.
Lines 6, 7: Les paramètres virtual_uid_maps et virtual_gid_maps indiquent que les boîtes-aux-lettres virtuelles appartiennent à un UID et un GID fixé à 5000. Si ce n'est pas ce que vous souhaitez, indiquez une table de correspondance entre adresses de destination et uid.
Ligne 14 : La ligne commentée (texte après #) montre comment implémenter une adresse de collecte. Soyez prêts à recevoir un grand nombre de spam et de notifications concernant du spam correspondant à n-importe-quoi@exemple.com.
N'inscrivez JAMAIS une BOÎTE-AUX-LETTRES de collecte virtuelle dans le fichier des ALIAS virtuels!!
Lines 8, 17, 18: Comme vous pouvez le constater, il est possible de mixer les alias virtuels avec des boîtes-aux-lettres virtuelles. Nous utilisons cette fonctionnalité pour rediriger le courrier du postmaster de exemple.com au postmaster local. Vous pouvez utiliser ce même mécanisme pour rediriger une adresse vers une adresse externe.
Ligne 18 : Cet exemple suppose que $myorigin est listé dans le paramètre mydestination du fichier main.cf. Dans le cas contraire, indiquez explicitement le domaine dans l'adresse coté droit sinon, le courrier n'ira pas au bon domaine.
Lancez la commande "postmap /etc/postfix/virtual" après avoir modifié le fichier virtual, lancez la commande "postmap /etc/postfix/vmailbox" après modification du fichier vmailbox puis lancez "postfix reload" après avoir modifié le fichier main.cf.
Note : le courrier livré est ajouté avec les privilèges des UID/GID indiqués par les paramètres virtual_uid_maps et virtual_gid_maps. Les versions 2.0 et supérieures de Postfix ne créent pas les répertoires de boîtes-aux-lettres dans des répertoires positionnés en écriture pour tout le monde vous devez les créer par avance. Postfix peut être en mesure de créer les boîtes-aux-lettres lui-même suvant les permissions d'écriture sur le répertoire parent, mais il est préférable de les créer avant.
Pour plus de détail à propos de l'agent de livraison virtuel, reportez-vous à la page de manuel virtual(8).
il s'agit d'une variante de l'exemple de boîtes-aux-lettres virtuelles. Comme précédemment, chaque domaine hébergé peut avoir ses propres boîtes-aux-lettres.
Comme un logiciel extérieur à Postfix sera utilisé pour la livraison finale, certains concepts de Postfix sont nécessaire pour la bonne cohésion de l'ensemble. Pour plus de détails, reportez-vous au paragraphe sur la classe "domaine de boîtes-aux-lettres virtuelles de la page ADDRESS_CLASS_README.
Ce paragraphe décrit le point-de-vue de Postfix. Consultez les pages LMTP_README et MAILDROP_README pour plus d'information sur Cyrus le rejet du courrier.
Dans l'exemple ci-dessous, le courrier du domaine hébergé exemple.com est envoyé à un agent extérieur à Postfix :
1 /etc/postfix/main.cf: 2 virtual_transport = ...voir ci-dessous... 3 virtual_mailbox_domains = exemple.com ...autres domaines... 4 virtual_mailbox_maps = hash:/etc/postfix/vmailbox 5 virtual_alias_maps = hash:/etc/postfix/virtual 6 7 /etc/postfix/vmailbox: 8 info@exemple.com whatever 9 sales@exemple.com whatever 10 # Décommentez la ligne ci-dessous pour implémenter une adresse de collecte. 11 # Configurez le stockage de la boîte-aux-lettres pour accepter toutes les adresses. 12 # @exemple.com whatever 13 ...boîtes-aux-lettres virtuelles pour d'autres domaines... 14 15 /etc/postfix/virtual: 16 postmaster@exemple.com postmaster
Notes :
Ligne 2 : Avec la livraison avec un gestionnaire de boîtes-aux-lettres non-Postfix pour des domaines hébergés, le paramètre virtual_transport indique généralement le client LMTP de Postfix, ou le nom de l'entrée du fichier master.cf qui lance les logiciels extérieurs à Postfix via l'agent de livraison pipe. Quelques exemples (utilisez seulement l'un d'entre eux) :
virtual_transport = lmtp:unix:/path/name (utilise une socket UNIX) virtual_transport = lmtp:hostname:port (utilise une socket TCP) virtual_transport = maildrop: (utilise pipe(8) pour commander)
Un exemple de méthode de livraison maildrop est déjà présenté dans le fichier master.cf par défaut. Reportez-vous à la page MAILDROP_README pour plus d'explications.
Ligne 3 : Le paramètre virtual_mailbox_domains indique à Postfix que le domaine exemple.com doit être livré en utilisant la méthode définie dans le paramètre virtual_transport présenté ci-dessus. Si vous l'oubliez, Postfix rejetera le courrier (relais interdit) ou sera incapable de le livrer (boucle de message).
Ne listez JAMAIS un domaine de boîtes-aux-lettres virtuelles dans la liste des domaines mydestination!
Ne listez JAMAIS un domaine de boîtes-aux-lettres virtuelles dans les domaines d'ALIAS virtuels!
Lines 4, 7-13: Le paramètre virtual_mailbox_maps indique une table de correspondance avec toutes les adresses valides. Le résultat de la consultation est ignoré par Postfix. Dans l'exemple ci-dessus, info@exemple.com et sales@exemple.com sont inscrits dans cette liste et le courrier des autres adresses est rejeté avec la mention "User unknown". Si vous souhaitez utiliser LDAP, MySQL ou PgSQL au lieu des fichiers locaux, lisez le paragraphe "fichiers locaux et bases de données" au début de cette page!
Ligne 12 : La ligne commentée (texte après #) vous montre comment créer une adresse de collecte. Ici aussi, le résultat de la consultation est ignoré par Postfix.
N'inserez JAMAIS l'adresse d'une BOÎTE-AUX-LETTRES virtuelle dans le fichier des ALIAS!!
Note : Si vous indiquez une adresse dans virtual_mailbox_maps, vous devez quand même configurer le système de livraison non-Postfix pour recevoir le courrier de toutes les adresses de ce domaine.
Lignes 5, 15, 16 : comme vous l'avez ci-dessus, il est possible de mixer les alias virtuels et les boîtes-aux-lettres virtuelles. Nous utilisons cette fonctionnalité pour redirige le courrier du postmaster de exemple.com vers le postmaster local. Vous pouvez utiliser le même mécanisme pour rediriger n'importe quelle adresse vers une adresse locale ou extérieure.
Ligne 16 : Cet exemple suppose que $myorigin est listé sous le paramètre mydestination dans le fichier main.cf. Si ce n'est pas le cas, renseignez explicitement le nom de domaine dans la partie droite de la table des alias virtuels, sinon le courrier n'ira pas au bon domaine.
Lancez la commande "postmap /etc/postfix/virtual" après avoir modifié le fichier virtual, lancez "postmap /etc/postfix/vmailbox" après avoir modifié le fichier vmailbox et lancez la commande "postfix reload" après avoir modifié le fichier main.cf.
Certains fournisseurs hébergent des domaines qui n'ont pas (ou peu) de boîtes-aux-lettres locales. Le but principal est de transférer le courrier de ces domaines ailleurs. L'exemple ci-dessous montre comment paramètrer le domaine comme un domaine de transfert :
1 /etc/postfix/main.cf: 2 virtual_alias_domains = exemple.com ...autre domaines hébergés... 3 virtual_alias_maps = hash:/etc/postfix/virtual 4 5 /etc/postfix/virtual: 6 postmaster@exemple.com postmaster 7 joe@exemple.com joe@quelque-part 8 jane@exemple.com jane@quelque-part-ailleurs 9 # Décommentez la ligne ci-dessous pour implémenter une adresse de collecte 10 # @exemple.com jim@encore-un-autre-site 11 ...alias virtuels pour d'autres domaines...
Notes :
Ligne 2 : Le paramètre virtual_alias_domains indique à Postfix que exemple.com est un domaine d'alias virtuels. Si vous l'omettez, Postfix rejetera le courrier avec la mention "relay access denied" ou sera incapable de le livrer (boucle de messages).
Ne listez JAMAIS un domaine d'alias virtuels dans la liste des domaines mydestination!
Lignes 3-11 : Le fichier /etc/postfix/virtual contient les alias virtuels. Dans cet exemple, le courrier de postmaster@exemple.com est envoyé au postmaster local alors que celui de joe@exemple.com est envoyé à l'adresse extérieure joe@quelque-part, et celui de jane@exemple.com vers jane@quelque-part-ailleurs. Les messages des autres adresses sont rejetées avec la mention "User unknown".
Ligne 10 : L'entrée commentée (texte après #) montre comment implémenter une adresse de collecte qui reçoit le courrier de toutes les adresses du domaine exemple.com non listées dans le fichier des alias virtuels. Ce n'est pas sans risque. Les spammers essaient d'envoyer du courrier semblant venir et à destination de n'importe quel nom possible. Une adresse de collecte est susceptible de recevoir de nombreux messages de spam ou de notification de messages envoyés avec une adresse n-importe-quoi@exemple.com.
Lancez la commande "postmap /etc/postfix/virtual" après avoir modifié le fichier virtual et lancez la commande "postfix reload" après avoir modifié le fichier main.cf.
Pour plus de détails sur les fichiers d'alias virtuels et en particulier pour les adressages multiples, reportez-vous à la page de manuel virtual(5).
Les exemples proposés ci-avant ont montré comment redirigé le courrier du postmaster du domaine virtuel vers le postmaster local. Vous pouvez utiliser la même méthode pour toutes les adresses vers une adresse locale ou extérieure.
Il y a une limitation majeure : les alias et boîtes-aux-lettres virtuelles ne peuvent livrer directement une liste de diffusion comme majordomo. La solution est d'utiliser de créer des alias virtuels redirigeant vers l'agent de livraison local :
/etc/postfix/main.cf: virtual_alias_maps = hash:/etc/postfix/virtual /etc/postfix/virtual: listname-request@exemple.com listname-request listname@exemple.com listname owner-listname@exemple.com owner-listname /etc/aliases: listname: "|/chemin/vers/majordomo ..." owner-listname: ... listname-request: ...
Cet exemple suppose que $myorigin est mentionné dans le paramètre mydestination du fichier main.cf. Si ce n'est pas le cas, renseignez explicitement le nom de domaine dans la partie droite de la table, sinon le courrier n'ira pas au bon domaine.
Pour plus d'information sur l'agent de livraison local, reportez-vous à la page de manuel local(8).
Pourquoi cet exemple emploie-t-il un alias virtuel maladroit au lieu d'utiliser un transport plus élégant ? La principale raison est que le courrier de la liste de diffusion serait rejeté avec la mention "User unknown". Faire fonctionner le transport nécessiterait des entrées statiques dans les tables.
Pour mettre en œuvre un répondeur automatique pour des destinataires virtuels en continuant de livrer le courrier normalement, utilisez une table d'alias virtuels :
/etc/postfix/main.cf: virtual_alias_maps = hash:/etc/postfix/virtual /etc/postfix/virtual: user@domain.tld user@domain.tld, user@domain.tld@autoreply.mydomain.tld
Ceci livre le courrier au destinataire et envoie une copie du message à l'adresse qui génère des réponses automatiques. Cette adresse peut correspondre à une autre machine ou être traité localement en mettant en œuvre une entrée dans la table de transport qui livre via un pipe le courrier à destination de autoreply.mydomain.tld à un script qui répond à l'expéditeur.
Ne listez PAS autoreply.mydomain.tld dans mydestination!
/etc/postfix/main.cf: transport_maps = hash:/etc/postfix/transport /etc/postfix/transport: autoreply.mydomain.tld autoreply: /etc/postfix/master.cf: # ============================================================= # service type private unpriv chroot wakeup maxproc command # (yes) (yes) (yes) (never) (100) # ============================================================= autoreply unix - n n - - pipe flags= user=nobody argv=/path/to/autoreply $sender $mailbox
Ceci appelle /path/to/autoreply avec sur la ligne de commande l'adresse du destinataire et l'adresse du destinataire sous la forme utilisateur@domaine.
Pour plus d'information, reportez-vous à la page de manuel pipe(8) et aux commentaires du fichier master.cf.
traduction par Xavier Guimard - Retour au menu