Page précédente Page suivante Table des matières

3. Première configuration

3.1 Small is beautiful...

La première chose qui frappe, quand on se plonge dans la documentation fournie avec postfix est son apparente simplicité... Finie la syntaxe ésotérique du sendmail.cf, finie la nécessité de passer par une ensemble de macros pour oser espérer comprendre un tant soit peu ce que l'on est en train de configurer : avec postfix tout se passe par l'adaptation d'un seul fichier, main.cf, normalement placé, comme tous ses autres fichiers de configuration, dans le répertoire /etc/postfix/. Enfin, presque... nous verrons plus tard que d'autres fichiers doivent être adaptés, mais tous ces fichiers quels qu'ils soient sont humainement lisibles et richement commentés.

À la différence de sendmail, programme monolithique par excellence, postfix est composé de nombreux petits programmes réalisant chacun une tâche bien définie. Pour la plupart, ces programmes ne sont pas vus de l'utilisateur mais appelés directement par le programme serveur /usr/sbin/postfix, lui-même lancé au démarrage du système via un script, selon la méthode System V habituelle (en tous cas, sur les systèmes Linux). Sur mon système, le script en question s'appelle /etc/init.d/postfix/, j'utiliserai donc cet emplacement dans ce qui suit, adaptez selon le vôtre.

3.2 Démarrage de postfix

Ainsi que nous venons de le dire, c'est le script /etc/init.d/postfix (auquel le processus init passe l'option start) qui lance le serveur /usr/sbin/postfix. Celui-ci lance à son tour le serveur principal, /usr/lib/postfix/master qui prend alors les choses en main et s'occupera de lancer les autres démons selon les besoins. Ces démons se termineront après avoir accompli leurs tâches ou après une certaine période d'inactivité. Seul le démon de gestion de la file d'attente, reste en permanence en activité.

Tout ceci peut se vérifier par une simple commande ps :

$ ps axf
...
583  ?  S    0:00 /usr/lib/postfix/master 
584  ?  S    0:00  \_ pickup -t fifo -c 
585  ?  S    0:00  \_ qmgr -t fifo -u -c 
...

qui met en évidence la présence du démon master et le fait qu'il a lui-même lancé les démons pickup et qmgr.

pickup est responsable de la récupération des courriers locaux : pour des raisons de compatibilité, postfix utilise un programme nommé /usr/sbin/sendmail (qui n'est pas le programme sendmail que nous évoquions plus haut). Ce programme est utilisé pour déposer les courriers locaux dans la file d'attente maildrop : tous les courriers qui sont postés par tous les utilisateurs sont déposés dans cette file.

pickup s'occupe de les récupérer et de les passer au démon cleanup qui s'occupera de remplir les en-têtes manquants, de gérer les enveloppes des messages et les déposera enfin dans une autre file d'attente, nommée incoming. Puis, cleanup avertira le gestionnaire de file d'attente, qmgr, qu'un nouveau courrier est arrivé.

qmgr s'occupera alors de délivrer le courrier dans les boîtes aux lettres de leurs destinataires et de gérer les délivrances qui ont échoué.

Nous verrons plus loin les autres démons entrant en jeu dans la délivrance du courrier. Passons maintenant à une configuration minimum pour tester postfix en local.

3.3 Configuration minimale

Notre but, ici, est d'arriver à poster et recevoir du courrier en local : par exemple, root doit pouvoir poster un message à l'utilisateur babe. Ce dernier doit pouvoir récupérer le message, le lire et répondre à root. Pour simplifier, nous utiliserons le programme canonique mail.

Nous supposerons que notre machine s'appelle alex et que notre domaine s'appelle linux-france.com. Vérifions tout de suite que c'est le cas :

$ hostname
alex.linux-france.com

Ainsi que nous l'avons déjà dit, la majeure partie du travail consiste à adapter le fichier /etc/postfix/main.cf à nos besoins. Bien entendu, tout cela doit se faire sous le compte root.

La première chose à faire est de sauvegarder le fichier original :

alex:/etc/postfix# cp main.cf main.cf.0

Puis, chargez /etc/postfix/main.cf dans votre éditeur de texte favori.

Normalement un certain nombre d'options sont déjà positionnées, certaines conviennent, d'autre non. Voici les lignes qui nous intéressent (les commentaires ont été supprimés) :

# INFORMATIONS SUR LES REPERTOIRES LOCAUX
queue_directory = /var/spool/postfix
program_directory = /usr/lib/postfix
daemon_directory = /usr/lib/postfix 

# POSSESSION DES FILES D'ATTENTE ET DES PROCESSUS
mail_owner = postfix

# NOMS DE LA MACHINE ET DU DOMAINE
myhostname = alex.linux-france.com                                             
mydomain = linux-france.com

# POUR L'ENVOI DU COURRIER
myorigin = $myhostname

# POUR LA RECEPTION DU COURRIER
mydestination = $myhostname, localhost

# MODE DE TRANSPORT
default_transport = smtp

# GESTION DES ALIAS
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

# DELIVRANCE DU COURRIER
mailbox_command = /usr/bin/procmail

# CONTROLE DES COURRIERS
mynetworks =  192.168.2.0/24,127.0.0.0/8

# DELIVRANCES SIMULTANEES A LA MEME DESTINATION
local_destination_concurrency_limit = 2                               
default_destination_concurrency_limit = 10 

Assurez-vous que tous les autres lignes soient considérées comme des commentaires en les faisant précéder du caractère dièse (#).

Avant de tester tout cela, détaillons rapidement les options choisies (pour des renseignements plus précis, reportez-vous aux pages de manuel et à la documentation fournie avec le programme).

La première section sert à spécifier les emplacements :

La deuxième section précise qui est le propriétaire de la file d'attente et de la plupart des processus serveurs de postfix. Ici, nous avons gardé la proposition initiale, après avoir créé l'utilisateur postfix. Voici son entrée dans notre fichier /etc/passwd :

postfix:x:101:101::/var/spool/postfix:/bin/false 

Le x dans la partie mot de passe vient du fait que nous utilisons les « shadow passwords ». Le groupe 101 correspond au groupe postfix, lui aussi créé pour l'occasion :

alex:/etc/postfix# grep 101 /etc/group
postfix:x:101:

La troisième section sert à indiquer le nom complet de notre machine et le nom du domaine.

La section suivante concerne l'envoi du courrier : elle permet de renseigner postfix sur le domaine qui a posté. Pour le moment, nous considérerons que c'est ce que contient le paramètre $mydomain.

La section concernant la réception des courriers est, là encore, très simple : on indique la liste des domaines qui seront considérés comme terminaux pour l'acheminement du courrier. Pour notre configuration en local, $myhostname et localhost conviennent.

Nous indiquons ensuite le protocole utilisé pour l'acheminement du courrier. Pour l'instant, postfix ne reconnait que smtp et uucp.

La gestion des alias fait appel au fichier /etc/aliases utilisé par ces prédécesseurs. La commande man aliases vous renseignera en détail sur le format de ce fichier. Disons simplement que comme son nom l'indique, il permet de définir des alias entre des noms de destinataires. Ainsi, par exemple, un serveur de news poste quotidiennement un rapport sur ses activités à l'utilisateur news. Supposons que babe soit l'administrateur des news sur alex : pour qu'il puisse recevoir ces messages, et si root est d'accord, bien entendu, il suffit d'indiquer que le destinataire news à pour alias babe. Ceci est réalisé par l'ajout de la ligne suivante dans /etc/aliases :

news: babe

Pour des raisons d'optimisation, postfix, comme ses prédécesseurs, demande à ce que ce fichier soit traité comme une base de données au format DBM ou DB. Pour générer ces formats, on utilise l'utilitaire /usr/sbin/postalias. Ma machine ne reconnaissant pas le format DBM, j'ai donc opté pour le second et produit la base à l'aide de la commande :

alex:/etc/postfix# postalias hash:/etc/aliases

qui m'a produit le fichier /etc/aliases.db.

La section concernant la délivrance du courrier indique ici que nous souhaitons utiliser procmail pour cette tâche. Tout autre programme ayant la même fonction peut convenir (deliver, par exemple), mais procmail est le plus connu dans le monde Linux.

La partie suivante concerne le filtrage des courriers, postfix dispose de mécanisme permettant de rejeter les indésirables et ici nous indiquons simplement que seul le réseau de classe A, 127.0.0.0 (aka localnet) est local pour notre machine.

Enfin, nous indiquons que les messages locaux ne pourront être envoyés simultanément que par 2 au maximum, tous les autres pourront être envoyés par 10 au maximum. Attention à ne pas vouloir pousser ces limites sous peine de débordement du système de courrier !

3.4 Test de la configuration locale

Avant de lancer postfix, assurez-vous qu'il ne tourne pas en faisant simplement :

alex:/etc/postfix# postfix stop

Puis, éditez le fichier /etc/postfic/master.cf et mettez un dièse (#) devant la ligne :

smtp     inet  n       -       -       -       -       smtpd  

sinon, postfix se plaindra que le port 25 est déjà occupé...

Enfin, faites :

alex:/etc/postfix# postfix start

et, à l'aide de la commande ps axf, vérifiez la présence des démons master, pickup et qmgr. Si vous ne les voyez pas, c'est qu'il y a eu un problème : consultez les fichiers /var/log/mail.* pour tenter d'en rechercher la cause.

Si tout c'est bien passé, root va pouvoir envoyer un courrier à babe :

alex:/etc/postfix# mail jaco -s test
premier test local
.
Cc: 
alex:/etc/postfix#

Immédiatement, babe a dû recevoir ce courrier :

$ mail
Mail version 8.1 6/6/93.  Type ? for help.
"/var/spool/mail/jaco": 1 message 1 new
>N  1 root@alex.linux-france.com.  Wed Jan 20 01:46  12/424   "test"
&  1
Message 1:
From root@alex.linux-france.com Wed Jan 20 01:46:10 1999
Delivered-To: jaco@alex.linux-france.com
To: jaco@alex.linux-france.com
Subject: test
Date: Wed, 20 Jan 1999 01:46:10 +0100 (CET)
From: root@alex.linux-france.com

premier test local

& d
& q
$

On notera la présence d'un champ Delivered-To: : il est rajouté par postfix afin d'éviter les boucles dans la délivrance du courrier et ne sera pas affiché par défaut avec la plupart des logiciels de lecture du courrier (en tous cas, avec gnus et netscape).

Essayons encore : maintenant postez sous le compte babe un message à root et vite, très vite, faites ps axf. Vous devriez voir les lignes suivantes :

1271  ?  S    0:00 /usr/lib/postfix/master 
1272  ?  S    0:00  \_ pickup -t fifo -c 
1273  ?  S    0:00  \_ qmgr -t fifo -u -c 
1286  ?  S    0:00  \_ cleanup -t unix -u -c 
1287  ?  S    0:00  \_ trivial-rewrite -n rewrite -t unix -u -c 
1288  ?  S    0:00  \_ local -t unix 

Assez rapidement, vous remarquerez, si vous faites la même commande que cleanup et local se sont terminés, tandis que trivial-rewrite perdure encore un peu. Lui aussi se terminera à son tour.

Tout ceci corrobore ce que nous disions plus haut : pickup a récupéré le message et l'a passé à cleanup. trivial-rewrite s'est chargé de réécrire l'adresse en rajoutant le nom de la machine locale derrière le nom de l'utilisateur. local est le démon responsable de la délivrance locale du message dans la boîte aux lettres du destinataire. C'est à ce moment que le fichier des alias est pris en compte et, si le destinataire utilise un fichier ~/.forward, local le fait suivre à l'adresse indiquée. C'est local qui ajoute le champ Delivered-To: pour éviter un bouclage intempestif et c'est lui qui remplit le champ From de l'enveloppe (à ne pas confondre avec le champ From:...).

Pour finir cette partie, il ne vous reste plus qu'à essayer de faire la même chose avec vos logiciels de lecture de courrier favoris : cela ne devrait pas poser de problème puisque local délivre les messages à l'endroit où la plupart des logiciels s'attendent à les trouver.


Page précédente Page suivante Table des matières