uucpssh.org : votre messagerie sous Linux avec UUCP

ArticleCategory: Hardware

SystemAdministration

AuthorImage:[Here we need a little image from you]

[Photo of the Author]

TranslationInfo:[Author + translation history. mailto: or http://homepage]

original in en Guido Socher

en to fr Guillaume Baudot

AboutTheAuthor:[A small biography about the author]

Guido est véritablement féru de UUCP, car c'est une solution de transport de courriels qui s'intègre parfaitement à Linux.

Abstract:

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.

ArticleIllustration:

uucp mail

ArticleBody:

Introduction

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.

Les aspects techniques

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.

Notion de domaine MX

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.

Configuration du MTA

Nous allons voir ici comment configurer les trois programmes suivants : exim, postfix et sendmail. Tous fonctionnent très bien avec UUCP.

Exim 3

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).

Exim 4

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

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

Postfix

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)

Configuration d'UUCP

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

Configuration de SSH

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 :

Les tests

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/.

Utilisation quotidienne

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.


Liens utiles

Voilà, je n'ai plus qu'à vous souhaiter une bonne transition de votre messagerie !