Date de publication: le Mardi 15 Mai 2007 à 15h20
Dernière modification: par Pascal BOYER le Dimanche 15 Juillet 2007 à 08h56
« Article précédent: Postfix : tables et contrôle anti-spam
» Article suivant: Postfix : le fichier smtpd.conf
Avant propos
Dans cet article sera abordée la configuration du fichier /etc/postfix/master.cf
Les informations, présentées ici, sont pratiquement toutes issues du livre Postfix - La référence, ed. O’REILLY.
:
A la fin de cet article, je fais un récapitulatif de tout ce qui permet de faire fonctionner le serveur correctement avec Thunderbird.
Rappels
Postfix, devant tantôt jouer le rôle de serveur tantôt le rôle de client, intègre un serveur et un client SMTP.
- smtpd désigne le serveur SMTP de Postfix.
- smtp désigne le client SMTP de Postfix.
D’une façon générale, le nom d’un service se terminant par un d désigne un serveur: imapd, lmtpd, pop3d, mysqld, slapd etc...
Le démon master
Le démon master est le processus général qui contrôle les autres démons Postfix pour la gestion du courrier (p31). Pour obtenir les informations sur sa configuration, le démon master utilise le fichier /etc/postfix/master.cf (p31)
Le démon master lance, selon les besoins, tous les autres services de Postfix. (p48)
Le fichier /etc/postfix/master.cf contient une ligne par service ou transport fourni par Postfix (p31). Et chaque ligne est divisée en colonnes indiquant comment chaque programme doit s’exécuter dans le cadre du système global. (p31)
:
Dans la plupart des cas il est fort probable que vous n’ayez pas à modifier ce fichier.
Mais ce ne sera pas ici notre cas, puisque nous allons commenter les lignes concernant les services dont nous ne nous servirons point et apporter quelques modifications aux valeurs par défaut.
Le fichier master.cf
Bien qu’un certain nombre d’informations soient indiquées directement dans le fichier sous forme de commentaires, en voici quelques unes supplémentaire relatives à la syntaxe de ce fichier. (p49-50)
Colonne Service name
Indique le nom du service qui doit être lancé.
Il est possible d’indiquer uniquement un numéro de port, en lieu et place du nom du service, si et seulement si ce service tourne sur la même machine que Postfix.
Il est également possible (uniquement pour les services dont le transport type est inet) de remplacer le nom du service par l’adresse IP d’une machine suivi du numéro de port (e.g: 192.168.4.137: 12368) (il n’y a pas d’espace avant 12368 )
Colonne Transport type
Valeurs possibles: inet, unix ou fifo
-
type inet
Désigne des sockets internes. Une socket est l’association "port d’écoute + adresse IP" (e.g: 127.0.0.1: 25) (il n’y a pas d’espace avant 25 )Le type inet désigne des processus capables de communiquer avec d’autres processus se trouvant sur la même machine mais également sur une machine distante.
-
type unix
Ne représente que les processus qui communiquent avec d’autres processus situés sur la même machine.
Pour communiquer avec de tels processus, Postfix utilise des fichiers.
-
type fifo
Idem à type unix
Colonne private
La valeur y (pour yes) désigne les composantes du serveur Postfix dont l’accès est restreint à Postfix.
Les services dont le Transport type vaut inet ne peuvent avoir un accès restreint car les sockets doivent rester accessibles pour les autres processus du système Linux.
Colonne unpriv
Désigne (si y) les processus qui s’exécuteront avec le moins de privilèges possible, c’est à dire avec les privilèges définis par la règle mail_owner du fichier /etc/postfix/main.cf et dont la valeur par défaut vaut postfix
Colonne chroot
Désigne les composantes de Postfix qui seront (si y) chrootées. Le répertoire du chroot est défini par la règle queue_directory dans le fichier /etc/postfix/main.cf
Chrooter un service ajoute un niveau de sécurité mais aussi de complexité.
Cette option est impossible pour les services pipe, virtual, local et proxymap
Colonne wakeup
Définit l’intervalle de temps au bout duquel un processus devra être réveillé. Par exemple, lorsque j’indique 60 (secondes) pour le démon pickup cela veut dire que toutes les 60 secondes ce processus devra contrôler la présence de messages dans la file d’attente maildrop
C’est le démon master qui réveille les processus qui doivent être réveillés. Les trois composantes concernées par le réveil sont: pickup, flush et qmgr
Si on ajoute un ? après la valeur numérique, cela indique que le signal de réveil ne devra être envoyé que si la composante est vraiment utilisée. Enfin, un intervalle de temps dont la valeur est 0 indique qu’aucun signal de réveil n’est requis.
Colonne maxproc
Indique le nombre maximum de processus pouvant être invoqués simultanément.
Si aucune valeur n’est indiquée, la valeur par défaut utilisée est celle définie par la règle default_process_limit dans le fichier /etc/postfix/main.cf
La valeur par défaut de la règle default_process_limit est 100
Ici, la valeur 0 indiquerait qu’aucune limite n’est fixée.
Colonne command
Indique la véritable commande utilisée pour lancer le service indiqué dans la première colonne.
Aucune information sur le chemin ou l’emplacement du binaire n’est fournie puisque ce binaire (ou cet exécutable) est censé se trouver dans le répertoire des démons de Postfix.
Ce répertoire est défini par la règle daemon_directory du fichier /etc/postfix/main.cf
Pour connaître la valeur de cette règle, utilisez la commande: ~# postconf -h daemon_directory
- L’option -v indique que l’on souhaite obtenir des logs verbeux. -vvv augmente encore la verbosité les logs produits par un service.
- L’option -D permet d’obtenir des informations destinées à un programme de débogage.
Ci-dessous, le fichier master.cf
Je poursuis avec la couleur orange indiquant ainsi les règles qui peuvent être initiées si uniquement les serveurs imapd et smtpd tournent. Ceci constituant encore et toujours le fonctionnement basic du serveur de mails.
Bien sûr, la couleur verte indique les règles relatives à la configuration du protocole SSL/TLS appliqué à Postfix.
|
# |
######################################################### |
|||||||
|
# |
||||||||
|
# |
Ci-dessous, sont répertoriés et configurés tous les services que le démon master de Postfix peut lancer en fonction des besoins du serveur Postfix. |
|||||||
|
# |
||||||||
|
# |
Chaque ligne indique donc le nom du service et la façon dont il sera lancé. |
|||||||
|
# |
||||||||
|
# |
######################################################### |
|||||||
|
# |
======= |
======= |
======= |
======= |
======= |
======= |
======= |
======= |
|
# |
service |
type |
private |
unpriv |
chroot |
wakeup |
maxproc |
command + args |
|
# |
name |
(yes) |
(yes) |
(yes) |
(never) |
(100) |
||
|
# |
======= |
======= |
======= |
======= |
======= |
======= |
======= |
======= |
|
smtp |
inet |
n |
- |
n |
- |
- |
smtpd -v |
|
|
pickup |
fifo |
n |
- |
- |
60 |
1 |
pickup |
|
|
cleanup |
unix |
n |
- |
- |
- |
0 |
cleanup |
|
|
qmgr |
fifo |
n |
- |
- |
300 |
1 |
qmgr |
|
|
qmgr |
fifo |
n |
- |
- |
300 |
1 |
qmgr |
|
|
rewrite |
unix |
- |
- |
- |
- |
- |
trivial-rewrite |
|
|
bounce |
unix |
- |
- |
- |
- |
0 |
bounce |
|
|
defer |
unix |
- |
- |
- |
- |
0 |
bounce |
|
|
trace |
unix |
- |
- |
- |
- |
0 |
bounce |
|
|
verify |
unix |
- |
- |
- |
- |
1 |
verify |
|
|
flush |
unix |
n |
- |
- |
1000? |
0 |
flush |
|
|
# |
proxymap |
unix |
- |
- |
n |
- |
- |
proxymap |
|
smtp |
unix |
- |
- |
- |
- |
- |
smtp |
|
|
relay |
unix |
- |
- |
- |
- |
- |
smtp |
|
|
showq |
unix |
n |
- |
- |
- |
- |
showq |
|
|
error |
unix |
- |
- |
- |
- |
- |
error |
|
|
local |
unix |
- |
n |
n |
- |
- |
local |
|
|
virtual |
unix |
- |
n |
n |
- |
- |
virtual |
|
|
# |
Je commente la ligne ci-dessous car c’est le lmtp de Cyrus-IMAP que je souhaite faire tourner (voir plus bas) |
|||||||
|
# |
La commande netstat -anp |grep lmtp doit renvoyer ceci: |
|||||||
|
# |
||||||||
|
# |
unix |
2 |
[ ACC ] |
STREAM |
LISTENING |
558026 |
19293/cyrmaster |
/var/run/cyrus/socket/lmtp |
|
# |
||||||||
|
# |
et non ceci: |
|||||||
|
# |
||||||||
|
# |
unix |
2 |
[ ACC ] |
STREAM |
LISTENING |
558026 |
19293/cyrmaster |
/var/run/cyrus/socket/lmtp |
|
# |
unix |
2 |
[ ACC ] |
STREAM |
LISTENING |
596256 |
24511/master |
private/lmtp |
|
# |
----------------- |
----------------- |
----------------- |
----------------- |
----------------- |
----------------- |
----------------- |
----------------- |
|
# |
lmtp |
unix |
- |
- |
n |
- |
- |
lmtp |
|
anvil |
unix |
- |
- |
n |
- |
1 |
anvil |
|
|
# |
Les trois services ci-dessous sont utilisés par Postfix-tls uniquement: |
|||||||
|
# |
----------------- |
----------------- |
----------------- |
----------------- |
----------------- |
----------------- |
----------------- |
----------------- |
|
tlsmgr |
fifo |
- |
- |
n |
300 |
1 |
tlsmgr |
|
|
# |
Malgré la RFC 2487, certains clients, nommés Outlook (Express) prefèrent utiliser le mode non-standard "wrapper" au lieu d’utiliser l’extension SMTP STARTTLS. Ceci est vrai pour OE (Win32 < 5.0 et Win32 >= 5.0 lorsque port<>25 et OE (5.01 Mac et tous les portages). |
|||||||
|
# |
||||||||
|
# |
ATTENTION: |
Aucune des trois lignes ci-dessous ne permet de recevoir de mails de l’exterieur !!! |
||||||
|
# |
----------------- |
----------------- |
----------------- |
----------------- |
----------------- |
----------------- |
----------------- |
----------------- |
|
# |
smtps |
inet |
n |
- |
n |
- |
- |
smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes |
|
# |
smtps |
inet |
n |
- |
n |
- |
- |
smtpd -o smtpd_sasl_auth_enable=yes |
|
# |
587 |
inet |
n |
- |
n |
- |
- |
smtpd -o smtpd_enforce_tls=yes -o smtpd_sasl_auth_enable=yes |
|
# |
######################################################### |
|||||||
|
# |
||||||||
|
# |
Ci-dessous, on trouve les programmes externes à Postfix. |
|||||||
|
# |
||||||||
|
# |
Consulter les docs/man de ces programmes pour connaître les options que réclame Postfix. |
|||||||
|
# |
||||||||
|
# |
Pour "maildrop" lire le fichier "MAILDROP_README" consacré à Postfix ou consulter ce lien |
|||||||
|
# |
||||||||
|
# |
######################################################### |
|||||||
|
# |
La ligne ci-dessous déclare Cyrus-IMAP comme MDA. |
|||||||
|
# |
Cette ligne n’existe pas par défaut, il faut donc l’ajouter (p49) et ce lien |
|||||||
|
# |
Noter que /usr/sbin/cyrdeliver est le binaire qui délivre le courrier (package cyrus21-common) |
|||||||
|
# |
----------------- |
----------------- |
----------------- |
----------------- |
----------------- |
----------------- |
----------------- |
----------------- |
|
cyrus |
unix |
- |
n |
n |
- |
- |
pipe flags=R user=cyrus argv=/usr/sbin/cyrdeliver -e -q -r $sender -m $extension $user |
|
|
# |
Je peux commenter la ligne ci-dessous car maildrop n’existe pas sur ma machine. |
|||||||
|
# |
----------------- |
----------------- |
----------------- |
----------------- |
----------------- |
----------------- |
----------------- |
----------------- |
|
# |
maildrop |
unix |
- |
n |
n |
- |
- |
pipe flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d $recipient |
|
# |
Je peux commenter la ligne ci-dessous car l’agent de transport UUCP (Unix to Unix Copy Program) n’est pas installé. |
|||||||
|
# |
----------------- |
----------------- |
----------------- |
----------------- |
----------------- |
----------------- |
----------------- |
----------------- |
|
# |
uucp |
unix |
- |
n |
n |
- |
- |
pipe flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient) |
|
# |
Je peux commenter la ligne ci-dessous car bsmtp (Batched SMTP) dépend de "uucp" et n’est pas installé. |
|||||||
|
# |
----------------- |
----------------- |
----------------- |
----------------- |
----------------- |
----------------- |
----------------- |
----------------- |
|
# |
bsmtp |
unix |
- |
n |
n |
- |
- |
pipe flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -d -t$nexthop -f$sender $recipient |
|
# |
Je peux commenter la ligne ci-dessous car ifmail n’est pas installé. |
|||||||
|
# |
"ifmail" fait partie du package "ifgate" |
|||||||
|
# |
----------------- |
----------------- |
----------------- |
----------------- |
----------------- |
----------------- |
----------------- |
----------------- |
|
# |
ifmail |
unix |
- |
n |
n |
- |
- |
pipe flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient) |
|
# |
Je peux commenter la ligne ci-dessous car le package scalemail n’est pas installé. |
|||||||
|
# |
----------------- |
----------------- |
----------------- |
----------------- |
----------------- |
----------------- |
----------------- |
----------------- |
|
# |
scalemail- backend |
unix |
- |
n |
n |
- |
2 |
pipe flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store $nexthop $user $extension |
Récapitulatif
1°/ Serveur smtpd + imapd uniquement:
TLS n’est donc pas installé.
Donc maintenant, si vous avez respecté les valeurs des règles vert/jaune (elles ne sont pas toutes nécessaires mais je garantis que les valeurs que je présente fonctionnent) et correctement construit vos fichiers externes, vous avez un serveur de mail en état de marche !
- Le serveur d’authentification saslauthd ne tourne pas.
- Postfix n’est pas chrooté
- L’utilisateur postfix appartient au groupe mail
- Les droits sur la base de données /etc/sasldb2 sont 640
- L’adresse IP de la machine sur la quelle est exécuté Thunderbird est dans la liste de la règle mynetworks
- Il y a une entrée pour l’utilisateur test0 dans /etc/postfix/aliases
- Vous n’avez oubliez de créer aucun fichier externe alors qu’il est déclaré par une règle dans /etc/postfix/main.cf
... et voici comment doivent être configurés, dans Thunderbird, les serveurs smtpd et impad
Fig 1: Configuration du serveur SMTP sans TLS
Fig 2: Configuration du serveur imapd pour test0
Alors vous pouvez envoyer et recevoir des mails et votre serveur n’est pas un relai ouvert.
De plus, votre serveur effectue un certain nombre de tests sur le respect des normes par les clients mail et leurs messages ainsi qu’un tri des messages non désirables (requêtes DNRBL).
2°/ Serveur smtpd + TLS:
Si vous avez initialisé les règles relatives à la mise en oeuvre du protocole TLS avec Postfix, alors, avec Thunderbird, le serveur SMTP doit être ainsi défini:
Fig 3: Configuration du serveur SMTP avec TLS
Commentaires













