Page suivante Page précédente Table des matières
7.
tredir
tredirest l'un des utilitaires les plus puissants parmi ceux fournis avecterm. Il permet d'utiliser avectermles 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 :telnetqui permet de se loger sur une machine à partir d'une autre, le protocole de transfert de fichiersftpqui permet l'envoi de fichiers entre machines etsmtp(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é
inetdqui 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 portinetdadéquat. Lorsqu'une requête de service réseau est envoyée,inetdsait 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'inetdest 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'inetdetinetd.conf.Il est possible de communiquer directement avec les services réseau en utilisant
telnet(et nontermtelnet). Par exemple, pour dialoguer avec le démonsendmail(smtp) de la machinenom_de_la_machine, vous pouvez utilisertelnet nom_de_la_machine smtpou bientelnet nom_de_la_machine 25(puisque 25 est le numéro de port affecté àsmtpdans '/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 partredir(voir ci-après).
tredirfonctionne 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 faitinetd,tredirretransmet la requête autermdistant qui transmet la requête au réseau et renvoie le résultat à la machine locale.tredirpeut 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 liaisonterm.tredirREDIRige les services réseauTCP(Transimssion Control Protocol).La syntaxe classique de
tredirest la suivante :
tredir [cet_ordinateur_ci:]port [cet_ordinateur_la:] portUn exemple devrait clarifier tout ceci. Redirigeons un port local sur le port
telnetde la machine distante. Pour ce faire, nous utilisons :
tredir 2023 23Maintenant, 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 estma_machine.modem.maisonet la machine distante se nommenetsun.
$ 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
tredirsurnetsun, nous pourrions alors faire untelnetversma_machinedepuis le réseau, simplement en nous connectant au port redirigé denetsun, i.e.telnet netsun 2023.Le principe général de l'utilisation de
tredirest 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 liaisonterm. Les news sont fournies par le servicenntpdont 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 estnews.domain.org. Nous allons rediriger le port 2119 vers le port 119 denews.domain.org, puis nous indiquerons à notre lecteur de news que le serveurnntpse 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 avectelnetplutô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êteReply-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êteFrom:.
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:119et é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 suidertredirou 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'
inetdles é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 fichierinetd.confde façon qu'inetdne 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 àinetdpour 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 servicesnntpettelnetet 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 liaisonterm. Mais comment afficher un clientXsur une machine qui n'est pas l'autre bout de la liaison ? La réponse réside dans la connaissance du fait qu'Xutilise un service réseau particulier, à l'instar des autres programmes que nous avons évoqués. Un serveurXest à 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 serveurXgé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'environnementDISPLAYsurmachine:n, vos clientsXtenteront de se connecter au port 6000 + n demachine.Nous pouvons utiliser cette astuce pour permettre à des clients
Xde votre machine locale d'ouvrir des fenêtres sur des displays distants. Supposons que nous voulons lancer unxtermtournant sur la machine locale avec l'affichage sur le display 0 de la machinexmachine, qui est quelque part sur le réseau. Premièrement, choisissons un numéro dedisplay: 2, par exemple (n'utilisez pas 0, c'est celui que votre serveurXlocal utilise). Faisons-en le display 0 dexmachine. 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 $ xtermCeci devrait ouvrir un
xtermsur la machinexmachine. Notez que nous avons positionnéDISPLAYsurlocalhost:2. La justification en est que les clientsXutilisent parfois des sockets unix domain plutôt que des sockets internet domain lorsqu'ils se connectent à un display local (lorsqueDISPLAYcontient:2, par exemple).localhost:2demande l'utilisation d'une connexionTCP.En ce qui concerne
xmachine, la requêteXprovient de la machine placée à l'extrémité distante de votre liaisonterm(remotemachine). C'est pourquoi, si vous voulez autoriser la connexion, vous devez utiliser soitxhost + remotemachinesurxmachine, soitxauthpour mettre à jour le fichier.Xauthorityde votre machine locale pour le display 2, en utilisant la clé dexmachine.Une fois encore, pour accélérer les connexions
X, vous pouvez utiliser le programmesxpcpour établir la liaison.sxpccontient des explications sur la façon d'utilisertrediret de l'autoriser, en utilisantxauth.
termet le
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 fonctionnertermavec 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èmesUNIXet/ou leFAQ(frequently asked questions) du newsgroupcomp.mail.misc, disponible parftpanonyme surrtfm.mit.edu, dans le répertoire '/pub/usenet/comp.mail.misc'. Il existe actuellement deux paquetages qui vous permettront d'utiliser le courrier électronique avecterm. Tous deux sont accessibles parftpanonyme sursunsite.unc.edu. Il s'agit determ.mailerd+mailde Byron A. Jeff et deBCRMailHandlerXXXde 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 lesMUAles plus connus, on trouveelm,pine,vm. LesMUAne 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 lesMTA(mail transfer agents) qui sont appelés par lesMUA. 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
MTAles plus courants sur les systèmesLinuxsontsendmailetsmail. L'idée de base et de faire se connecter votreMTAà un autreMTAtournant sur une machine du réseau, laquelle saura quoi faire de vos messages. Pour cela, il faut rediriger un port local sur le portsmtpde la machine placée sur le réseau. Ensuite, indiquez à votreMTAqu'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 portsmtpde la machine du réseau (mailhost) :
tredir XXXX mailhost:25où XXXX est le numéro du port local auquel
smailva se connecter (notez qu'il est nécessaire de donner un nom à ce port dans le fichier '/etc/services' pour quesmaille reconnaisse).smailpossè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ésmailcorrectement 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 à laquellesmailse connecte lorsqu'il ne sait pas quoi faire d'un message.Dans le fichier '
routers', ajoutez :
smart_host: driver=smarthost, transport=termsmtp; path = localhostEnfin, 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 liaisonterm, 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êtesFrom:.La ligne
serviceest le nom du port local que vous avez redirigé vers le portsmtpde la machine connectée au réseau. Avec la version desmailqu'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 untredirsuidé et ne faites que rediriger le portsmtp(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 lesendmaildeSUNne peut envoyer une file de plusieurs messages vers le port redirigé, mais que lesendmail BSD 8.6.9fonctionne correctement. Ronald a appliqué àsendmailles modifications suivantes de façon à le faire fonctionner avecterm. Dans son cas, le portsendmailpar défaut (25) est utilisé pour le trafic local d'un réseau éthernet et le courrier électronique Internet est donc transmis à un portTCPredirigé.
# # 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 PORTNUMBERIci,
PORTNUMBERest 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 determsmtple 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 HOSTNAMEOù
HOSTNAMEest le nom de votre machine locale (est-ce quelocalhostfonctionne ?). 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.domainLorsque la connexion
termavec l'hôte Internet est établie, lancez les commandes suivantes sur la machine locale.
tredir PORTNUMBER internet.host:25 /usr/lib/sendmail -qNous 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 machinemailhostconnectée au réseau. La solution la plus simple est d'utilisertrshoutermtelnetpour se connecter àmailhostet 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).POPa é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 utiliserPOP, il faut qu'il y ait un serveurPOPinstallé surmailhost. Si tel est le cas, vous pouvez utiliser un clientPOPpour télécharger votre courrier régulièrement. Comme on pouvait s'y attendre,tredirjoue un rôle dans la procédure. Le port utilisé par le servicePOPest le 110 (n.b. il existe un ancien protocolePOP-2qui utilise le port 109. Nous parlons ici dePOP-3qui est la dernière version dePOP). Plusieurs clientsPOPsont disponibles. L'un d'eux, écrit en langageperlpar William Perry et maintenu par l'auteur, estpop-perl-1.X. On peut le trouver sursunsitedans/pub/Linux/system/Mail.Pour utiliser
POP, il faut rediriger un port local vers le port 110 demailhostet configurer le client de façon à ce qu'il récupère le courrier surlocalhosten utilisant le port local. Supposons par exemple qu'il y a un serveurPOPqui tourne surmailhost. Nous redirigeons le port local 2110 et lançons le clientpop-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 billSi vous n'avez pas de serveur
POPà votre disposition, le paquetageBCRMailHandlercontient 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 paquetageterm.mailerd+smail. Malheureusement, aucun de ces deux paquetages ne fonctionne avec les versions 2.0.0 et ultérieures determ.
Page suivante Page précédente Table des matières