
                           Mini-HOWTO Term-Firewall

Barak Pearlmutter, barak.pearlmutter@alumni.cs.cmu.edu

   22 Mai 1996
     _________________________________________________________________

   _(Version franaise ralise par Eric Dumas, dumas@freenix.fr,
   dumas@Linux.EU.Org, 1er Juillet 1997). Ce document dcrit comme
   utiliser Term pour traverser un Firewall Internet, ce que vous n'tes
   pas suppos pouvoir faire._
     _________________________________________________________________

1. Avertissements (Important !)

   Je dcline sur le prsent document toute responsabilit d'une
   quelconque application de ce qui va suivre. Si cela choue de
   n'importe quelle manire, c'est votre problme. Ce n'est pas ma faute.
   Si vous ne comprenez pas les risques qui dcoulent de cette mthode,
   ne l'utilisez pas. Si vous employez cette mthode et que cela permet 
   des pirates vicieux de pntrer dans votre systme informatique et que
   cela vous cote votre travail et  votre entreprise des millions de
   dollars, ce n'est que de votre faute. Ne venez pas pleurer.

2. Copyright

   Sauf contre-indication, les documents HOWTO Linux sont copyrights par
   leurs auteurs respectifs. Les documents Linux HOWTO peuvent tre
   reproduits et diffuss totalement ou en partie, sous n'importe quel
   support physique ou lectronique du moment ou la notice lgale se
   trouve sur toute copie. Les diffusions commerciales sont autorises et
   encourages. Toutefois, l'auteur souhaiterait tre tenu au courant de
   telles diffusions.

   Toute traduction, travail driv contenant n'importe quel document
   HOWTO Linux doit tre convert par cette note lgale. Ainsi, vous ne
   pouvez pas crer un document driv d'un HOWTO et ajouter des
   restrictions sur sa diffusion. Des exceptions  ces rgles peuvent
   tre ventuellement acceptes dans certaines conditions. Contactez le
   coordinateur des HOWTO  l'adresse qui suit.

   En rsumant, nous souhaitons favoriser la dissmination de ces
   informations _via_ le maximum de moyens de communications. Toutefois,
   nous souhaitons garder un copyright sur ces documents et souhaiterions
   tre tenu au courant de toute initiative de diffusion de ces
   documents.

   Si vous avez des questions, contactez Greg Hankins, le coordinateur
   des HOWTO Linux  gregh@sunsite.unc.edu par courrier lectronique ou
   par tlphone au 1 404 853 9989.

3. Introduction

   Le programme term est normalement utilis sur une ligne srie ou
   modem, pour permettre  plusieurs services machine--machine de
   communiquer grce  cette simple connexion srie. Toutefois, il est
   assez utile quelquefois d'tablir une connexion entre deux machines
   communiquant par telnet avec term.

   L'utilisation la plus intressante rside dans la connexion de deux
   machines spares par des _firewalls_ ou par des serveurs _socks_. Les
   _firewalls_ permettent l'tablissement de connexions  travers
   eux-mmes, typiquement en utilisant le protocole _socks_. Ce dernier
   permet aux machines du rseau interne de se connecter  l'extrieur,
   et oblige les utilisateurs extrieurs  se connecter en premier sur la
   machine passerelle qui leur demande un mot de passe. Ces _firewalls_
   rendent impossible, par exemple, la communication entre un client X
   sur une machine intrieure et un serveur extrieur. Mais, en
   configurant une connexion term, ces restrictions peuvent tre
   contournes assez facilement, au niveau de l'utilisateur.

4. Mise en oeuvre gnrale

   Configurer une connexion term par-dessus une session telnet se fait en
   deux phases.

   Dans un premier temps, votre client habituel telnet est utilis pour
   configurer une connexion telnet et pour se connecter. Ensuite, le
   client telnet est mis en sommeil, et fait en sorte que la connexion
   telnet soit transmise  term.

5. Procdure dtaille

   En dtail, la marche  suivre est la suivante :

    1. A partir d'une machine  l'intrieur du _firewall_, se connecter
       par telnet  l'extrieur de celui-ci et s'y loger.
    2. Sauf si vous tes sous _Linux_ et que vous utilisez le systme de
       fichiers _/proc_ (voir ci-dessous), vrifiez que votre shell est
       du genre sh. C..d. que votre shell par dfaut soit une variante
       de csh. Appelez telnet par (setenv SHELL /bin/sh; telnet
       machine.la-bas.dehors).
    3. Aprs s'tre log, lancer la commande sur la machine de
       l'extrieur : term -r -n off telnet.

   Maintenant revenez  l'invite telnet sur la machine locale, en
   utilisant le caractre d'chappement ^] (ou celui que vous voulez),
   puis utilisez la commande de telnet pour excuter une commande shell !
   pour lancer term :

telnet> ! term -n on telnet <&3 >&3

   _Et voil !!!_ (Ndt : En franais dans le texte).

   (Si vous possdez une autre version de telnet, vous risquez d'avoir 
   utiliser d'autres descripteurs de fichiers que 3. C'est facile 
   dterminer en utilisant trace. Mais 3 semble fonctionner sur tous les
   telnet de type bsd que j'ai tests. J'ai galement essay sous Sun OS
   4.x et les distributions _Linux_ standard.)

   Certains clients telnet ne possdent pas de caractre d'chapement !.
   Par exemple, client telnet diffus avec la Slackware 3.0 en fait
   partie. Les sources de ce client sont senss provenir de
   ftp://ftp.cdrom.com:/pub/linux/slackware-3.0/source/n/tcpip/NetKit-B-0
   .05.tar.gz, paquetage qui contient le caractre d'chapement. Une
   solution assez simple est de rcuprer ces sources et de les
   recompiler. Je n'y suis malheureusement pas arriver. De plus, si vous
   tes  l'intrieur d'un firewall socks, vous devrez avoir un client
   telnet  la SOCKS. J'ai russi  compiler un tel cient en utilisant
   ftp://ftp.nec.com/pub/security/socks.cstc/socks.cstc.4.2.tar.gz ou si
   vous tes  l'extrieur des USA,
   ftp://ftp.nec.com/pub/security/socks.cstc/export.socks.cstc.4.2.tar.gz

   Autrement, sous _Linux_ version 1.2.13 ou prcdentes, vous pouvez
   mettre telnet en sommeil avec ^]^z , rcuprer son pid et lancer :

   term -n on -v /proc/ < telnetpid > /fd/3 telnet

   Cela ne fonctionne plus avec les noyaux 1.3 et suprieur, qui ont
   vrouill certaines failles de scurit pour viter les accs  des
   descripteurs de fichiers n'appartenant pas au propritaire du
   processus ou  ses fils.

6. Sockets pour term multiples

   C'est une bonne ide de donner un nom explicite  la socket de term.
   C'est l'argument donn  telnet dans la ligne de commande ci-dessus. A
   moins que vous n'ayez la variable d'environnement TERMSERVER
   positionne  telnet, vous pouvez appeler les clients avec le
   paramtre -t, c'est--dire : trsh -t telnet.

7. Le fichier d'initialisation .term/termrc.telnet

   J'ai attendu que la ligne soit claire en utilisant un vrficateur de
   ligne sur ce mdia. J'esprais qu'il soit totalement transparent, mais
   cela semble impossible. Toutefois, le seul caractre perturbant semble
   tre le 255. Le fichier /.term/termrc.telnet que j'emploie (le fichier
   .telnet est le nom de la connexion term, cf. supra) contient :

baudrate off
escape 255
ignore 255
timeout 600

   Il peut tre amlior en trichant, j'ai un dbit de seulement 30.000
   cps (caractres par secondes) pour une connexion longue distance
   -travers un _firewall_ lent. FTP peut aller jusqu' 100.000 cps en
   suivant le mme chemin. Une vitesse en bps (bits par seconde) raliste
   peut viter quelques temps morts.

8. Administration

   Manifestement, si vous attaquez de l'extrieur du _firewall_, et que
   vous employez une carte avec un identificateur scuris ou quelque
   chose de ce genre, vous voudrez srement inverser les rles des
   serveurs de connexion et local (si vous ne comprennez pas ce que cela
   signifie, vous n'tes peut-tre pas assez familier avec term pour
   utiliser l'astuce dcrite dans ce document d'une manire responsable).

9. Securit

   Ce n'est rien moins qu'une faille que la possibilit d'avoir une
   connexion telnet dtourne sur une machine non scurise de
   l'extrieur. Le premier risque supplmentaire provient des personnes
   capables d'utiliser la socket term que vous avez configure sans que
   vous soyez au courant. Donc, soyez prudents (personnellement, je fais
   cela sur une machine externe que je sais tre scurise. Pour tre
   plus prcis, un portable sous _Linux_ que j'administre moi-mme et qui
   n'accepte aucune connexion de l'extrieur).

   Une autre possibilit est d'ajouter socket off dans
   ~/.term/termrc.telnet ou ajouter -u off. Cela vide que la socket soit
   accessible du site distant, avec une perte de fonctionnalit assez
   mineure.

10. Mode telnet

   Vrifiez que le dmon telnetd distant n'est pas dans un mauvais mode
   sept bits. Si c'est le cas, vous devez l'indiquer  term lorsque vous
   le lancez en ajoutant un -a sur la ligne de commande (j'emploie de
   temps en temps un ^] telnet> set outbin ou un set bin ou bien, je
   lance telnet avec l'option _-8_ pour forcer la connexion en mode 8
   bits).

11. Bugs et mes souhaits concerant term

   Le programme de vrification de ligne a de temps en temps quelques
   problmes pour contrler la connexion telnet. Cela provient parfois du
   fait qu'il ne vrifie pas le code de retour de l'appel read(). Pour
   des connexions rseau, cet appel peut retourner le code d'erreur -1
   avec _EINTR_ (interrompu) ou _EAGAIN_ (ressayer). Manifestement, cela
   serait une bonne chose que cela soit vrifi.

   Un certain nombre de caractristiques pourraient faciliter
   l'utilisation de term sur telnet. Cela provient essentiellement d'une
   hypothse qui a influenc le dveloppement de term, qui est que la
   connexion dispose d'une largeur de bande faible, d'une latence rduite
   et qu'elle est quelque peu bruite.

   Une connexion telnet possde en gnral une bande passante assez
   importante, une grande latence et qui contient peu d'erreurs. Cela
   signifie que la connexion pourrait tre mieux utilise si :
    1. la taille maximale de la fentre tait augmente, bien au-del de
       la limite impose par la formule _N_PACKETS/2 = 16_ de term
    2. une option pour dsactiver l'envoi et la vrification du _checksum_
       des paquets tait implmente
    3. de plus grands paquets taient permis lorsque cela est appropri.

   Egalement, pour amliorer la scurit, il serait sympathique d'avoir
   une option dans term pour afficher la liste des connexions ralises
   par la socket dans un fichier ou sur stderr, ou bien dans les deux.
   Cela permettrait de vrifier si une connexion term a t corrompue par
   des pirates situs du ct non scuris de la machine.

12. Trucs qui semblent ne pas fonctionner

   Quelques clients et serveurs telnet acceptent d'encoder leurs
   communications pour tromper la surveillance sur rseau.
   Malheureusement, la mthode employe ci-dessus (en utilisant la
   connexion rseau que le client telnet a configur pendant que l'autre
   client est en attente) ne fonctionne pas dans ce cas. Au lieu de cela,
   il doit rellement traverser le client telnet, donc ne peut raliser
   l'encodage. Il semble qu'il faille modifier que le client, pour y a
   jouter une commande qui lance un processus avec leurs stdin et stdout
   connects au telnet en cours. Cela serait galement utile pour des
   processus de connexion automatiques, peut-tre quelqu'un l'a-t-il dj
   fait.

13. Sources

   J'ai lgrement consult la bibliothque Term. Les dtails ainsi que
   les patches  SOCKS sont disponibles en les demandant  Steven Danz
   (danz@wv.mentorg.com).

14. Remerciement

   Mes remerciements 
     * Gary Flake (flake@scr.siemens.com)
     * Bill Riemers (bcr@physics.purdue.edu)
     * Greg Louis (glouis@dynamicro.on.ca)

15. Copie supplmentaire des avertissements -Lisez-le !

   Je dcline sur le prsent document toute responsabilit d'une
   quelconque application de ce qui a t expos. Si cela choue de
   n'importe quelle manire, c'est votre problme. Ce n'est pas ma faute.
   Si vous ne comprenez pas les risques qui dcoulent de cette mthode,
   ne l'utilisez pas. Si l'emploi de cette mthode permet  des pirates
   vicieux de pntrer dans votre systme informatique et que cela vous
   cte votre travail et  votre entreprise des millions de dollars, ce
   n'est que de votre faute. Ne venez pas pleurer.
