Exemples de configuration standard de Postfix


Objet de ce document

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 sur une machine Internet autonome

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.

Postfix sur un client sans rôle

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 :

Postfix sur un réseau local

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 :

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 :

Dans un tel environnement, les utilisateurs ont accès à leur courrier par un ou plusieurs des protocoles suivants :

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.

Postfix sur une passerelle/pare-feu

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 :

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 :

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 :

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.

Livrer une partie seulement des courriers localement.

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 :

Utiliser Postfix derrière un pare-feu

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 :

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.

Configurer Postfix comme serveur MX pour un site distant

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 :

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.

Utiliser Postfix avec une connexion par modem

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".

Postfix sur des machines sans nom réel

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".

Solution 1: Postfix version 2.2 et supérieures

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 :

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.

Solution 2 : Postfix version 2.1 et antérieures

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 :

Valid HTML 4.01! traduction par Xavier Guimard - Retour au menu