Ce document présente diverse configurations typiques de Postfix. Il vous sera utile après que vous ayez suivi les étapes de la configuration basique décrites à la page BASIC_CONFIGURATION_README. Ne l'utilisez pas si vous n'avez pas déjà un Postfix fonctionnant pour l'envoi ou la reception locale.
La première partie montre quelques configurations standard permettant de résoudre certains problèmes spécifiques.
La deuxième partie vient en complément pour des machines dans un environnement particulier.
Postfix devrait fonctionner sans modifier la configuration sur une machine de ce type avec un accès direct à Internet. C'est ainsi qu'il s'installe lorsque vous téléchargez les sources via http://www.postfix.org/.
Vous pouvez utiliser la commande "postconf -n" pour voir quels sont les paramètres modifiés par votre main.cf. Peu de paramètres doivent être configurés pour installer une machine autonome après les recommandations de la page BASIC_CONFIGURATION_README :
/etc/postfix/main.cf: # Optionel: envoie les courriers avec l'adresse utilisateur@nom-de-domaine au lieu de utilisateur@machine. #myorigin = $mydomain # Optionel: renseigne l'adresse externe du pare-feu/proxy. #proxy_interfaces = 1.2.3.4 # Ne pas relayer les courriers des autres machines. mynetworks_style = host relay_domains =
Voyez aussi le paragraphe "Postfix sur des machines sans nom Internet réel" s'il s'applique à votre configuration.
Un client sans rôle est une machine qui peut seulement envoyer du courrier. Il ne reçoit pas de courrier du réseau et n'en livre aucun localement. Ces clients utilisent généralement les protocoles POP, IMAP ou un partage NFS pour accéder aux boîtes-aux-lettres.
Dans cet exemple, nous supposons que le nom de domaine est "exemple.com" et que la machine s'appelle "nullclient.exemple.com". Comme précédemment, les exemples ne montrent que les paramètres n'utilisant pas la valeur par défaut.
1 /etc/postfix/main.cf: 2 myorigin = $mydomain 3 relayhost = $mydomain 4 inet_interfaces = 127.0.0.1 5 local_transport = error:local delivery is disabled 6 7 /etc/postfix/master.cf: 8 Commentez la ligne correspondant à l'agent local
Explications :
Ligne 2 : Utiiliser des adresses d'expédition "user@exemple.com" (au lieu de "user@nullclient.exemple.com"), s'il n'est aucun besoin d'utiliser "user@nullclient.exemple.com".
Ligne 3 : Transférer tout le courrier vers le serveur responsable du domaine "exemple.com". Ceci évite au client de tenter de livrer du courrier vers une destination qu'il ne peut joindre directement.
Ligne 4 : Ne pas accepter de courrier en dehors de la boucle locale.
Lignes 5 à 8 : Désactiver la livraison locale du courrier. Tous les courriers sont routés vers le serveur indiqué à la ligne 3.
Ce paragraphe décrit un environnement comprenant un serveur de courrier et plusieurs machines recevant et envoyant du courrier. Toutes les machines sont configurées pour envoyer le courrier en utilisant des adresses sous la forme "user@exemple.com" et en recevoir à destination d'adresses sous la forme "user@hostname.exemple.com". Le serveur principal reçoit également du courrier à destination de "user@exemple.com". Nous appellerons cette machine "mailhost.exemple.com".
Une conséquence de cette configuration est que le courrier à destination de root et des autres comptes système est envoyé au serveur principal. Reportez-vous au paragraphe "Livrer une partie seulement des courriers localement" ci-dessous pour voir les solutions envisageables.
Comme précédemment, les exemples ne montrent que les paramètres n'utilisant pas la valeur par défaut.
Tout d'abord voyons la configuration - plus simple - des autres machines. Elles envoient le courrier avec des adresse sous la forme "user@exemple.com" et le reçoivent à destination de "user@hostname.exemple.com".
1 /etc/postfix/main.cf: 2 myorigin = $mydomain 3 mynetworks = 127.0.0.0/8 10.0.0.0/24 4 relay_domains = 5 # Optionel: transfère tout le courrier au serveur principal 6 #relayhost = $mydomain
Explications :
Ligne 2 : Envoie le courrier sous la forme "user@exemple.com".
Ligne 3 : Indique le réseau autorisé.
Ligne 4 : Cette machine ne relaie pas le courrier des réseaux non autorisés.
Ligne 6 : Cette ligne est nécessaire si l'accès à Internet n'est pas direct. Voyez ci-dessous "Postfix derrière un pare-feu".
Maintenant voyons la configuration du serveur de courrier. Cette machine envoie le courrier avec une adresse "user@exemple.com" et accepte celui à destination de "user@hostname.exemple.com" et "user@exemple.com".
1 DNS: 2 exemple.com IN MX 10 mailhost.exemple.com. 3 4 /etc/postfix/main.cf: 5 myorigin = $mydomain 6 mydestination = $myhostname localhost.$mydomain localhost $mydomain 7 mynetworks = 127.0.0.0/8 10.0.0.0/24 8 relay_domains = 9 # Optionel: transfert le courrier extérieur au pare-feu 10 #relayhost = [pare-feu.exemple.com]
Explications :
Ligne 2 : Envoie le courrier du domaine "exemple.com" vers la machine mailhost.exemple.com. N'oubliez pas le "." en fin de ligne.
Ligne 5 : Envoie le courrier avec un adresse "user@exemple.com".
Ligne 6 : Cette machine est la destination du courrier à destination de "exemple.com" et de ses machines itself.
Ligne 7 : Indique le réseau interne.
Ligne 8 : Cette machine ne relaie pas le courrier des réseaux externes.
Ligne 10 : C'est utile seulement lorsque le serveur de courrier doit transférer le courrier extérieur via un serveur de mail sur un pare-feu. Les [] indiquent à Postfix de ne pas effectuer de recherche MX.
Dans un tel environnement, les utilisateurs ont accès à leur courrier par un ou plusieurs des protocoles suivants :
Accès via NFS ou équivalent.
Accès via POP ou IMAP.
Boîte-aux-lettres sur la machine habituelle de l'utilisateur.
Dans ce dernier cas, chaque utilisateur a un alias sur le serveur qui transfère le courrier sur sa machine habituelle :
/etc/aliases : joe : joe@joes.preferred.machine jane : jane@janes.preferred.machine
Sur certains systèmes, la base des alias n'est pas /etc/aliases. Pour la trouver, lancez la commande "postconf alias_maps".
Lancez la commande "newaliases" à chaque changement du fichier d'alias.
L'idée ici est de faire fonctionner Postfix sur une passerelle (ou un pare-feu) qui transfère le courrier à destination de "exemple.com" vers une machine interne mais rejete le courrier à destination de "quelque-chose.exemple.com". Problème : avec "relay_domains = exemple.com", le pare-feu accepte également le courrier pour "quelque-chose.exemple.com".
Note : cet exemple nécessite Postfix version 2.0 ou supérieure. Pour connaître la version de Postfix, exécutez la commande "postconf mail_version".
Cette exemple est présenté en plusieurs parties. La première interdit la livraison locale sur le pare-feu, le rendant plus difficile à corrompre.
1 /etc/postfix/main.cf : 2 myorigin = exemple.com 3 mydestination = 4 local_recipient_maps = 5 local_transport = error :local mail delivery is disabled 6 7 /etc/postfix/master.cf : 8 Commentez la ligne correspondant à l'agent local
Explications :
Ligne 2 : Envoie le courrier de cette machine comme "utilisateur@exemple.com", s'il n'existe aucune raison de l'envoyer comme "utilisateur@pare-feu.exemple.com".
Lignes 3-8 : Désactive la livraison locale sur la machine pare-feu.
Pour des raisons techniques, le pare-feu peut devoir recevoir le courrier à destination de postmaster@[adresse IP du pare-feu]. La deuxième configuration proposée ajoute le support de cette fonctionnalité, et en supplément nous ajoutons la boîte-aux-lettres abuse@[adresse IP du pare-feu]. Tout le courrier à destination de ces deux adresses est envoyé vers une adresse interne.
1 /etc/postfix/main.cf : 2 virtual_alias_maps = hash :/etc/postfix/virtual 3 4 /etc/postfix/virtual : 5 postmaster postmaster@exemple.com 6 abuse abuse@exemple.com
Explication :
Puisque mydestination est vide, (voir le premier exemple), seule l'adresse correspondant exactement à $inet_interfaces ou à $proxy_interfaces sont considérées locales. Ainsi "localpart@[a.d.d.r]" correspond à "localpart" dans canonical(5) et virtual(5). Ceci impose de définir l'adresse IP du pare-feu dans le fichier de configuration de Postfix.
La dernière partie de cet exemple paramètre le transfert du courrier, ce qui est le but essentiel.
1 /etc/postfix/main.cf : 2 mynetworks = 127.0.0.0/8 12.34.56.0/24 3 relay_domains = exemple.com 4 parent_domain_matches_subdomains = 5 debug_peer_list smtpd_access_maps 6 smtpd_recipient_restrictions = 7 permit_mynetworks reject_unauth_destination 8 9 relay_recipient_maps = hash :/etc/postfix/relay_recipients 10 transport_maps = hash :/etc/postfix/transport 11 12 /etc/postfix/relay_recipients : 13 user1@exemple.com x 14 user2@exemple.com x 15 . . . 16 17 /etc/postfix/transport : 18 exemple.com smtp:[serveur-interne.exemple.com]
Explication :
Lignes 1 à 7 : Accepter le courrier provenant du réseau interne ($mynetworks), et accepter le courrier extérieur à destination de "user@exemple.com" mais pas "user@anything.exemple.com" (lignes 4 et 5).
Lignes 9 et 12 à 14 : Définissent la liste des adresses valides du domaine "exemple.com" qui peuvent recevoir du courrier depuis Internet. Ceci évite d'encombrer les files d'attente avec du courrier non livrable. Si vous ne pouvez maintenir une liste des destinataires valides, vous pouvez indiquer "relay_recipient_maps =" (valeur vide), ou écrire "@exemple.com x" dans la table relay_recipients.
Lignes 10, 17-18 : Transfère le courrier du domaine "exemple.com" à une machine interne. Les [] indiquent à Postfix de ne pas effectuer de recherche MX.
Indiquez dbm au lieu de hash si votre machine utilise des fichiers dbm au lieu de db. Pour voir les types de tables de correspondances supportées par Postfix, utilisez la commande "postconf -m".
Lancez la commande "postmap /etc/postfix/relay_recipients" à chaque changement de la table relay_recipients.
De même, lancez la commande "postmap /etc/postfix/transport" à chaque changement de la table transport.
Dans certaines installations, il peut y avoir des instances séparées de Postfix traitant le courrier entrant et sortant sur un firewall multi-sites. L'instance entrante de Postfix a un serveur SMTP écoutant sur l'interface externe du firewall et l'instance sortante sur l'interface interne. Dans une telle configuration il est tentant de configurer $inet_interfaces dans chaque instance avec seulement l'adresse de l'interface correspondante.
Dans la plupart des cas, utiliser inet_interfaces en ce sens ne fonctionnera pas, car comme expliqué au paragraphe $inet_interfaces du manuel de référence, l'agent de livraison smtp(8) utilisera également l'adresse de l'interface spécifiée comme adresse source des connexions sortantes et ne pourra pas joindre les domaines de "l'autre coté" du pare-feu. Les symptomes caractérisant ce dysfonctionnement sont que le firewall ne peut se connecter aux machines dans cette situation. Voyez la documentation du paramètre inet_interfaces.
En utilisant des adresses "utilisateur@exemple.com" (au lieu de "utilisateur@machine.exemple.com") le courrier de "root" et des autres comptes système est envoyé vers le serveur de courrier central. Pour livrer ces courriers localement, vous pouvez utiliser les alias virtuels comme suit :
1 /etc/postfix/main.cf : 2 virtual_alias_maps = hash :/etc/postfix/virtual 3 4 /etc/postfix/virtual : 5 root root@localhost 6 . . .
Explications :
Ligne 5 : Comme indiqué dans la page de manuel virtual(5), le nom "root" correspond à "root@site" lorsque "site" vaut $myorigin, lorsque "site" est dans la liste $mydestination, ou lorsqu'il correspond à $inet_interfaces ou $proxy_interfaces.
La plus simple façon d'utiliser Postfix derrière un pare-feu est d'envoyer tout le courrier vers une machine passerelle et de laisser cette machine gérer le routage interne/externe. Des exemples de cette configuration sont vu au paragraphe réseau local ci-dessus. Une approche plus sophistiquée est d'envoyer seulement le courrier exterieur vers cette passerelle et de livrer directement le courrier local. C'est ce qu'utilise Wietse (le créateur de Postfix).
Note : cet exemple necessite Postfix version 2.0 ou supérieure. Pour connaître la version de Postfix, lancez la commande "postconf mail_version".
L'exemple suivant montre un complément de configuration. Vous devez le combiner avec une configuration basique telles que présentées dans la première moitié de ce document.
1 /etc/postfix/main.cf : 2 transport_maps = hash :/etc/postfix/transport 3 relayhost = 4 # Optionel pour une machine pas toujours active 5 #fallback_relay = [gateway.exemple.com] 6 7 /etc/postfix/transport : 8 # Internal delivery. 9 exemple.com : 10 .exemple.com : 11 # External delivery. 12 * smtp :[gateway.exemple.com]
Explications :
Lignes 2 et 7 à 12 : Demande que le courrier de l'intranet soit délivré directement et que le courrier extérieur soit transféré à la passerelle. Bien entendu, cet exemple suppose que le site utilise des enregistrement DNS MX dans l'intranet. Les [] indiquent à Postfix de ne pas effectuer de recherche MX.
Ligne 3 : IMPORTANT : ne renseignez pas le paramètre relayhost dans le fichier main.cf.
Ligne 5 : Ceci évite d'encombrer les files d'attentes lorsque des machines sont éteintes : Postfix tente de délivrer le courrier directement et transfert le courrier non livrable à une passerelle.
Indiquez dbm au lieu de hash si votre machine utilise des fichiers dbm au lieu de db. Pour voir les types de tables de correspondances supportées par Postfix, utilisez la commande "postconf -m".
Lancez la commande "postmap /etc/postfix/transport" à chaque changement de la table transport.
Ce paragraphe montre un complément de configuration. Vous devez combiner l'exemple avec une configuration basique telle que présenté dans la première moitié de ce document.
Lorsque votre serveur est une machine MX SECONDAIRE pour un site distant, c'est tout qu'il vous faut :
1 DNS : 2 le.domaine.a.sauvegarder IN MX 100 your.machine.tld. 3 4 /etc/postfix/main.cf : 5 relay_domains = . . . le.domaine.a.sauvegarder 6 smtpd_recipient_restrictions = 7 permit_mynetworks reject_unauth_destination 8 9 # Vous devez indiquer l'adresse extérieure du traducteur/proxy. 10 #proxy_interfaces = 1.2.3.4 11 12 relay_recipient_maps = hash :/etc/postfix/relay_recipients 13 14 /etc/postfix/relay_recipients : 15 user1@le.domaine.a.sauvegarder x 16 user2@le.domaine.a.sauvegarder x 17 . . .
Lorsque votre système est le serveur MX PRIMAIRE pour un site distant, vous devez indiquer en plus de l'exemple précédent :
18 /etc/postfix/main.cf : 19 transport_maps = hash :/etc/postfix/transport 20 21 /etc/postfix/transport : 22 le.domaine.a.sauvegarder relay :[their.mail.host.tld]
Notes important :
Ne listez pas le.domaine.a.sauvegarder dans mydestination.
Ne listez pas le.domaine.a.sauvegarder dans virtual_alias_domains.
Ne listez pas le.domaine.a.sauvegarder dans virtual_mailbox_domains.
Lignes 1 à 7 : Transfert le courrier d'Internet à destination du domaine "le.domaine.a.sauvegarder" vers le serveur MX primaire de ce domaine.
Ligne 10 : Ceci est un plus si Postfix reçoie le courrier via un traducteur ou un proxy montrant une autre adresse au monde que la machine locale.
Lignes 12-16 : Définit la liste des adresses valides du domaine "le.domaine.a.sauvegarder". Ceci évite à votre file d'attente de stocker des courriers non livrables. Si vous ne pouvez maintenir une telle liste, vous devez indiquer "relay_recipient_maps =" (c'est à dire une valeur vide), ou you devez indiquer une correspondance générique "@domaine.à.sauvegarder x" dans la table relay_recipients.
Ligne 22 : Les [] indiquent à Postfix de ne pas effectuer de recherche MX.
Indiquez dbm au lieu de hash si votre machine utilise des fichiers dbm au lieu de db. Pour voir les types de tables de correspondances supportées par Postfix, utilisez la commande "postconf -m".
Lancez la commande "postmap /etc/postfix/transport" à chaque changement de la table transport.
NOTE : N'utilisez pas la fonctionnalité fallback_relay lorsque vous relayez du courrier pour un MX backup ou primaire. Le courrier bouclera entre le serveur MX et la machine fallback_relay lorsque la destination ne pourra être jointe.
Ce sont les valeurs par défaut sur les versions 2.2 et supérieures de Postfix.
Ce paragraphe concerne les connexions modem déconnectées la majeure partie du temps. Pour les connexions modem reliées 24h/24 7j/7, voyez le paragraphe Postfix sur un réseau local ci-dessus.
Ce paragraphe montre un complément de configuration. Vous devez combiner l'exemple avec une configuration basique telle que présenté dans la première moitié de ce document.
Si vous n'avez pas votre propre nom de machine (comme avec une adresse IP dynamique), étudiez alors le paragraphe "Postfix sur des machines sans nom réel".
Si votre machine est déconnectée la majeure partie du temps, il y a peu d'opportunités pour délivrer le courrier extérieur. Il est préférable de donner le courrier à une machine connectée en permanence. Dans l'exemple suivant, les [] indiquent à Postfix de ne pas effectuer de recherche MX.
/etc/postfix/main.cf : relayhost = [smtprelay.fai.com]
Désactivez la livraison spontanée du courrier (si vous n'avez pas de connexion automatique).
En temps normal, Postfix délivre le courrier à sa convenance. Si votre machine nécessite une connexion automatique, celà déclenchera un appel téléphonique à chaque nouveau courrier et chaque fois que Postfix tentera de livrer un courrier retardé. Pour prévenir ce comportement, désactivez la livraison spontanée.
/etc/postfix/main.cf : defer_transports = smtp
Désactivez les vérifications DNS pour les clients (réseau local connecté par modem).
/etc/postfix/main.cf : disable_dns_lookups = yes
Insérez la ligne suivante dans vos scripts PPP ou SLIP :
/usr/sbin/sendmail -q (chaque fois que li lien Internet est actif)
L'emplacement exact de la commande sendmail dépend su système. Utilisez la commande "postconf sendmail_path" pour connaître son emplacement.
Pour savoir si la file d'attente est vidée, utilisez un script du genre :
#!/bin/sh # Lance la livraison. /usr/sbin/sendmail -q # Laisse quelque temps à Postfix pour démarrer. sleep 10 # Boucle qui attend que la file soit vidée. while mailq | grep '^[^ ]*\*' >/dev/null do sleep 10 done
Si vous avez désactivé la livraison du courrier SMTP spontanée, vous devez également lancer "sendmail -q" à chaque fois que le lien est actif. Ainsi le nouveau courrier est posté.
Ce paragraphe concerne les machine qui n'ont pas de nom Internet. Généralement, il s'agit de machines obtenant leur adresse dynamiquement par DHCP ou modem. Postfix vous laissera envoyer et recevoir du courrier entre comptes sur la même machine avec un nom fantaisiste. Toutefois, vous ne pouvez pas utilisez ce nom lorsque vous envoyez du courrier sur Internet car personne ne pourra vous répondre. Dans les faits, beaucoup de sites refusent le courrier de domaines inexistants
Note : les explications suivantes dépendent de la version de Postfix. Pour connaître la version que vous utilisez, lancez la commande "postconf mail_version".
Postfix 2.2 utilise le remplacement d'adresses generic(5) pour changer les adresses locales fantaisistes par des adresses Internet valides. Ces remplacements ne concernent QUE le courrier qui quitte la machine et pas celui échangé entre utilisateurs de la même machine.
L'exemple suivant présente une configuration additionnelle. Vous devez la combiner avec une configuration de base telle que présentée dans la première partie de ce document.
1 /etc/postfix/main.cf: 2 smtp_generic_maps = hash:/etc/postfix/generic 3 4 /etc/postfix/generic: 5 user1@localdomain.local compte1@mon.fai 6 user2@localdomain.local compte2@mon.autre.fai 7 @localdomain.local compte3+local@mon.fai
Lorsque le courrier est envoyé à une machine extérieure via SMTP :
la ligne 5 remplace user1@localdomain.local par l'adresse fournie par son FAI,
la ligne 6 remplace user2@localdomain.local par l'adresse fournie par son FAI,
la ligne 7 remplace les autres adresses locales par la troisième adresse mais y ajoute une extension d'adresse +local (cat exemple suppose que le FAI supporte ce style d'extensions).
Indiquez dbm au lieu de hash si votre machine utilise des fichiers dbm au lieu de db. Pour voir les types de tables de correspondances supportées par Postfix, utilisez la commande "postconf -m".
Lancez la commande "postmap /etc/postfix/generic" à chaque changement de la table générique.
La solution avec les versions plus anciennes de Postfix est d'utiliser autant que possible des adresses Internet valides et de laisser Postfix faire la correspondance entre ces adresses valides et les adresses locales. Ainsi vous pouvez envoyer du courrier sur Internet et vers les adresses locales non valides sur Internet
L'exemple suivant montre un complément de configuration qui doit être combiné avec l'un de ceux présentés dans la première moitié de ce document.
1 /etc/postfix/main.cf : 2 myhostname = hostname.localdomain 3 mydomain = localdomain 4 5 canonical_maps = hash :/etc/postfix/canonical 6 7 virtual_alias_maps = hash :/etc/postfix/virtual 8 9 /etc/postfix/canonical : 10 your-login-name your-account@your-isp.com 11 12 /etc/postfix/virtual : 13 your-account@your-isp.com your-login-name
Explications :
Lignes 2 et 3 : Indiquez votre domaine local ici. N'utilisez pas de domaines existant réellement sur Internet. Voyer la RFC 2606 pour obtenir des exemples de domaines dont on garantit qu'ils n'appartiennent à personne.
Lignes 5, 9 et 10 : Ceci crée la correspondance entre "votre-login@hostname.localdomain" et "votre-compte@votre-fai.com". Ces lignes sont recommandées.
Lignes 7, 12 et 13 : Livre le courrier destiné à "votre-compte@votre-fai.com" localement. Ces lignes ne sont pas obligatoires, mais utiles.<:p>
traduction par Xavier Guimard - Retour au menu