Next Previous Contents

10. Installation du courrier électronique sur un réseau domestique avec Exim.

Par Jan Stumpel JW.Stumpel@inter.NL.net

10.1 Introduction

On a souvent décrit, notamment dans la Linux Gazette, la mise en place d'un réseau domestique tournant sous Linux et Win95 et utilisant Samba, la translation d'adresses IP (IP Masquerading) et diald, mais jusqu'à présent, je n'ai jamais trouvé de recette expliquant comment installer le courrier sur un petit réseau avec seulement un compte e-mail distant . J'essaierai par le biais de cet article d'exposer comment j'y suis parvenu.

Avec un tel système :

Tout ceci fonctionne sur mon système (Linux Debian 2.1) grâce aux programmes suivants :

J'ai installé ceci pour deux machines, une sous Linux, une sous Win95, mais cela devrait fonctionner également pour des réseaux plus importants et se révéler suffisant pour un petit bureau. Note : cet article est connoté Debian. Si vous utilisez une autre distribution, faites les modifications qui s'imposent aux endoits appropriés !

10.2 Le réseau et les noms

Pour cet article, j'utiliserai les noms suivants (changez-les en fonction de votre situation) :

Je supposerai aussi que le réseau local fonctionne et qu'il y a une connexion à la demande par modem basée sur diald, qu'il n'y a pas de serveur de noms sur ciel, que /etc/resolv.conf contient les adresses de deux serveurs de noms fournies par le FAI et que ces dernières ont été intégrées à la configuration TCP/IP de terre.

Sur ciel, /etc/hostname contient

ciel

et /etc/hosts

127.0.0.1 localhost
192.168.1.1 ciel.home ciel
192.168.1.2 terre.home terre

Sur terre, un fichier c:\windows\hosts est identique à /etc/hosts.

10.3 Adresses de courrier

Les en-têtes de messages électroniques peuvent comporter plus qu'une simple adresse dans les champs 'To:' et 'From:', par exemple :

To: Emily Bloggs <joe.bloggs@fai.com>

où 'Emily Bloggs' est la 'partie nom réel'. Elle est spécifiée dans l'application d'e-mail qui permet de composer les messages et on peut l'utiliser pour acheminer son courrier à Emily. Note : Si elle contient des points, elle doit être mise entre " ("Joe C. Bloggs"). Voir également man mailaddr.

10.4 Configuration d'exim

Sur un système Debian, il suffit de lancer eximconfig qui vous posera un certain nombre de questions auxquelles vous pourrez répondre comme suit :

Dans MS Internet Mail (ou dans quelque client que vous utilisiez sous Win95), ciel doit être déclaré comme étant à la fois le serveur SMTP et le serveur POP3. Dans les champs 'compte pop3' et 'mot de passe pop3', entrez le nom d'utilisateur emi et son mot de passe sous Linux. Puis, saisissez le nom, Emily Bloggs, et l'adresse e-mail, emi@home, aux endroits appropriés. Notez que l'adresse e-mail doit être située dans le domaine local !

Côté Linux, il n'y a rien de spécial à faire. On peut utiliser les fichiers /etc/pine/conf et ~/.pinerc 'bruts de décoffrage'. Le client courrier (pine) construit les adresses locales à partir du nom d'hôte (hostname) et des données propres à l'utilisateur contenues dans /etc/passwd.

Avec ces réglages, les utilisateurs locaux peuvent s'envoyer des messages les uns les autres et y répondre avec bonheur. Par exemple, sous pine sur ciel, joe écrit à emi. Automatiquement, pine transforme ceci en :

To: Emily Bloggs <emi@ciel.home>

Le message arrive à destination immédiatement (comme vous pouvez le constater si vous lancez eximon, l'utilitaire de surveillance d'exim). emi (dans la mesure où elle s'est loguée sur ciel) verrait le message comme émanant de

From: Joe Bloggs <joe@home>

Donc, home fonctionne exactement comme un domaine local à l'intérieur duquel on peut s'échanger des messages. Le problème consiste à en faire passer vers le monde extérieur. Un champ d'adresse From: tel que <joe@home> n'est pas bon, car personne de l'extérieur ne pourrait répondre à une adresse du domaine home, lequel n'existe pas.

Enfin, presque, car il y a quand même un hic. Tout ceci marche très bien tant que le MUA (Mail User Agent, le programme qui sert à composer les articles) ne se prend pas les pieds dans le tapis. Malheureusement, Pine 3.96 (que j'utilise) n'est pas exempt de problèmes à cet égard.

Si vous rédigez un article avec Pine et le différez (le mettez de côté pour le reprendre plus tard, avant de l'envoyer), il se verra ajouter un en-tête Reply-to: au moment où vous y reviendrez. De ce fait, un tel article différé puis repris et expédié par Joe Bloggs partira avec les en-têtes suivants :

From: Joe Bloggs <jbloggs@fai.com>

Reply-To: Joe Bloggs <joe@home>

Ceci n'arrivera qu'aux articles qui sont d'abord différés, puis repris et enfin envoyés ! Ceux qui sont composés et expédiés en un seul jet ne comporteront que l'adresse From:, pas le Reply-to:. Le problème étant que si le destinataire répond, Reply-to: a la priorité sur From:. Par conséquent, la réponse ira vers le domaine home (qui n'existe pas) en lieu et place de fai.com.

Ce bug (qui est marqué comme non réparé dans le code source de Pine 3.96) a été corrigé dans des versions ultérieures (au moins la 4.10), la 3.96 en est toujours affectée. Pour vérifier si votre Pine l'a, rédigez, différez, reprenez et différez encore un article de test. Ensuite, allez examiner le fichier ~/mail/postponed-msgs pour voir si un champ Reply-To: s'y trouve (puis supprimez l'article).

Si vous êtes confronté à ce problème, à part utiliser un autre MUA que pine, la solution de facilité est de modifier le fichier /etc/exim.conf de façon à enlever tout en-tête Reply-To: du courrier sortant, ce qui peut être fait en changeant la ligne :

headers_remove = "sender"

en

headers_remove = "sender:reply-to"

Ce n'est qu'un pis-aller, et il est quand même préférable de passer à la version 4.10 de Pine (mais j'attendrai moi-même pour cela qu'un paquetage Debian soit disponible).

10.5 Spécification du champ d'adresse From:

Nous devons changer l'adresse locale From: en adresse e-mail valide (celle du compte chez le FAI), mais uniquement dans le cas de courrier sortant. Avec exim, on y parvient par le biais d'un 'filtre de transport' à travers lequel passera ce courrier et qui modifiera le champ From:. Le courrier local, lui, ne sera pas affecté.

Le filtre qui suit remplira cet office, à condition d'être sûr que l'adresse à modifier est toujours encadrée par < et >. Ce n'est pas garanti mais très courant : pine, mutt et mail, ainsi que MS Internet Mail génèrent tous de telles adresses.

#!/usr/bin/perl
$address = 'joe.bloggs@fai.com';
while (<>) {
    if (/^From: /) { s/<.*>/<$address>/; print; last; }
    print; }
while (<>) { print; }

N'oubliez pas de mettre votre propre adresse e-mail ! Appelez ce programme filtresortant, faites chmod +x filtresortant et placez-le dans /usr/local/bin. A présent, nos devons ajouter une ligne à /etc/exim.conf, ce qui changera la section TRANSPORTS CONFIGURATION en :

remote_smtp:
   driver = smtp
   headers_remove = "sender"
   transport_filter = "/usr/local/bin/filtresortant"
end

En fait, nous avons ajouté deux lignes : la ligne headers_remove est, elle aussi, nouvelle. Cela permet d'éviter qu'exim ajoute un champ d'en-tête Sender: au message, comme ce serait le cas avec ces réglages si on utilisait pine. Cette ligne Sender: peut être la cause de problèmes avec quelques destinataires de courrier (mal configurés).

Ces modifications à /etc/exim.conf effectuées, tout message expédié vers le monde extérieur sera correctement acheminé par exim, lequel ouvrira immédiatement (par l'entremise de diald) la connexion en sortie. Dans un cadre domestique, c'est probablement ce qui convient, par contre, dans un bureau, surtout avec un trafic important, il se peut que vous vouliez différer l'expédition des messages pour les envoyer groupés, à certains moments, afin d'économiser sur la facture téléphonique. C'est tout à fait possible, mais n'en ayant pas l'usage moi-même, je ne me suis pas penché sur la question. Vous pouvez toujours jeter un coup d'oeil au 'Linux Mail-Queue mini-HOWTO'.

10.6 Configuration de fetchmail

Au lancement de fetchmail, diald ouvre la connexion et le courrier en provenance du FAI est récupéré (et passé à exim pour être redistribué localement). Seuls les utilisateurs disposant d'un fichier .fetchmailrc dans leur répertoire home et en étant les propriétaires légitimes peuvent exécuter fetchmail. On peut créer ce fichier grâce à l'outil de configuration fetchmailconf. On obtient quelque chose comme :

# Configuration created Sun Mar 28 03:15:20 1999 by fetchmailconf
set postmaster "postmaster"
poll pop3.fai.com with proto pop3
       user "jbloggs" there with password "zaphod" is joe here options fetchall warnings 3600

Les fichiers .fetchmailrc appartenant aux différents utilisateurs pourraient très bien être des copies les uns des autres, mais avec l'attribut de propriété positionné en fonction de l'utilisateur concerné. Que chacun ait le mot de passe en clair n'est pas très heureux. Il y a sûrement une meilleure façon de faire, mais pour la maison, ce n'est pas vraiment un problème.

Le point crucial est que quiconque lance fetchmail doive récupérer son courrier dans sa boîte aux lettres (en l'occurence, celle de joe).

10.7 Suppression de la limite de distribution d'exim

Par défaut, exim ne distribue pas plus de 10 messages à la fois. Je suis sûr qu'il y a des cas dans lesquels c'est parfaitement justifié, mais une connexion par modem n'en fait pas partie. Pour se débarasser de cette restriction, vous devez mettre dans la section MAIN CONFIGURATION de /etc/exim.conf, avant l'expression end, une ligne

smtp_accept_queue_per_connection = 0

10.8 Distribution du courrier personnel

Par l'intermédiaire de fetchmail et d'exim, tout ce qui vient de l'extérieur est distribué par défaut dans la boîte aux lettres de Joe (/var/spool/mail/joe) sur ciel. Dans son répertoire home se trouve un fichier .forward qui contient le texte suivant :

# Exim filter
if $header_to: contains Emily then deliver emi endif

Le fichier .forward doit avoir les droits -rw-r--r--. Dans le doute, tapez la commande chmod 644 .forward.

Si un message contient 'Emily' dans le (la 'partie nom réel' du) champ To: (et ce sera presque toujours le cas quand ses amis lui enverront du courrier), il partira dorénavant sur son compte sur ciel, pas sur celui de Joe. Grâce à POP3, elle pourra le déplacer sur sa propre machine (voir plus bas).

On peut étendre la distribution à d'autres utilisateurs qu'Emily avec les clauses elif ... then dans le fichier .forward. En fait, les fichiers .forward d'exim permettent d'effectuer un grand nombre d'opérations complexes. Voyez à ce sujet le texte "l'interface utilisateur d'exim pour filtrer le courrier" qui est fournie avec la documentation d'exim.

10.9 Transfer du courrier avec qpopper

Il faut installer qpopper afin que ciel agisse comme un serveur POP3 pour terre. A partir du paquetage Debian qpopper_2.3-4.deb, l'installation est automatique et aucune configuration n'est requise. Dès qu'Emily clique sur 'Recevoir/Envoyer des messages' dans MS Internet Mail, le contenu de sa boîte aux lettres sur ciel est transféré sur terre (et tous les courriers, locaux comme distants, qu'elle a pu écrire sont acheminés).

10.10 Avis automatiques

Emily aime bien être avertie quand du courrier arrive pour elle sur ciel. Si Samba est installé sur ciel et Winpopup sur terre, c'est tout simple. L'avis de messages sur terre peut être effectué grâce à smbclient (un programme fourni avec Samba).

Joe (en tant que root) a mis un programme Perl appelé mailwarn dans /usr/local/bin :

#!/usr/bin/perl
open POPUP, "| smbclient -M $ARGV[0] >/dev/null 2>&1";
print POPUP "VOUS AVEZ UN MESSAGE ! ALLEZ VITE LE VERIFIER !\n";
print POPUP "Ça vient de $ARGV[1]";
close POPUP;

Ce fichier a bien sûr été rendu exécutable par un chmod +x mailwarn.

Dans le répertoire home d'Emily sur ciel se trouve maintenant un fichier .forward (emi en est le propriétaire; les droits sont égaux à 644) :

# Exim filter
unseen pipe "/usr/local/bin/mailwarn terre $header_from:"

Si un message (local ou venant de l'extérieur) pour Emily arrive sur ciel, une fenêtre pop-up apparaîtra sur terre le lui signifiant.

10.11 Récupération manuelle du courrier extérieur

Grâce à un 'raccourci' du bureau Win95 sur terre qui lance un telnet sur ciel, Emily peut s'y loguer et lancer fetchmail à la main. Ceci, au cas où elle ne voudrait pas attendre les moments prévus sous cron lorsque fetchmail tourne. Après que les messages ont été transférés depuis le FAI, elle peut cliquer sur 'Recevoir/Envoyer des messages' pour déplacer tout courrier depuis sa boîte aux lettres sur ciel vers celle de terre.

Linux Gazette n°43 - Traducteur : Joel Sagnes joels69@club-internet.fr le 31 juillet 1999.


Next Previous Contents