7. tredir

Contenu de cette section

tredir est l'un des utilitaires les plus puissants parmi ceux fournis avec term. Il permet d'utiliser avec term les plus importants services réseau. Avant d'en expliquer l'usage, il est nécessaire de donner quelques bases sur le fonctionnement de ces services. Nous les avons déjà évoqués, mais sans expliquer précisément en quoi ils consistent. Comme leur nom l'indique, ce sont des services qui sont fournis par le réseau. Des exemples de tels services sont~: telnet qui permet de se loger sur une machine à partir d'une autre, le protocole de transfert de fichiers ftp qui permet l'envoi de fichiers entre machines et smtp (Simple Mail Transfer Protocol) qui est sollicité à chaque fois que vous envoyez du courrier électronique. Chaque service réseau est associé à un numéro de port. L'affectation des numéros de ports aux différents services est donnée par le fichier '/etc/services' qui doit être identique sur toutes les machines reliées à un même réseau.

Comment ces services sont-ils appelés~? Sur chaque machine du réseau tourne un démon nommé inetd qui est à l'écoute des tentatives de connexion sur les ports réseau. Ces tentatives proviennent soit du réseau, soit de la machine locale. On obtient un service réseau donné en se connectant au port inetd adéquat. Lorsqu'une requête de service réseau est envoyée, inetd sait exactement quel service est demandé grâce au numéro du port sollicité. S'il est configuré pour, il fournit alors le service adapté à la connexion qui le demande. La configuration d'inetd est donnée par le fichier '/etc/inetd.conf' qui contient la liste des services fournis. Pour plus d'informations, reportez-vous aux pages de manuel d'inetd et inetd.conf.

Il est possible de communiquer directement avec les services réseau en utilisant telnet (et non termtelnet ). Par exemple, pour dialoguer avec le démon sendmail (smtp) de la machine nom_de_la_machine, vous pouvez utiliser telnet nom_de_la_machine smtp ou bien telnet nom_de_la_machine 25 (puisque 25 est le numéro de port affecté à smtp dans '/etc/services'). Vous devriez alors recevoir un gentil message de bienvenue de la part du démon de la machine distante. C'est une astuce très utile pour résoudre les problèmes réseau et contrôler les ports redirigés par tredir (voir ci-après).

tredir fonctionne de façon très similaire à inetd. Il s'exécute en arrière-plan comme un démon et est à l'écoute des différents ports, dans l'attente d'une requête. Lors qu'une demande de service est faite, plutôt que de fournir ce service comme le fait inetd, tredir retransmet la requête au term distant qui transmet la requête au réseau et renvoie le résultat à la machine locale. tredir peut envoyer la requête à n'importe quelle machine du réseau, mais la dirige par défaut vers la machine placée à l'autre extrémité de la liaison term. tredir REDIRige les services réseau TCP (Transimssion Control Protocol).

La syntaxe classique de tredir est la suivante~:

  tredir [cet_ordinateur_ci:]port [cet_ordinateur_la:] port

Un exemple devrait clarifier tout ceci. Redirigeons un port local sur le port telnet de la machine distante. Pour ce faire, nous utilisons~:

  tredir 2023 23

Maintenant, quiconque se connecte au port 2023 de la machine locale sera redirigé vers le port 23 (telnet) de la machine distante. Voici un exemple de session où la machine locale est ma_machine.modem.maison et la machine distante se nomme netsun.

$ tredir 2023 23
Redirecting 2023 to 23
$ telnet localhost 2023
Trying 127.0.0.1...
Connected to ma_machine.modem.maison
Escape character is '^]'.

SunOS UNIX (netsun)
login:

Cet exemple est particulièrement utile. Si nous avions fait le tredir sur netsun, nous pourrions alors faire un telnet vers ma_machine depuis le réseau, simplement en nous connectant au port redirigé de netsun, i.e. telnet netsun 2023.

Le principe général de l'utilisation de tredir est de rediriger le service souhaité vers une machine du réseau. L'exemple suivant nous permet de lire les news sur la machine locale à partir d'un serveur de news du réseau, en utilisant la liaison term. Les news sont fournies par le service nntp dont le numéro de port est le 119. Tout lecteur de news digne de ce nom vous permet de spécifier le numéro de port à utiliser, grâce à un fichier de configuration ou une variable d'environnement. Donnons à ce port local le numéro 2119 et supposons maintenant que notre serveur de news est news.domain.org. Nous allons rediriger le port 2119 vers le port 119 de news.domain.org, puis nous indiquerons à notre lecteur de news que le serveur nntp se trouve sur le port 2119 de la machine locale. Etant donné que cela dépend du lecteur de news utilisé, nous allons juste tester la liaison avec telnet plutôt que de vraiment lancer un tel programme.

$ tredir 2119 news.domain.org:119
Redirecting 2199 to news.domain.org:119
$ telnet localhost 2119
Trying 127.0.0.1...
Connected to ma_machine.modem.maison.
Escape character is '^]'.
200 news.domain.org InterNetNews NNRP Server INN 1.4 07-Dec-41 ready
(posting ok).

Si vous parvenez jusqu'ici, tout ce qu'il vous reste à faire est de configurer votre lecteur de news pour être capable de lire les news via term. N.B.~: si vous lisez les news de cette façon, soyez certain que dans tous vos envois, vous spécifiez dans la ligne d'en-tête Reply-To: une adresse email du réseau à laquelle on peut vous joindre, sinon les gens qui voudront vous contacter enverront leur courrier à l'adresse (fantaisiste) constituée des données quelconques que votre lecteur de news placera dans la ligne d'en-tête From:.

7.1 tredir~: Attention, chien méchant~!

Le lecteur astucieux, après avoir lu le dernier exemple, se demandera certainement pourquoi le port 2119 a été redirigé vers le port 119. Etant donné que les programmes de lecture de news utilisent par défaut le port 119, pourquoi ne pas faire un tredir 119 news.domain.org:119 et éviter la configuration du lecteur~? La réponse est que tous les ports de numéro inférieur à 1024 sont des ports réservés, à l'écoute desquels seuls un super-utilisateur peut se mettre. Si vous prenez le risque de suider tredir ou si vous le lancez en tant que root, vous pourrez alors rediriger les ports réservés et éviter de vous casser les pieds avec les services restants.

Un autre inconvénient de l'utilisation des ports réservés est qu'inetd les écoute fréquemment et qu'un port ne peut être écouté que par un seul programme à la fois. Afin d'utiliser un tel port, il vous faut modifier le fichier inetd.conf de façon qu'inetd ne soit plus à l'écoute du port que vous souhaitez rediriger. Pour ce faire, commentez la ligne du service incriminé, en plaçant un # au début de cette ligne. Le super-utilisateur doit alors envoyer un signal HUP à inetd pour qu'il relise son fichier de configuration.

7.2 Quelques astuces tredir

Dans cette partie, nous allons présenter quelques-unes des utilisations les plus courantes de tredir. Nous avons déjà indiqué comment rediriger les services nntp et telnet et allons maintenant passer à des exemples un peu plus compliqués.

X Windows

Dans une précédente partie, nous avons expliqué comment permettre à un client s'exécutant sur le réseau d'ouvrir une fenêtre sur la machine locale, grâce à txconn. La même technique peut être utilisée sur votre machine locale pour qu'un client envoie son affichage vers l'autre extrémité de la liaison term. Mais comment afficher un client X sur une machine qui n'est pas l'autre bout de la liaison~? La réponse réside dans la connaissance du fait qu'X utilise un service réseau particulier, à l'instar des autres programmes que nous avons évoqués. Un serveur X est à l'écoute de requêtes réseau sur un port dont le numéro est donné par la formule~: port = 6000 + numero de display. Par exemple, un serveur X gérant le display 0 sur une machine donnée sera à l'écoute du port 6000. S'il gère le display 2, il écoutera le port 6002. Lorsque vous positionnez votre variable d'environnement DISPLAY sur machine:n, vos clients X tenteront de se connecter au port 6000 + n de machine.

Nous pouvons utiliser cette astuce pour permettre à des clients X de votre machine locale d'ouvrir des fenêtres sur des displays distants. Supposons que nous voulons lancer un xterm tournant sur la machine locale avec l'affichage sur le display 0 de la machine xmachine, qui est quelque part sur le réseau. Premièrement, choisissons un numéro de display~: 2, par exemple (n'utilisez pas 0, c'est celui que votre serveur X local utilise). Faisons-en le display 0 de xmachine. En termes de ports, cela signifie qu'il nous faut rediriger le port local 6002 vers le port distant 6000. Les commandes sont les suivantes~:

$ tredir 6002 xmachine:6000
$ setenv DISPLAY localhost:2
$ xterm

Ceci devrait ouvrir un xterm sur la machine xmachine. Notez que nous avons positionné DISPLAY sur localhost:2. La justification en est que les clients X utilisent parfois des sockets unix domain plutôt que des sockets internet domain lorsqu'ils se connectent à un display local (lorsque DISPLAY contient :2, par exemple). localhost:2 demande l'utilisation d'une connexion TCP.

En ce qui concerne xmachine, la requête X provient de la machine placée à l'extrémité distante de votre liaison term (remotemachine). C'est pourquoi, si vous voulez autoriser la connexion, vous devez utiliser soit xhost + remotemachine sur xmachine, soit xauth pour mettre à jour le fichier .Xauthority de votre machine locale pour le display 2, en utilisant la clé de xmachine.

Une fois encore, pour accélérer les connexions X, vous pouvez utiliser le programme sxpc pour établir la liaison. sxpc contient des explications sur la façon d'utiliser tredir et de l'autoriser, en utilisant xauth.

term et le mail

Bien, vous l'aurez voulu~! Le courrier électronique a la réputation justifiée d'être l'un des services les plus difficiles à mettre en place sur les machines UNIX. Faire fonctionner term avec le courrier électronique implique une bonne compréhension des mécanismes de ce dernier, ce qui déborde largement le cadre de ce document. Pour en savoir plus sur le courrier électronique, procurez-vous un ouvrage sur l'administration de systèmes UNIX et/ou le FAQ (frequently asked questions) du newsgroup comp.mail.misc, disponible par ftp anonyme sur rtfm.mit.edu, dans le répertoire '/pub/usenet/comp.mail.misc'. Il existe actuellement deux paquetages qui vous permettront d'utiliser le courrier électronique avec term. Tous deux sont accessibles par ftp anonyme sur sunsite.unc.edu. Il s'agit de term.mailerd+mail de Byron A. Jeff et de BCRMailHandlerXXX de Bill C. Riemers.

Ceci étant dit, voici une description succinte de la façon dont le courrier électronique fonctionne. Deux parties sont à considérer~: l'envoi et la réception de messages. Commençons par envoyer des messages de votre machine locale vers le réseau.

Il y a deux sortes de programmes de courrier électronique. Les premiers sont appelés MUA (mail user agent) et permettent de lire, composer et envoyer des messages. Parmi les MUA les plus connus, on trouve elm , pine, Mail et vm. Les MUA ne font aucun travail de réseau, ils se contentent d'assembler les messages. Le vrai travail d'envoi des messages est réalisé par le second type de programmes, à savoir les MTA (mail transfer agents) qui sont appelés par les MUA. Ils prennent les messages, décident de l'endroit où il faut les envoyer (en fonction de l'adresse fournie) et les envoient effectivement sur le réseau.

Les deux MTA les plus courants sur les systèmes Linux sont sendmail et smail. L'idée de base et de faire se connecter votre MTA à un autre MTA tournant sur une machine du réseau, laquelle saura quoi faire de vos messages. Pour cela, il faut rediriger un port local sur le port smtp de la machine placée sur le réseau. Ensuite, indiquez à votre MTA qu'il doit envoyer à celui du réseau tout message qu'il ne sait pas traiter. Celui-ci saura alors comment envoyer le message vers sa destination.

Comment cela se passe-t-il avec smail~? Tout d'abord, on redirige un port vers le port smtp de la machine du réseau (mailhost)~:

  tredir XXXX mailhost:25

où XXXX est le numéro du port local auquel smail va se connecter (notez qu'il est nécessaire de donner un nom à ce port dans le fichier '/etc/services' pour que smail le reconnaisse). smail possède plusieurs fichiers de configuration généralement placés dans '/usr/local/lib/smail'. Ceux qui nous intéressent sont 'config', 'routers' et 'transports'. Notez bien que nous supposons que vous avez déjà configuré smail correctement pour traiter vos messages locaux. Une fois de plus, consultez la documentation si ça n'est pas le cas.

Dans le fichier 'config', il faut placer la définition suivante~:

  smart_path=localhost

localhost étant la machine à laquelle smail se connecte lorsqu'il ne sait pas quoi faire d'un message.

Dans le fichier 'routers', ajoutez~:

  smart_host:
  driver=smarthost,
  transport=termsmtp;
  path = localhost

Enfin, ajoutez dans 'transports'~:

  termsmtp: driver=tcpsmtp,
            inet,
            return_path,
            remove_header="From",
            append_header="From: VOTRE_ADRESSE_RESEAU",
            -received,
            -max_addrs, -max_chars;
            service=VOTRE_SERVICE_SMTP,

Dans les quelques lignes ci-dessus, les lignes d'en-tête (header) changent tous les en-têtes des messages qui partent de chez vous en l'adresse VOTRE_ADRESSE_RESEAU, qui est l'adresse réseau à partir de laquelle vous voulez que les messages semblent être envoyés. Si plusieurs utilisateurs utilisent votre liaison term, il vous faudra avoir recours à quelque chose de plus acrobatique, comme maintenir une base de données des adresses réseau des utilisateurs locaux et les insérer dans les en-têtes From:.

La ligne service est le nom du port local que vous avez redirigé vers le port smtp de la machine connectée au réseau. Avec la version de smail qu'utilise l'auteur, il est impossible d'utiliser juste un nombre. Il est nécessaire de mettre un nom tel que "toto" et de définir "toto" dans le fichier '/etc/services' comme étant le numéro du port redirigé. Si vous utilisez un tredir suidé et ne faites que rediriger le port smtp (25), il n'est nul besoin de définir ce "toto".

Cela devrait suffire pour vous mettre sur la voie. Si vous décidez d'utiliser sendmail, les principes sont les mêmes, bien que les détails diffèrent. Ronald Florence (ron@mlfarm.com) a affirmé à l'auteur que le sendmail de SUN ne peut envoyer une file de plusieurs messages vers le port redirigé, mais que le sendmail BSD 8.6.9 fonctionne correctement. Ronald a appliqué à sendmail les modifications suivantes de façon à le faire fonctionner avec term. Dans son cas, le port sendmail par défaut (25) est utilisé pour le trafic local d'un réseau éthernet et le courrier électronique Internet est donc transmis à un port TCP redirigé.

#
# Creation du mailer termsmtp qui envoie le courrier via un port TCP redirige
#
Mtermsmtp,P=[TCP], F=mDFMuCXe, S=22, R=22, A=TCP $h PORTNUMBER

Ici, PORTNUMBER est le numéro du port redirigé de la machine locale. Cela doit être un port inutilisé de numéro supérieur à 2000. Il faut ensuite indiquer à sendmail à quelle machine se connecter et faire de termsmtp le mailer par défaut.

#
# Principal mailer de relai
#
DMtermsmtp
#
# Principal hote de relai : utilise le mailer $M pour envoyer
# le courrier vers d'autres domaines
#
DR HOSTNAME
CR HOSTNAME

HOSTNAME est le nom de votre machine locale (est-ce que localhost fonctionne~?). La dernière ligne suit la règle 0 pour retransmettre le courrier Internet.

# Envoyer les autres noms valides au forwarder
R$*<@$*.$+>$*   $#$M    $@$R    $:$1<@$2.$3>$4  user@any.domain

Lorsque la connexion term avec l'hôte Internet est établie, lancez les commandes suivantes sur la machine locale.

tredir PORTNUMBER internet.host:25
/usr/lib/sendmail -q

Nous allons maintenant nous préoccuper de recevoir du courrier électronique à l'aide de term. Nous supposerons que le courrier est envoyé à votre compte sur la machine mailhost connectée au réseau. La solution la plus simple est d'utiliser trsh ou termtelnet pour se connecter à mailhost et d'y lire votre courrier. Il est cependant possible de télécharger automatiquement votre courrier sur la machine locale, grâce à POP (post office protocol). POP a été précisément conçu dans ce but~: envoyer le courrier électronique à des machines n'ayant que des accès intermittents au réseau. Pour utiliser POP, il faut qu'il y ait un serveur POP installé sur mailhost. Si tel est le cas, vous pouvez utiliser un client POP pour télécharger votre courrier régulièrement. Comme on pouvait s'y attendre, tredir joue un rôle dans la procédure. Le port utilisé par le service POP est le 110 (n.b. il existe un ancien protocole POP-2 qui utilise le port 109. Nous parlons ici de POP-3 qui est la dernière version de POP). Plusieurs clients POP sont disponibles. L'un d'eux, écrit en langage perl par William Perry et maintenu par l'auteur, est pop-perl-1.X. On peut le trouver sur sunsite dans /pub/Linux/system/Mail.

Pour utiliser POP, il faut rediriger un port local vers le port 110 de mailhost et configurer le client de façon à ce qu'il récupère le courrier sur localhost en utilisant le port local. Supposons par exemple qu'il y a un serveur POP qui tourne sur mailhost. Nous redirigeons le port local 2110 et lançons le client pop-perl.

$ tredir 2110 mailhost:110
Redirecting 2110 to mailhost:110
$ pop
Username: bill
Password: <votre mot de passe pour mailhost>
Pop Host: localhost
Pop Port: 2110
Starting popmail daemon for bill

Si vous n'avez pas de serveur POP à votre disposition, le paquetage BCRMailHandler contient un programme permettant de télécharger le courrier électronique vers votre machine locale grâce à term. L'auteur ne l'a jamais utilisé, mais quiconque le possède est encouragé à le commenter. Vous pouvez également utiliser le paquetage term.mailerd+smail. Malheureusement, aucun de ces deux paquetages ne fonctionne avec les versions 2.0.0 et ultérieures de term.


Chapitre suivant, Chapitre Précédent

Table des matières de ce chapitre, Table des matières générale

Début du document, Début de ce chapitre