Ce document détaille la configuration de Postfix sur zamok

 

Le but de ce document n'est pas d'apprendre à configurer Postfix de A à Z, mais à savoir le configurer sur Zamok. Entre autre, il est déjà installé avec un fichier de configuration qui marche. Pour apprendre de A à Z, il y a la documentation d'Éric Jacoboni. qui donne les bases, mais ensuite, il faut aller chercher dans la doc de Postfix.

1. Ce qu'est Postfix et ce qu'il doit faire

Postfix est classiquement ce qu'on appelle un MTA (Mail Transport Agent). Son travail est d'aller envoyer le mail qu'on lui donne à la bonne machine. Il peut également faire office de MDA (Mail Delivery Agent), c'est à dire qu'il dépose le courrier dans la boîte des utilisateurs. Un autre mot savant est MUA (Mail User Agent) qui est en fait un lecteur de courriers.

Dans le cas de zamok, Postfix doit assurer deux tâches :

Postfix dispose de multiples avantages par rapport à Sendmail. Notamment, il est modulaire et chaque tâche est assignée à un programme qui peut tourner avec des droits réduits, voire emprisonné. De plus, quelqu'un de normal peut le configurer.

2. La configuration de Postfix

Nous allons donc décrire la configuration de Postfix. Celle-ci se trouve en majeure partie dans le fichier /etc/postfix/main.cf.

Les commandes à connaître

Avant d'aller bricoler honteusement dans le fichier de config, il faut connaître quelques commandes importantes.

Les points importants du fichier de configuration

Voici les points les plus importants du fichier de config. Postfix vient avec une documentation complète, mais malheureusement morcelée sous forme de man. man postfix donne l'aide générale, mais ensuite, pour connaître la signification de max_idle, il faut aller lire man master car ce paramètre concerne le process master de postfix. Le mieux pour chercher en connaissant le nom du paramètre est de se placer sur zamok dans /usr/share/man/man8 et d'utiliser zgrep pour rechercher parmi tous les fichiers celui susceptible d'expliquer la commande.

Le filtrage au niveau du MTA

Postfix ne se contente pas d'accépter n'importe quel mail lui parvenant. Il effectue au préalable plusieurs vérifications sur la machine qui le contacte et sur le contenu du header du mail afin de ne pas autoriser l'envoi ou la réception de mails dont le header est complètement erroné. Les sections du fichier de configuration concernant ces points sont nommées *_restrictions

Enfin, un paramètre utile est soft_bounce. Il faut le placer à "yes" si on pense que les modifications que l'on va effectuer sont importantes. Cela permet d'éviter que des mails soient perdus en changeant toutes les erreurs "autoritaires" (qui résultent en un échec définitif) en erreurs "douces" (qui résultent en une demande de réessayer sans intervention de l'utilisateur). En production, il ne faut surtout pas le laisser.

[*] : à nuancer par ce qui se trouve juste avant ce paramètre, dans le fichier de conf. En fait on n'est pas obligé de tout refuser, on peut aussi bien accepter les mails en question mais mettre un warning dans les logs (warn_if_reject) ou encore préciser le code et le message d'erreur dans le header du mail (xheader_if_reject) mais dans ce dernier cas, il est nécessaire de patcher postfix au préalable. À ce jour nous utilisons un postfix patché avec ceci, ce qui permet de se retrouver avec un champ "X-Reject" dans le header du mail, tout en évitant de rejetter systématiquement les mails provenant des serveurs fautifs. On gagne ainsi en souplesse puisque le destinataire final est alors libre d'effectuer le filtrage qu'il souhaite en utilisant procmail (Voir http://www.crans.org/docs/Spamfilter.html pour plus de détails).

Les autres fichiers utilisés par Postfix

Postfix utilise quelques autres fichiers, principalement pour gérer les alias. Ces fichiers sont des fichiers textes qui sont ensuite "compilés" avec postmap.

canonical_maps = hash:/CRANS/generated/mail/canonical-aliases
	    
Cette ligne indique les alias canoniques. Dans notre cas, il s'agit d'une réécriture des logins en prénom.nom, aussi bien à la réception qu'à l'envoi. La réécriture ne se fait que si l'adresse e-mail est incomplète (pas de domaine spécifié).

alias_database = hash:/CRANS/generated/mail/aliases
alias_maps = hash:/CRANS/generated/mail/aliases
	    
Ces deux lignes spécifient les correspondances entre un alias et le nom réel de la boîte de l'utilisateur.

Il faut bien voir que ces trois fichiers sont générés à partir de ce qu'il y a dans /CRANS/confs, n'allez pas les modifier à la main. lanceMake fait le boulot de génération et de copie tout seul.

/etc/postfix/access
Ce fichier regroupe les adresses de serveurs pour lesquels on précise de manière autoritaire si on accepte ou non* le mail. Voir la section smtpd_client_restrictions pour plus de précisions.

3. Comment vérifier que tout marche ?

Les logs

Postfix loggue pas mal de choses dans /var/log/mail.*, c'est une bonne idée d'aller surveiller ces fichiers quand on bricole dessus.

Les tests

On peut ensuite lancer quelques tests :

Si l'on rencontre des difficultés, on peut parler à Postfix directement, que ce soit depuis zamok, depuis sa machine ou depuis une machine de l'extérieur. Pour se faire, on utilise telnet sur le port 25. Par exemple :

zamok% telnet ptt 25
Trying 138.231.136.6...
Connected to zamok.crans.org.
Escape character is '^]'.
220 zamok.crans.org ESMTP Postfix
helo zamok
250 zamok.crans.org
mail from: <bernat@crans.org>
250 Ok
rcpt to: <bernat@free.fr>
250 Ok
data
354 End data with <CR><LF>.<CR><LF>
From: Moi <bernat@crans.org>
To: Toi <bernat@free.fr>
Subject: Test 1 (9:50)

Essai !
.
250 Ok: queued as 82E0FC000A4
quit
221 Bye
Connection closed by foreign host.
	    
Le contenu du mail (après data) n'est pas très important ; ce sont les deux premières commandes qui permettent de réellement spécifier expéditeur (celui qui recevra l'erreur en cas de problème) et le destinataire (celui qui reçoit le mail). On peut ainsi effectuer différents tests. Par exemple, il faut vérifier que l'on n'autorise pas le relai à l'extérieur (envoi d'un mail de l'extérieur vers une machine extérieure) :
xxxxxx vbernat 67 % telnet zamok.crans.org 25
Trying 138.231.136.6...
Connected to zamok.crans.org.
Escape character is '^]'.
220 zamok.crans.org ESMTP Postfix
helo zamok
250 zamok.crans.org
mail from: <bernat@crans.org>
250 Ok
rcpt to: <bernat@free.fr>
554 <bernat@free.fr>: Recipient address rejected: Relay access denied
rcpt to: <bernat@crans.org>
250 Ok
quit
221 Bye
Connection closed by foreign host.
	    
Le point important à noter dans cet exemple est que j'étais à l'extérieur et donc que même si je disais que le mail venait de moi avec mon adresse CR@NS, il ne fallait pas que Postfix accepte mon mail à destination de l'extérieur, mais il fallait qu'il accepte à destination d'une adresse CR@NS. Ici tout va bien.




top documents home dernière modif le 16.06.02 par Nico. Doc originale par Vincent Bernat et Nicolas Stransky.
La configuration de Postfix
presentation
liens
informations
vie
annuaire
pages perso
webmail
ssh