Par Jan Stumpel JW.Stumpel@inter.NL.net
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 :
mail). 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 !
Pour cet article, j'utiliserai les noms suivants (changez-les en fonction de votre situation) :
ciel : joe.ciel : emi.terre :emi. Ses mots de passe Linux sur
ciel et "réseau Microsoft" sur terre sont les
mêmes.fai.com. Le courrier en provenant peut être
récupéré par POP3. jbloggs.joe.bloggs@fai.com.zaphod.smtp.fai.com.pop3.fai.com.ciel et terre appartiennent tous deux au
domaine home. L'utilisation de ce nom de domaine est
restreinte au réseau domestique; Joe ne l'a pas enregistré et il ne
peut donc être reconnu par le monde extérieur. 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.
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.
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 :
home.home et
ciel.home : répondez ciel:localhost 192.168.1.0/16n.smtp.fai.comjoe (pas à root !).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).
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'.
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).
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
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.
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).
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.
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.