Configuration de Postfix - Éléments de base


Introduction

Postfix a plusieurs centaines de paramètres de configuration qui sont contrôlés par l'intermédiaire du fichier main.cf. Heureusement, ils ont des valeurs par défaut. Dans la plupart des cas, vous devez configurer seulement deux ou trois paramètres avant de pouvoir employer le système de courrier:

On supposera ci-dessous que vous avez déjà installé Postfix sur votre système, soit en compilant le code source (comme décrit dans le fichier INSTALL), soit en installant une version déjà compilée.

Ce document parcourt la configuration de base de Postfix. Les informations pour des utilisations particulières telles les clusters de messagerie, les firewalls ou clients reliés par modem peuvent être trouvées dans le fichier STANDARD_CONFIGURATION_README mais ne consultez pas cette page avant d'avoir compris les éléments exposés ici.

Les premiers paramètres dignes d'intérêt indiquent l'identité de la machine et son rôle dans le réseau :

Les valeurs par défaut pour beaucoup d'autres paramètres de configuration sont juste dérivées de ces derniers.

Le prochain paramètre intéressant commande la quantité de courrier envoyée au postmaster local :

Soyez sûr de placer le suivant correctement si vous êtes derrière un proxy ou un traducteur d'adresses réseau, et vous utilisez serveur de MX backup pour un autre domaine :

Les processus démons de Postfix fonctionnent en arrière plan et loguent les problèmes ainsi que leur activité normale via Syslog. Vous devriez faire attention aux éléments suivants :

Si votre machine doit être sécurisée, vous pourriez vouloir lancer Postfix dans un environnement chroot :

Si vous utilisez Postfix sur une interface réseau virtuelle, ou si d'autres serveurs de mail fonctionnent sur votre machine sur des interfaces virtuelles, vous devriez regarder les paramètres ci-dessous :

Fichiers de configuration de Postfix

Par défaut, les fichiers de configuration de Postfix se trouvent dans le répertoire /etc/postfix. Les deux plus importants sont main.cf et master.cf ; ces fichiers doivent appartenir à root. Donner à quelqu'un d'autre les droits d'écriture sur ces deux fichiers (ou sur leurs répertoires parents) revient à lui donner des privilèges root.

Un minimum de paramètres doivent être configurés dans /etc/postfix/main.cf. Les paramètres ressemblent à des variables shell avec deux différences importantes : la première est que Postfix ne sait pas interpreter les apostrophes comme un shell Unix.

Pour renseigner un paramètre :

/etc/postfix/main.cf:
    parameter = value

et pour l'utiliser, il suffit de le faire précéder par un $ :

/etc/postfix/main.cf:
    other_parameter = $parameter

Vous pouvez utiliser $parameter avant que sa valeur soit renseignée (c'est la seconde différence avec un shell Unix). Le langage de configuration de Postfix utilise une évaluation paresseuse et ne regarde la valeur d'un paramètre que lorsqu'il est utilisé.

Postfix utilise des bases de données entre autres pour le contrôle d'accès et les réécritures d'adresses. La page DATABASE_README présente le fonctionnement de Postfix avec des bases Berkeley, LDAP, SQL et d'autres types. Ci-dessous un exemple d'invocation d'une base :

/etc/postfix/main.cf:
    virtual_alias_maps = hash:/etc/postfix/virtual

A chaque changement des fichiers main.cf ou master.cf, lancez la commande suivante en tant que root pour prendre en considération ces changements :

# postfix reload

Quel domaine afficher dans le courrier sortant

Le paramètre myorigin indique le domaine qui apparaît dans le courrier envoyé à partir de cette machine. La valeur par défaut est le nom de machine, $myhostname, qui vaut par défaut le nom de la machine. À moins que vous gériez un site vraiment petit, vous voudrez probablement changer cela en $mydomain, dont la valeur par défaut est le domaine parent de la machine.

Pour la cohérence entre les adresses d'expédition et de réception, myorigin indique également le domaine par défaut qui est automatiquement ajouté aux adresses de destination non qualifiées.

Exemples (utilisez seulement une ligne parmi les suivantes) :

/etc/postfix/main.cf
  myorigin = $myhostname (défaut : envoie le courrier comme "user@$myhostname")
  myorigin = $mydomain (probablement souhaitable : "user@$mydomain")

De quels domaines recevoir le courrier

Le paramètre mydestination indique les domaines pour lesquels cette machine délivrera le courrier localement, au lieu de le transmettre à une autre machine. La valeur par défaut est de recevoir le courrier à destination de la machine elle-même. Regardez la page VIRTUAL_README pour configurer les domaines hébergés par Postfix.

Vous pouvez indiquer zéro ou plusieurs nom de domaine, /des/fichiers et/ou des tables de correspondance type:name (telles hash:, btree:, nis:, ldap:, ou mysql:), séparées par des espaces et/ou des virgules. /un/fichier est remplacé par son contenu; type:name demande qu'une consultation de table soit faite et détermine simplement l'existence : le résultat de la consultation est ignoré.

IMPORTANT : Si votre machine est un serveur de mail pour son domaine entier, vous devez énumérer $mydomain.

Exemple 1 : valeur par défaut.

/etc/postfix/main.cf :
    mydestination = $myhostname localhost.$mydomain localhost

Exemple 2 : serveur de mail d'un domaine entier.

/etc/postfix/main.cf :
    mydestination = $myhostname localhost.$mydomain localhost $mydomain

Exemple 3 : machine avec plusieurs enregistrements DNS de type A.

/etc/postfix/main.cf :
    mydestination = $myhostname localhost.$mydomain localhost
        www.$mydomain ftp.$mydomain

Attention : afin d'éviter des boucles de distribution du courrier, vous devez énumérer tous les noms d'hôtes de la machine, incluant $myhostname, et localhost.$mydomain.

De quels clients relayer le courrier

Par défaut, Postfix relaie le courrier des clients des réseaux autorisés et des domaines autorisés. Les réseaux autorisés sont définis par le paramètre mynetworks. La valeur par défaut autorise tous les clients des sous-réseaux IP auxquels la machine est reliée.

IMPORTANT : Si votre machine est connectée sur un WAN, la valeur par défaut de mynetworks risque d'être trop laxiste.

Exemples (utilisez l'un d'entre eux) :

/etc/postfix/main.cf :
    mynetworks_style = subnet (défaut : autorise les sous-réseaux raccordés)
    mynetworks_style = host   (sécurisé : n'autorise que la machine locale)
    mynetworks = 127.0.0.0/8   (sécurisé : n'autorise que la machine locale)
    mynetworks = 127.0.0.0/8 168.100.189.2/32

Vous pouvez spécifier les réseaux autorisés dans le fichier main.cf ou vous pouvez laisser Postfix le faire pour vous (comportement par défaut). Le résultat dépend de la valeur du paramètre mynetworks_style.

Si vous renseignez mynetworks, Postfix ignore le paramètre mynetworks_style. Pour indiquer une liste de réseaux autorisés, écrivez les réseaux sous la forme CIDR (réseau/masque) ; par exemple :

/etc/postfix/main.cf :
    mynetworks = 168.100.189.0/28, 127.0.0.0/8

Vous pouvez également indiquer le chemin absolu d'un fichier au lieu de lister les réseaux dans le fichier main.cf.

De quelles destination relayer le courrier

Par défaut, Postfix relaie le courrier étranger (provenant de clients hors réseaux autorisés) seulement vers les destinations autorisées. Les destinations extérieures autorisées sont définies avec le paramètre de configuration relay_domains. Par défaut, Postfix autorise tous les domaines (et sous-domaines) listés dans le paramètre mydestination.

Exemples (n'utilisez qu'un seul d'entre eux)

/etc/postfix/main.cf :
    relay_domains = $mydestination (défaut)
    relay_domains =           (sécurisé : ne relaie aucun courrier venant d'étrangers)
    relay_domains = $mydomain (relaie le courrier vers mon domaine et ses sous-domaines)

Quelle méthode de livraison : directe ou indirecte

Par défaut, Postfix tente de délivrer le courrier directement sur Internet. Suivant votre environnement, ce n'est pas toujours possible ou souhaitable. Par exemple, votre système peut être éteint en dehors des heures ouvrées, il peut être derrière un firewall, ou bien encore être connecté via un fournisseur d'accès qui n'autorise pas la livraison directe du courrier. Dans ces cas, vous devez configurer Postfix pour effectuer les livraisons via un relais.

Exemples (n'utilisez qu'un seul d'entre eux)

/etc/postfix/main.cf :
    relayhost =                   (défaut : livraison directe)
    relayhost = $mydomain         (livraison via la passerelle de messagerie de mon domaine)
    relayhost = [mail.$mydomain]  (livraison via la passerelle mail.$mydomain)
    relayhost = [mail.isp.tld]    (livraison via la passerelle du fournisseur d'accès)

L'utilisation des [] évite la consultation des champs MX du DNS. Ne vous inquiétez pas si vous ne savez pas de quoi il s'agit. Assurez-vous seulement d'ajouter les [] autour du commutateur de messagerie fournit par votre FAI, sinon le courrier pourrait ne pas être livré.

La page STANDARD_CONFIGURATION_README montre plusieurs exemples pour les réseaux protégés par firewall ou raccordés par un modem.

Quels incidents rapporter au postmaster

Il est souhaitable d'installer un alias postmaster dans le table aliases(5) pointant vers le nom d'une personne. Cet alias doit exister, de sorte que les gens puissent signaler des problèmes de distribution de courrier. Lorsque vous modifiez la table aliases(5), vérifiez que vous redirigez également le courrier du super-utilisateur.

/etc/aliases:
    postmaster: Vous
    root: Vous

Lancez la commande "newaliases" après avoir changé le fichier /etc/aliases. Au lieu de /etc/aliases, votre fichier d'alias peut être situé ailleurs. Utilisez la commande "postconf alias_maps" pour le trouver.

Le système Postfix lui-même signale également des problèmes à l'alias postmaster. Vous pouvez ne pas être intéressé par tous les types d'événements, aussi ce mécanisme de report d'incidents est configurable. La valeur par défaut signale seulement les problèmes sérieux (ressource, logiciel) au postmaster :

Défaut :

/etc/postfix/main.cf
    notify_classes = resource, software

Ci dessous la signification des classes :

bounce
Informe le postmaster du courrier non livrable. Si le courrier est non livrable, un avis de non-livraison simple est envoyé, avec une copie du message qui n'a pas été livré, ou envoie une retranscription de la session SMTP en cas de rejet du message. Pour des raisons d'intimité, la copie envoyée au postmaster d'un avis de non-livraison simple est tronquée après les en-têtes de message originaux. Voyez également le paragraphe luser_relay et "2bounce" (ci-dessous). La notification est envoyée à l'adresse indiquée au paramètre de configuration bounce_notice_recipient (défaut : postmaster).
2bounce
Si un avis de non-livraison simple est lui-même non livrable, le postmaster reçoit un double de l'avis de non-livraison avec une copie de l'avis de non-livraison simple (non tronqué). La notification est envoyée à l'adresse indiquée au paramètre de configuration 2bounce_notice_recipient (défaut : postmaster).
delay
Informe le postmaster des courriers retardés. Dans ce cas, le postmaster reçoit les en-têtes de message seulement. La notification est envoyée à l'adresse indiquée au paramètre de configuration delay_notice_recipient (défaut : postmaster).
policy
Informe le postmaster des demandes clients qui ont été rejetées en raison de la politique de restriction UCE (anti-spam). Le postmaster reçoit une transcription de la session SMTP entière. La notification est envoyée à l'adresse indiquée au paramètre de configuration error_notice_recipient (défaut : postmaster).
protocol
Informe le postmaster des erreurs de protocole (côté client ou serveur) ou des tentatives d'un client d'exécuter des commandes non implémentées. Le postmaster reçoit une transcription de la session SMTP entière. La notification est envoyée à l'adresse indiquée au paramètre de configuration error_notice_recipient (défaut : postmaster).
resource
Informe le postmaster des courriers non délivrés en raison d'un problème de ressource (par exemple, la file d'attente écrivant les erreurs). La notification est envoyée à l'adresse indiquée au paramètre de configuration error_notice_recipient (défaut : postmaster).
software
Informe le postmaster des courriers non délivrés en raison de problèmes logiciels. La notification est envoyée à l'adresse indiquée au paramètre de configuration error_notice_recipient (défaut : postmaster).

Adresse réseau proxy/NAT

Certains serveurs sont connectés à Internet via un traducteur d'adresse (NAT) ou proxy. Celà signifie que les clients Internet se connectent sur l'adresse du traducteur ou proxy au lieu de se connecter sur l'adresse du serveur de courrier. Le traducteur ou proxy transfère la connexion sur l'adresse réseau du serveur de courrier, mais Postfix ne le sait pas.

Si vous utilisez Postfix derrière un traducteur ou proxy, vous devez renseigner le paramètre proxy_interfaces en lui indiquant toutes les adresses externes des traducteurs ou proxies. Vous pouvez utiliser des noms de machines au lieu d'adresses réseaux.

IMPORTANT : Vous devez indiquer les adresses de vos proxy/NAT lorsque votre système est une machine de secours (MX backup) pour d'autres domaines, autrement les courriers risquent de boucler si le serveur MX principal ne fonctionne pas.

Exemple : machine derrière un traducteur et faisant fonctionner un MX backup

/etc/postfix/main.cf
    proxy_interfaces = 1.2.3.4 (l'adresse externe du traducteur/proxy)

Ce que vous devez savoir sur les logs de Postfix

Les démons Postfix fonctionnent en arrière plan et journalisent les problèmes et l'activité normale via le démon syslog. Le processus syslogd trie les événements par classe et sévérité et les ajoute aux fichiers journaux. Les classes, niveaux et noms de fichiers journaux sont généralement indiqués dans le fichier /etc/syslog.conf. Au minimum, il doit contenir quelque chose comme :

/etc/syslog.conf
    mail.err                                   /dev/console
    mail.debug                                 /var/log/maillog

Après avoir modifié le fichier syslog.conf, envoyez un signal HUP au processus syslogd.

IMPORTANT : beaucoup d'implémentations de syslogd ne créent pas les fichiers. Vous devez les créer avant de (re)lancer syslogd.

IMPORTANT : sur Linux, vous devez faire précéder le fichier du signe "-" (ex: -/var/log/maillog), autrement le processus syslogd utilisera plus de ressources que Postfix.

Normalement, le nombre de problèmes restera faible, mais une bonne idée consiste à lancer toutes les nuits avant la rotation des journaux :

# postfix check
# egrep '(reject|warning|error|fatal|panic):' /fichier/journal

La page DEBUG_README montre la signification des "warnings" et autres labels utilisés dans les journaux générés par Postfix.

Lancer Postfix en environnement "chroot"

Les démons de Postfix peuvent être configurés (via le fichier master.cf) pour fonctionner dans une cage chroot. Le processus fonctionne avec un minimum de privilèges et avec un accès au système de fichier limité à la file d'attente (/var/spool/postfix). Ceci fournit une barrière significative contre les intrusion. La barrière n'est pas impénétrable (le chroot limite seulement l'accès au système de fichier), mais chaque petit pas compte.

A l'exception des démons de Postfix qui délivrent le courrier localement ou qui exécutent des commandes extérieures à Postfix, tous les démons peuvent être mis en cage chroot.

Les sites exigeant un haut niveau de sécurité considéreront sans doute que tous les démons accessibles par réseau doivent être en cage : les processus smtp(8) et smtpd(8), et peut-être le client lmtp(8). Tous les démons du serveur de courrier du domaine de l'auteur (porcupine.org) qui peuvent l'être fonctionnent en cage.

Le fichier /etc/postfix/master.cf par défaut ne configure aucun démon en chroot. Pour activer cette fonctionnalité, éditez le fichier /etc/postfix/master.cf et suivez les instructions inclues dans le fichier. Lorsque vous avez terminé, lancez "postfix reload" pour valider les changements.

Notez qu'un démon en cage chroot résout les noms de fichiers relativement au répertoire de la file d'attente (/var/spool/postfix). Pour réussir une mise en cage, beaucoup de systèmes UNIX nécessitent la création de certains fichiers ou inodes. Le répertoire "examples/chroot-setup" des sources de Postfix recèle différents scripts pouvant vous aider sur différents systèmes d'exploitation.

En plus, vous devrez certainement configurer syslogd pour écouter une socket dans la cage. Ci-dessous un exemple de lignes de commande activant ceci sur différents systèmes :

FreeBSD : syslogd -l /var/spool/postfix/var/run/log

Linux, OpenBSD : syslogd -a /var/spool/postfix/dev/log

Mon nom de machine

Le paramètre myhostname indique le nom de la machine exploitant le système Postfix sous forme qualifiée (machine.domaine). $myhostname est utilisé comme valeur par défaut dans beaucoup d'autres paramètres de configuration de Postfix.

Par défaut, myhostname contient le nom de la machine. Si votre nom de machine n'a pas la forme machine.domaine, ou si vous utilisez Postfix sur une interface virtuelle, vous devrez indiquer le nom de domaine que le système de courrier devrait employer.

Autrement si vous renseignez le paramètre mydomain, Postfix utilisera cette valeur pour générer la valeur du paramètre myhostname au bon format.

Exemples : (utilisez seulement l'un d'entre eux)

/etc/postfix/main.cf
    myhostname = host.local.domain (le nom d'hôte n'est un nom qualifié)
    myhostname = host.virtual.domain (interface virtuelle) 
    myhostname = virtual.domain (interface virtuelle) 

Mon nom de domaine

Le paramètre mydomain indique le domaine de rattachement de $myhostname. Par défaut il est dérivé de $myhostname amputé de la première partie (sauf si le résultat donne un nom de domaine racine).

Inversement, si vous spécifiez mydomain dans main.cf, Postfix utilisera sa valeur pour générer une valeur qualifiée pour le paramètre myhostname.

Exemples (utilisez seulement l'un d'entre eux) :

/etc/postfix/main.cf
    mydomain = local.domain
    mydomain = virtual.domain (interface virtuelle)

Mes adresses réseau

Le paramètre inet_interfaces indique toutes les adresses d'interface réseau sur lesquelles le système Postfix doit écouter ; le courrier adressé à "utilisateur@[adresse de réseau] sera délivré localement, comme s'il était adressé à un domaine énuméré dans $mydestination.

Vous pouvez outrepasser le paramètre inet_interfaces dans le fichier master.cf en faisant précéder un nom de serveur par une adresse IP.

Par défaut Postfix écoute sur toutes les interfaces actives. Si vous utilisez des serveurs de mail sur des interfaces virtuelles, vous devrez indiquer sur quelles interfaces écouter.

IMPORTANT : si vous utilisez un MTA sur des adresses virtuelles, vous devez explicitement renseigner le paramètre inet_interfaces pour l'interface de la machine pour le MTA non-virtuel qui reçoit le courrier pour la machine elle-même : ce MTA ne devrait jamais écouter sur les interfaces virtuelles ou vous risquez une boucle de messagerie.

Exemples (valeur par défaut) :

/etc/postfix/main.cf
    inet_interfaces = all

Exemple :machine faisant fonctionner un ou plusieurs serveurs virtuels. Pour chaque instance de Postfix, utilisez seulement l'un d'entre eux.

/etc/postfix/main.cf
    inet_interfaces = virtual.host.tld         (Postfix virtuel)
    inet_interfaces = $myhostname localhost... (Postfix non-virtuel)

Note: vous devez arrêter et redémarrer Postfix lorsque ces paramètres changent.

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