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.
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.
Nous allons donc décrire la configuration de Postfix. Celle-ci se trouve en majeure partie dans le fichier /etc/postfix/main.cf.
Avant d'aller bricoler honteusement dans le fichier de config, il faut connaître quelques commandes importantes.
postfix reload permet de demander à
Postfix de relire sa configuration.postfix flush permet de demander à
Postfix d'envoyer dès maintenant tout ce qu'il y a en
attente pour une raison ou pour une autre.postconf permet d'obtenir la
configuration actuelle de Postfix. Avec le paramètre
-n, on peut obtenir simplement les
paramètres qui sont différents de ceux par défaut.postfix check permet de lancer une
série de vérifications pour voir si Postfix est bien
installé, qu'il ne manque pas de fichiers et que sa
configuration est cohérente.mailq permet de visualiser les mails
dans la queue d'attente de Postfix.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.
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
Préalablement à cela, on spécifie à Postfix d'accepter les mails en provenance du réseau local (dans lequel on a confiance) grâce à permit_mynetworks. De plus, il existe certaines exeptions dans le filtrage précédemment établi. Ces exeptions ont la forme d'une adresse pour laquelle on spécifie si on l'accepte ou non, de manière autoritaire. Ce paramètre prévaudra sur les paramètres suivants. C'est le rôle de la commande check_client_access hash:/etc/postfix/access qui va lire le fichier /etc/postfix/access lequel contient les exeptions en question. (Note : ne pas oublier de lancer postmap /etc/postfix/access après toute modif de ce fichier !
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).
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-aliasesCette 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/aliasesCes 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/accessCe 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.
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.
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 |
dernière modif le 16.06.02 par Nico. | Doc originale par Vincent Bernat et Nicolas Stransky. |
![]() |
|||
| |
|
![]() |
|
| |
|||
| |
|||
| |
|||
| |
|||
| |
|||
| |
|||
| |
|||
![]() |
|||