original in en Guido Socher
en to fr Guillaume Baudot
Guido est véritablement féru de UUCP, car c'est une solution de transport de courriels qui s'intègre parfaitement à Linux.
Dans le monde de Windows, différents agents sont nécessaires au bon fonctionnement de la messagerie : POP3 ou IMAP pour la réception, et SMTP pour l'envoi. Cette situation peut être source de bien des maux de tête, d'autant plus si vous utilisez plusieurs FAI.
UUCP est un protocole certes ancien, mais combiné aux services offerts par uucpssh.org, il consitue une solution tout aussi flexible que robuste pour l'envoi comme la réception de courrier électronique.
Le site uucpssh.org propose donc une excellente solution de courriel aux utilisateurs de Linux, par la combinaison de ces deux outils et la souplesse offerte dans les options de redirection.
Le protocole UUCP est presque aussi vieux qu'Unix : il fut développé et longuement utilisé pour la copie de fichiers entre systèmes Unix, d'où son nom "copie Unix vers Unix" ("Unix to Unix CoPy"). À cette époque reculée les ordinateurs n'étaient pas connectés en permanence au réseau : l'échange de données se faisait en se connectant aux autres systèmes à intervalles réguliers, par le biais d'un Modem.
Maintenant, bien que passé de mode, il reste un ou outil idéal pour le transport de courriel, et à d'autant plus forte raison si vous ètes un utilisateur nomade : à partir du moment où vous avez accès à Internet, vous pouvez utiliser votre messagerie tout comme à la maison et sans avoir le moindre paramètre à retoucher.
Voyons maintenant comment configurer tout cela : UUCP, tunnel
SSH...
Tout d'abord, je tiens à rappeler que le sujet dont nous
traitons est spécifique à Linux (enfin Unix, pour
être exact !), donc, pour les utilisateurs de Windows, il
ne vous reste plus qu'à oublier ce sujet, ou envisager la
migration !...
On distingue deux entités dans un système de courriel : les MUA (Mail User Agent), à savoir les programmes utilisés pour lire ou écrire les messages comme mutt, Kmail, Thunderbird..., et les MTA (Mail Transport Agent) ou serveurs de messagerie, dont la tâche consiste à transférer les messages entre ordinateurs. Dans la mesure où UUCP et SSH sont des protocoles de transport, il est évident que ce couple se range dans la seconde catégorie : ils sont utilisés pour interconnecter des MTA.
Autrement dit, nous allons configurer un serveur de courriel local sur notre système Linux de telle sorte qu'il transfère les messages (entrants et sortants) via UUCP plutôt que les protocoles usuels. En outre, comme le transfert uucp se fait à la demande, par exemple avec un script shell comme nous allons le voir un peu plus loin, le MTA fonctionnera indépendamment du fait d'être connecté à Internet, les messages restant en attente tant qu'il n'est pas explicitement fait appel à UUCP.
Quant à ssh, son rôle est d'établir une connexion cryptée vers uucpssh.org et encapsuler les trames uucp. Pour cela, la condition sine qua non est de disposer d'un nom de domaine valide, sans quoi les messages ne pourraient être routés vers votre serveur. En contrepartie, vous aurez toute liberté dans la gestion des comptes de votre domaine.
Pour illustrer le concept de domaine, je pourrais citer en exemple linuxfocus.org, ou encore uucpssh.org, ça devrait être assez éloquent. Mais de tels noms n'ont aucun sens pour le réseau Internet qui repose sur des nombres : les adresses IP. Donc pour avoir un domaine, il faut disposer de ce que l'on nomme un serveur DNS (Domain Name Server/serveur de noms de domaine), dont la tâche consiste à associer un tel nom et une adresse IP, adresse qui permet ensuite d'établir la connection avec l'hôte voulu.
Ce principe établi, à supposer que vous vouliez avoir un serveur Web et un serveur ftp sur deux machines différentes, il leur faudra avoir des noms distincts, comme www.linuxfocus.org et ftp.linuxfocus.org. Un mécanisme particulier toutefois permet de s'affranchir de cet écueil pour le courriel, ce sont les enregistrements DNS de type MX (Mail eXchanger/échangeur de courrier ) : ceci permet à uucpssh.org de se subsitituer au domaine linuxfocus.org, uniquement pour ce qui concerne l'échange de courriel. Il est ainsi possible d'avoir toujours un serveur Web sur linuxfocus.org en même temps qu'autant de comptes @linuxfocus.org que nous le désirons.
Nous allons voir ici comment configurer les trois programmes suivants : exim, postfix et sendmail. Tous fonctionnent très bien avec UUCP.
Ajoutez dans la section "main" (au tout début) du fichier exim.conf :
trusted_users = uucp primary_hostname = your.own.mail.domain local_domains = your.own.mail.domain
Dans la section "transport" :
# Transport pour uucp uucp: driver = pipe user = nobody command = "/usr/bin/uux -r - ${host}!rmail ${pipe_addresses}" return_fail_output = true
Et au début de la section "router" (avant "lookuphost" !) :
# Routeur pour uucp : # A placer avant lookuphost ! uucphost: transport = uucp driver = domainlist route_list = * uucpssh byname
Vous pouvez maintenant tester la configuration avec la commande exim -bV puis relancer exim si le résultat vous satisfait (/etc/init.d/exim restart).
Comme pour exim 3, éditez le fichier exim.conf et ajoutez ce qui suit :
trusted_users = uucp primary_hostname = your.own.mail.domain domainlist local_domains = your.own.mail.domain domainlist relay_to_domains = hostlist relay_from_hosts = 127.0.0.1
Dans la section "transport" :
# Transport pour uucp uucp: driver = pipe user = uucp command = "/usr/bin/uux -r - ${host}!rmail ${pipe_addresses}" path = /usr/local/bin:/usr/bin:/bin return_fail_output
Et dans la section "router" :
# Routeur pour uucp : # A placer au debut de la section uucphost: transport = uucp driver = manualroute domains = ! +local_domains route_list = * uucpssh byname
Pour tester la configuration : exim -bV
Et pour relancer le serveur : /etc/init.d/exim restart
Sendmail utilise un système de configuration basé sur le pré-processeur m4, qui peut se trouver dans un paquetage séparé selon votre distribution. Si tel est le cas, vous devrez l'installer aussi : som nom devrait resssembler à "sendmail-cf".
Créer un fichier que vous nommerez sendmail-uucp.mc dans le répertoire cf de sendmail (probablement /usr/lib/sendmail-cf/cf), puis inspirez vous de ce qui suit pour son contenu :
#divert(-1) # `This is config sends outgoing mail via uucp # # to generate a sendmail.cf out of this .mc file # use the sendmail sources # and run m4 thisfile.mc > sendmail.cf.' divert(0) include(`../m4/cf.m4') VERSIONID(`UUCP, without DNS') undefine(`BITNET_RELAY') undefine(`DECNET_RELAY') undefine(`UUCP_RELAY') OSTYPE(`linux') MASQUERADE_AS(your.own.mail.domain) MASQUERADE_DOMAIN(localdomain) MASQUERADE_DOMAIN(localhost) # ` needed if you use an internal domain that does not exist: ' # a ajouter pour un reseau avec un nom de domaine local FEATURE(`masquerade_envelope') FEATURE(always_add_domain) # ` read allowed domains from cw file: ' # lire les domaines autorises dans le fichier cw FEATURE(use_cw_file) FEATURE(local_procmail) # `important for uucp:' # important pour uucp FEATURE(accept_unresolvable_domains)dnl # `the /etc/passwd entry: mail:*:8:12:mail:/var/spool/mail:' # UID:GID du compte mail. Regardez dans /etc/passwd define(`confDEF_USER_ID',``8:12'') define(`confSAFE_QUEUE',`True') define(`confDELIVERY_MODE',`background')dnl # 'replace mfic by the UUCP system name of your ISP:' # remplacez 'mfic' par le nom du système UUCP de votre FAI (?..) define(`SMART_HOST',uucp-uudom:uucpssh)dnl define(`confSERVICE_SWITCH_FILE',/etc/service.switch)dnl define(`confHOSTS_FILE',/etc/hosts)dnl define(`UUCP_MAILER_MAX',1024000)dnl MAILER(procmail)dnl MAILER(local)dnl MAILER(smtp)dnl MAILER(uucp)dnl
Compilez le ensuite avec la commande :
m4 sendmail-uucp.mc > sendmail.cf
Puis copiez le fichier sendmail.cf dans /etc et relancez sendmail :
/etc/init.d/sendmail restart
En outre, vous devriez avoir ceci dans le fichier /etc/service.switch :
hosts files aliases files
Vous devriez aussi jeter un oeil à la FAQ sur Postfix (http://www.postfix.org/faq.html#uucp-tcp).
Ceci dit, ajoutez dans le fichier /etc/postfix/main.cf :
relayhost=uucpssh default_transport=uucp
Et dans /etc/postfix/master.cf, assurez vous qu'il y a :
uucp unix - n n - - pipe flags=F user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
Le programme uucp est disponible sur la plupart des distributions, il est recommandé d'utiliser le paquetage de votre distribution, s'il existe. Si toutefois vous voulez ou devez installer le programme à partir des sources, vous pourrez les trouver sur http://www.airs.com/ian/uucp.html, mais alors apprenez que l'installation présente quelques bizarreries (au moins jusquà la version 1.07), par exmple en plaçant les éxécutables dans /usr/lib/uucp... Mais passons, je reviendrai plus tard sur les petits trucs pour déboguer l'installation d'uucp.
Pour faire fonctionner uucp, vous devriez avoir au moins les fichiers suivants dans /etc/uucp :
Dans l'univers d'uucp, toute installation possède un nom : c'est par la vérification de ce nom que deux systèmes uucp peuvent se reconnaître et communiquer. uucpssh.org a pour nom uucpssh (en minuscules !) et votre système aura pour nom celui défini quand vous créez votre compte sur uucpssh.org. Pour notre exemple, le système local s'appelle mailtux.
Éditez le fichier /etc/uucp/sys, pour ajouter à la fin :
system uucpssh myname mailtux time any address main.uucpssh.org port SSH protocol t remote-send / remote-receive ~ chat ""
Puis à la fin du fichier /etc/uucp/port :
port SSH type pipe command /usr/bin/ssh -C -x -o batchmode=yes uucp@main.uucpssh.org
Et enfin dans le fichier /etc/uucp/call :
uucpssh mailtux your-random-string-get-it-from-uucpssh.org-admin-page
Vous pouvez maintenant vérifier la configuration avec la commande uuchk et corriger les éventuelles erreurs commises.
Pour transférer les messages vers ou depuis
uucpssh.org, ssh sera appelé par le compte uucp : vous
devez donc vous assurer de l'existence de ce compte dans le
fichier /etc/passwd et de la validité de son
répertoire "home" (l'avant dernier champ).
De même, les programmes uucico et uux doivent appartenir
à uucp et avoir le "s-bit" en place (afin que les
utilisateurs appellent le programme en tant qu'utilisateur uucp).
Le résultat d'un "ls -l /usr/bin/uu*" devrait entre autres
afficher ceci :
-r-sr-sr-x 1 uucp uucp 225008 Mar 7 2002 /usr/sbin/uucico -r-sr-xr-x 1 uucp uucp 93920 Mar 7 2002 /usr/bin/uux
Il ne nous reste plus maintenant qu'à générer une clé DSA et la déposer sur uucpssh.org. Vous trouverez comment faire sur leur site Web dans votre page "admin". Dans les grandes lignes :
Maintenant que tout est en place, vous pouvez le bon fonctionnement du service. Envoyez un message vers une adresse extèrieure et assurez vous qu'uucp l'a mis en file d'attente avec :
uustat -a
Le message devrait se trouver dans /var/spool/uucp/uucpssh/C./
et /var/spool/uucp/uucpssh/D./.
En cas de problème, les fichiers log constituent souvent
une bonne source d'information. Essayez :
uulog -40
Puis cherchez dans /val/log et /var/log/uucp... Si ça
ne fonctionne toujours pas, c'est peut-être votre MTA qui
est mal configuré...
Et si le test précédent est satifaisant, on peut
passer à SSH. Essayez ce qui suit :
su - uucp ssh uucp@main.uucpssh.org -v
Acceptez la clé RSA du serveur et si tout va bien, vous
obtiendrez une invite de commande ("Shere..." : Système
présent...).
Voyons ensuite si les messages en file d'attente
s'acheminent.
/usr/sbin/uucico -x 11 -S uucpssh
Le paramètre "-x 11" sert à
générer un maximum d'information dans le log, donc,
si un problème se pose, le fichier /var/log/uucp/Debug
devrait vous donner des pistes.
Demandez à quelqu'un de l'extèrieur de vous envoyer
un message et utilisez la même commande pour
vérifier que les messages entrants transitent tout aussi
bien par le tunnel. Les messages entrants sont d'abord
placés dans /var/spool/uucp/uucpssh/X./ avant d'être
automatiquement redirigés vers le MTA avec les commandes
/usr/sbin/uuxqt et /usr/bin/rmail. Le log du MTA vous indiquera
si le messsage est bien réceptionné.
Petite digression sur Gentoo Linux :
le problème évoqué
précédemment pour l'installation à partir
des sources est aussi valable pour Gentoo. Si vous constatez que
votre programme cherche uuxqt dans /usr/lib/uucp/ ou encore les
fichiers de configuration dans /usr/conf/uucp/, vous pouvez
aisément contourner cela en créant les liens
symboliques nécessaires dans /usr/sbin et /etc/uucp/.
Une fois que tout est en place et fonctionne, vous n'avez presque plus rien à faire si ce n'est échanger vos messages avec Internet de temps en temps, voire enregistrer le compte rendu d'activité :
/usr/sbin/uucico -S uucpssh uulog -5
À titre personnel, je préfère avoir un contrôle total sur ce qui se passe et lance le script manuellement, mais rien ne vous retient (par exemple) de placer cette commande dans /etc/ppp/ip-up...
/usr/sbin/uucico -S uucpssh
... pour effectuer l'échange à chaque connexion.
Voilà, je n'ai plus qu'à vous souhaiter une bonne transition de votre messagerie !