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/16
n
.smtp.fai.com
joe
(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.