tredir
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:
.
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.
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~:
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 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 ([email protected]
) 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
Où 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 [email protected]
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