Administration du courrier électronique sous Linux

v3.2, Janvier 2000
Introduction, copyright et mise en garde habituelleAutres sources d'informationComment marche le courrier électroniqueNous allons maintenant nous intéresser au flux d'informations qui se produit classiquement quand deux personnes communiquent par courrier électronique. Supposons qu'Alice, sur sa machine paysdesmerveilles.com veuille envoyer un courrier électronique à Bob, sur sa machine dobbs.com. Les deux machines sont connectées à l'Internet.Tout d'abord il faut savoir qu'un courrier électronique est divisé en deux parties séparées par une ligne vide : les entêtes et le corps. Les entêtes contiennent la source et la destination du courrier, le sujet, la date d'envoi et d'autres informations utiles. Le corps est le contenu du message. Voici un exemple :From: "Alice" <alice@paysdesmerveilles.com> Message-Id: <199711131704.MAA18447@paysdesmerveilles.com> Subject: Avez-vous vu mon lapin blanc ? To: bob@dobbs.com (Bob) Date: Thu, 13 Nov 1997 12:04:05 -0500 (EST) Content-Type: text Je suis extrêmement préoccupée. J'ai peur qu'il ait chuté dans un trou. -- >>alice>>La disposition et le sens des entêtes sont définis dans un standard Internet : .

1.

Courrier entre des machines connectées en permanence à InternetVoici un diagramme du processus entier (j'en expliquerai ensuite toutes les étapes et la terminologie) : +--------+ +--------+ +-------+ compose | | appelle | | | Alice |--------->| MUA |--------->| MTA |:::>::::: +-------+ |appelant| |appelant| :: sur la +--------+ +--------+ :: machine :: appelante ....................................................................... SMTP :: ::::::::::::::::::::::::::::<:::::::::::::::::::::::::::: :: :: +---------+ +-----+ +-------+ :: | | appelle | | distribue à | boîte | ::::>| MTA |--------->| LDA |===============>| de | sur la |recevant | | | | Bob | machine +---------+ +-----+ +-------+ recevante | | | | +----------------<-------------+ | | | +-----------+ +--------+ | | signaleur | | MUA de |<---------+ | de Bob | | Bob | +-----------+ +--------+ | | | +-----+ | +----->| Bob |<----+ +-----+Pour envoyer un courrier, Alice se sert d'un programme appelé un agent d'utilisateur de courrier (ou MUA pour Mail User Agent). L'agent d'utilisateur de courrier est ce que l'utilisateur appellerait le « lecteur de courrier » ; il aide à composer le message, généralement en appelant l'éditeur de votre choix. Après avoir appuyé sur le bouton envoyer, Alice n'interviendra plus dans le processus. Plus tard dans ce HOWTO, nous examinerons les lecteurs de courriers les plus populaires.L'agent utilisateur de courrier utilisé par Alice confie immédiatement son message à un programme appelé agent de transport de courrier (ou MTA pour mail transport agent)/. En général, ce programme sera sendmail, bien que quelques autres agents de transport deviennent de plus en plus populaire et puissent faire leur apparition dans de futures distributions Linux. Plus loin dans ce HOWTO, nous examinerons également le panorama des agents de transport.Le travail de l'agent de transport est d'envoyer le courrier à l'agent de transport de la machine de Bob. Il trouve la machine de Bob en analysant l'entête To et en trouvant dobbs.com à la droite de l'adresse de Bob. Les mécanismes par lesquels s'effectue cette connexion sont un tout autre sujet ; dans le cadre de notre explication, retenez seulement que cette connexion est une manière pour l'agent de transport d'Alice d'envoyer des commandes textes à la machine de Bob et recevoir de réponses à ces commandes.Les commandes de l'agent de transport ne vont pas dans un shell. À la place, elles sont dirigés vers un port de service sur la machine de Bob. Un port de service est une sorte de point de rendez-vous, une endroit fixe où un serveur écoute les requêtes entrantes. Les ports de service sont numérotés, et l'agent de transport de courrier d'Alice sait qu'il doit parler sur le port 25 de la machine de Bob pour envoyer le courrier.Sur le port 25, la machine de Bob a son propre agent de transport qui écoute les commandes (probablement un autre sendmail). L'agent de transport d'Alice dialoguera avec celui de Bob en utilisant le protocole Simple Mail Transfer Protocol (ou SMTP). Voici à quoi un dialogue SMTP ressemble. Les lignes envoyées par la machine d'Alice sont marqués par un E:, celle de la machine de Bob par un R:. E: MAIL FROM:<alice@paysdesmerveilles.com> R: 250 OK E: RCPT TO:<bob@dobbs.com> R: 250 OK E: DATA R: 354 Start mail input; end with <CRLF>.<CRLF> E: From: "Alice" <alice@paysdesmerveilles.com> E: Message-Id: <199711131704.MAA18447@paysdesmerveilles.com> E: Subject: Avez-vous vu mon lapin blanc ? E: To: bob@dobbs.org (Bob) E: Date: Thu, 13 Nov 1997 12:04:05 -0500 (EST) E: Content-Type: text E: E: Je suis extrêmement préoccupée. J'ai peur qu'il ait chuté dans un trou. E: -- E: >>alice>> E: . R: 250 OKD'habitude, une commande SMTP est une simple ligne de texte, et il en va de même pour la réponse. La commande DATA est une exception : après avoir lu la commande DATA, le serveur SMTP accepte toutes les lignes jusqu'à qu'il voit une ligne ne contenant qu'un point. (SMTP est défini dans le .)Arrivé à ce point, l'agent de transport de courrier de Bob a le message d'Alice. Il va ajouter un entête au message qui ressemble à quelque chose de ce genre :Received: (from alice@paysdesmerveilles.com) by mail.dobbs.com (8.8.5/8.8.5) id MAA18447 for bob@dobbs.com; Thu, 13 Nov 1997 12:04:05 -0500Cela permet de suivre les messages à la trace en cas d'erreur (parfois un message est relayé par plus d'un serveur et contiendra plusieurs entêtes de ce type). L'agent de transport de Bob enverra le message à un agent de distribution local (ou LDA pour local delivery agent). Sur les systèmes Linux, l'agent de distribution est souvent un programme appelé procmail, bien qu'il en existe d'autres. Le travail de l'agent de distribution local est d'ajouter le message à la boîte aux lettres de Bob. Il est séparé de l'agent de transport pour que les deux programmes soient plus simples et pour que l'agent de transport puisse se concentrer sur la partie Internet du processus, sans avoir à se préoccuper des détails locaux comme de savoir où se trouvent les boîtes aux lettres des utilisateurs.La boîte aux lettres de Bob sera normalement un fichier appelé /usr/spool/mail/bob ou /var/mail/bob. Lorsque Bob lit son courrier, il lance son propre agent d'utilisateur de courrier qui regarde et édite ce fichier.
Configuration requiseChoisir un agent de transport de courrier (MTA)L'agent de transport de courrier est le programme qui transfère le courrier de votre système local aux systèmes distants. Il est très rarement nécessaire d'avoir à trifouiller ou remplacer votre agent de transport sur les derniers systèmes Linux, et vous feriez mieux de ne pas chercher à réparer ce qui n'est pas défectueux. Néanmoins, voici un exposé pour vous permettre de comprendre les changements à faire si vous décidez que vous avez besoin d'une plus grande sécurité ou de meilleures performances que votre système ne peut vous en offrir par défaut.(Il y a d'autres agents de transport Unix que ceux présentés ci-dessous, mais vous n'avez pratiquement aucune chance de les rencontrer sur une machine sur laquelle tourne Linux.)Chacun de ces agents a ses propres fonctionnalités, mais le meilleur compromis est qmail. Il est très sécurisé (même si vmail l'est encore plus), très rapide (même si smail est plus rapide pour les utilisateurs locaux) et facile à configurer. Bien sûr, sentez-vous libre de choisir n'importe lequel d'entre eux. Les informations fournies ici ont pour but de vous aider à bien choisir.Sendmail peut être bien pour de nombreux sites ayant besoin d'options compliquées mais je crois que sa configuration est trop difficile pour un débutant alors qu'il n'est ni très sécurisé ni très rapide. C'est pourquoi il y a seulement une section vraiment dépassée sur sendmail dans ce HOWTO.Si vous savez ce que vous faîtes, choisissez sendmail (et vous ne devriez pas être en train de lire ce HOWTO !) ; sinon, je recommande généralement qmail.Voici une description détaillée de ces programmes.

1.

sendmailBSD sendmail est le grand-père des agent de transport d'Internet. Il a enterré pas mal de ceux qui auraient dû être ses successeurs. La plupart des distributions Linux l'utilise maintenant et le préinstalle.sendmail a depuis très longtemps la réputation d'être un cauchemar pour les administrateurs --- difficile à comprendre, compliqué à configurer et plein de trous de sécurité. Cependant, avec la stabilisation des technologies et des standards d'Internet, beaucoup des options et des règles configurables de sendmail qui sont à l'origine de cette réputation ont cessé de requérir des bidouillages propres à chaque site (l'abandon des couches réseaux non TCP/IP comme UUCP y est pour beaucoup). De plus, les versions récentes de sendmail ont un système de configuration amélioré qui permet de s'épargner la légendaire laideur du fichier de configuration sendmail.cf. Plus important, sendmail est maintenant préconfiguré de sorte que nous n'ayez à y toucher que si vous avez une configuration peu commune (comme par exemple le routage du courrier sur un réseau non TCP/IP). Il y a un . Il comporte des références à la documentation étendue de sendmail avec laquelle vous devrez vous battre pour peaufiner votre configuration.D'autres agents de transport peuvent prendre le nom de sendmail et imiter la sémantique des options passées sur la ligne de commande de sendmail. C'est pratique pour les lecteurs de courrier qui supposent souvent qu'ils parlent avec sendmail.
Installation de l'agent de transport de courrier (MTA)

1.

Qmail v1.03Sécurisé, rapide et facile à utiliser, c'est mon agent de transport de courrier préféré.Actuellement, aucune distribution ne préinstalle qmail. Nous allons nous concentrer sur la compilation et l'installation de qmail puisque c'est la seule partie difficile : la configuration est vraiment immédiate.

1.3.

Préparer la compilation Maintenant entrez dans le répertoire qmail pour examiner la configuration par défaut :cd qmail; more conf-*Vous ne devriez avoir à changer aucun paramètre, mais vous pouvez (par exemple) spécifier un répertoire d'installation alternatif ou de meilleurs options de compilation.Maintenant lancer mkdir /var/qmail pour créer le répertoire d'installation.Si nous n'avez pas installé une distribution Debian, vous devrez ajouter plusieurs UID pour l'utilisation de qmail. La grande sécurité de qmail dépend de cela. Le fait que qmail soit divisé en modules tournant chacun sous leur propre UID rend la tâche de mettre hors-service la totalité de votre système de courrier ou de gagner un accès root plus difficile.Donc, lancer # groupadd nofiles # useradd -g nofiles -d /var/qmail/alias alias # useradd -g nofiles -d /var/qmail qmaild # useradd -g nofiles -d /var/qmail qmaill # useradd -g nofiles -d /var/qmail qmailp # groupadd qmail # useradd -g qmail -d /var/qmail qmailq # useradd -g qmail -d /var/qmail qmailr # useradd -g qmail -d /var/qmail qmailsou éditer à la main /etc/passwd et /etc/group pour ajouter ces utilisateurs vous-même.Evan E. m'a signalé qu'il avait dû utiliser le paramètre -g GID avec la version officielle de groupadd (Caldera 1.2) car sinon groupadd retournait cette erreur : « A group with that name already exists. » (un groupe de ce nom existe déjà).Par exemple, vous pouvez respectivement ajouter qmail:*:2107: nofiles:*:2108:et alias:*:7790:2108::/var/qmail/alias:/bin/true qmaild:*:7791:2108::/var/qmail:/bin/true qmaill:*:7792:2108::/var/qmail:/bin/true qmailp:*:7793:2108::/var/qmail:/bin/true qmailq:*:7794:2107::/var/qmail:/bin/true qmailr:*:7795:2107::/var/qmail:/bin/true qmails:*:7796:2107::/var/qmail:/bin/trueMaintenant vous pouvez lancer make setup checkpour tester votre configuration, ensuite./config pour configurer qmail.Attention, votre serveur disposer d'une adresse reconnue (i.e. pouvant être résolue par une requête DNS) ou ./config sera perturbé.Si ce n'est pas le cas, vous pouvez donnez le nom de votre serveur directement via :./config-fast ordinateur.lambda.frMaintenant, vous devez installer quelques alias, puisque /etc/alias n'est pas utilisé pas qmail sauf si vous compilez et installez un paquetage optionnel.Voici ma configuration : File : ".qmail-MAILER-DAEMON" &postmaster File : ".qmail-bin" &root File : ".qmail-daemon" &root File : ".qmail-decode" &root File : ".qmail-dumper" &root File : ".qmail-games" &root File : ".qmail-ingres" &root File : ".qmail-mailer-daemon" &postmaster File : ".qmail-manager" &root File : ".qmail-news" &root File : ".qmail-nobody" &root File : ".qmail-operator" &root File : ".qmail-postmaster" &root File : ".qmail-root" &guylhem File : ".qmail-system" &root File : ".qmail-toor" &root File : ".qmail-uucp" &root File : ".qmail-uucp-default" |preline -dr /usr/bin/uux - -r -gC -a"${SENDER:-MAILER-DAEMON}" lm!rmail "($DEFAULT@$HOST)"Vous devez créer chacun de ces fichiers dans ˜alias en remplaçant &guylhem dans .qmail-root par votre propre compte récupérant le courrier de root.Attention si vous utilisez UUCP !Ne faites pas confiance à la FAQ de qmail pour UUCP, utilisez mon .qmail-uucp-default à la place sinon vous ne pourrez envoyer aucun courrier par votre connexion UUCP !Maintenant vous devez décider dans quel format vos utilisateurs recevront leur courrier.Voici mon avis : Pour des répertoires home montés en NFS, utilisez le format MAILDIR avec un correctif pour les logiciel de courrier (les correctifs sont disponibles sur ). Si aucun correctif n'est disponible, préférez le format MAILFILE. N'importe quel logiciel peut lire un fichier à ce format. Les utilisateurs devront seulement créer un alias (pour bash) ou un setenv (pour csh) pour leur logiciel de courrier. Éviter le format /var/spool/mail/$USER format, trop peu sûr.Pour corriger le format par défaut, lisez chacun des fichiers dans /var/qmail/boot et copiez celui que vous préférez vers /var/qmail/rc. home ou proc sont des choix sûrs mais je préfère home pour des raisons de sécurités.

1.4.

Configurer qmail Dans /var/qmail/control, éditez :

1.6.

Désinstaller votre ancien agent de transport de courrierSi le test est concluant, tuez votre ancien agent de transport.Tout d'abord, arrêtez-le :$ killall -STOP nom_du_démonSi des processus-fils tournent, forcez-les à se terminer :$ killall -CONT leur_nomPuis réessayez de stopper votre agent de transport de courrier (s'il le faut, répétez ces deux étapes ad nauseam).Ensuite, tuez votre agent de transport :$ killall -TERM nom_du_démon $ killall -CONT nom_du_démonVirez-le. La manière de le faire dépend de votre distribution. Par exemple rpm -e --nodeps pour une RedHat, une Caldera ou une SuSE, ou dpkg -r --force-depends pour une Debian. Lancer ensuite# ln -s /var/qmail/bin/sendmail /usr/lib/sendmail # ln -s /var/qmail/bin/sendmail /usr/sbin/sendmailMaintenant configurer qmail-smtpd dans /etc/inetd.conf :smtp stream tcp nowait qmaild /var/qmail/bin/tcp-env tcp-env /var/qmail/bin/qmail-smtpdTout ceci doit se trouver sur la même ligne.Si vous utilisez un vielle distribution avec un init non SysV (c'est par exemple le cas des vielles RedHat), ajoutez cela à vos scripts d'initialisation : sh -cf '/var/qmail/rc &' Il y a de grandes chances pour que ce soit /etc/rc.local mais cela peut varier.Pour les distribution actuelles avec des init SysV (RedHat, Caldera, SuSE, Debian), ajoutez ce script dans /etc/init.d/ ou /etc/rc.d/init.d : Pour la Debian : #!/bin/sh test -x /var/qmail/rc || exit 0 case "$1" in start) echo -n "Starting mta: " # démarrage de l'agent de transport sh -cf '/var/qmail/rc &' echo "qmail." ;; stop) echo -n "Stopping mta: " # arrêt de l'agent de transport killall qmail-lspawn echo "qmail." ;; restart) echo -n "Restarting mta: " # redémarrage de l'agent de transport killall -HUP qmail-lspawn killall -ALRM qmail-lspawn echo "qmail." ;; *) echo "Usage: /etc/init.d/qmail {start|stop|restart}" exit 1 esac exit 0 Pour la RedHat : #!/bin/sh # # qmail ce script shell s'occupe du démarrage et de l'arrêt de qmail # # description : qmail est un agent de transport de courrier, c'est-à-dire # le programme qui s'occupe de transporter le courrier d'une # machine à une autre # nom de processus : qmail # config: /var/qmail/control/ # source la bibliothèque de function . /etc/rc.d/init.d/functions # source la configuration du réseau . /etc/sysconfig/network export PATH=$PATH:/var/qmail/bin # vérifie que le réseau est en place [ ${NETWORKING} = "no" ] && exit 0 [ -f /usr/sbin/sendmail ] || exit 0 # examine les options de démarrage du script case "$1" in start) # Lance les démons. echo -n "Starting qmail: " # démarrarage de qmail qmail-start '|preline procmail' splogger qmail & touch /var/lock/subsys/qmail echo ;; stop) # Arrête les démons. echo -n "Shutting down qmail: " # arrêt de qmail killproc qmail-lspawn echo rm -f /var/lock/subsys/qmail ;; restart) $0 stop $0 start ;; status) status qmail ;; *) echo "Usage: qmail {start|stop|restart|status}" exit 1 esac exit 0 Faîtes des liens symboliques vers chaque /etc/rc.d/rcN.d/, par exemple : ln -sf /etc/init.d/qmail /etc/rc.d/rc1.d/K19qmailSi la première lettre est K, vous tuerez qmail quand la machine passera à ce niveau d'exécution (1 pour le mode simple ou 6 pour le redémarrage) et si la première lettre est S, vous le démarrerez (2, 3, 4, 5). Comment décider si vous devez mettre un K ou un S ? Faites ce que le majorité des démons font dans ces runlevels ! Quel nombre devrais-je mettre après K ou S ? Le nombre suivant de celui de votre démon réseau. Cela signifie que l'agent de transport de courrier sera démarré et arrêté respectivement avant et après votre démon réseau. Sans cela, votre réseau ne sera pas activé au moment où sera lancé votre agent, alors que celui-ci s'attendra à ce qu'il fonctionne.RedHat, Caldera et SuSE utilisent /etc/rc.d à la place de /etc pour un Debian. Ainsi, sur ces distributions, quand je parle de /etc/rc1.d comprenez /etc/rc.d/rc1.d.
Administration des lecteurs de courrier électronique (MUA) Gérer le courrier distantCette section décrit l'utilisation de POP et d'IMAP pour gérer le courrier distant. Parmi les alternatives, on trouve le montage via NFS des zones de stockage du courrier sur les machines clientes (Danger Will Robinson ! Est-ce que tout le monde utilise la même méthode de verrouillage ?) ou bien l'utilisation d'une passerelle courrier-vers-web (une solution assez populaire de nos jours).RemerciementsLes personnes suivantes ont aidé à rassembler les informations et les expériences qui ont rendu possible l'écriture de ce document :Steve Robbins, Ian Kluft, Rich Braun, Ian Jackson, Syd Weinstein, Ralf Sauther, Martin White, Matt Welsh, Ralph Sims, Phil Hughes, Scot Stevenson, Neil Parker, Stephane Bortzmayer et spécialement merci à Vince Skahan pour sa large contribution.Eric S. Raymond a revu ce document, a corrigé différentes fautes et a intégré la section How Electronic Mail Works de son Mail User's HOWTO.Hitoshi Hayakawa a vérifié la section sur qmail, Jun Morimoto a ajouté plusieurs remarques à propos de popclient et de fetchmail et Takeo Nakano qui à forcé ispell à vérifier l'orthographe de ce document :-) Si j'ai oublié quelqu'un, toutes mes excuses : envoyez-moi un courrier électronique.