Mini-HOWTO Term-Firewall
 Barak Pearlmutter, [email protected]
 22 Mai 1996

 (Version   francaise   realisee   par  Eric  Dumas,  [email protected],
 [email protected], 1er  Juillet  1997).   Ce  document  decrit  comme
 utiliser  Term pour traverser un Firewall Internet, ce que vous n'etes
 pas suppose pouvoir faire.

 11..  AAvveerrttiisssseemmeennttss ((IImmppoorrttaanntt !!))

 Je  decline  sur  le  present  document  toute  responsabilite   d'une
 quelconque  application  de  ce  qui  va  suivre.  Si  cela  echoue de
 n'importe quelle maniere, c'est votre probleme. Ce n'est pas ma faute.
 Si  vous  ne comprenez pas les risques qui decoulent de cette methode,
 ne l'utilisez pas. Si vous employez cette methode et que cela permet a
 des pirates vicieux de penetrer dans votre systeme informatique et que
 cela vous coute votre travail et a votre entreprise  des  millions  de
 dollars, ce n'est que de votre faute. Ne venez pas pleurer.

 22..  CCooppyyrriigghhtt

 Sauf contre-indication, les documents HOWTO Linux sont copyrightes par
 leurs auteurs respectifs.  Les  documents  Linux  HOWTO  peuvent  etre
 reproduits  et  diffuses  totalement ou en partie, sous n'importe quel
 support physique ou electronique du moment  ou  la  notice  legale  se
 trouve  sur  toute copie.  Les diffusions commerciales sont autorisees
 et encouragees. Toutefois, l'auteur souhaiterait etre tenu au  courant
 de telles diffusions.

 Toute  traduction,  travail  derive  contenant n'importe quel document
 HOWTO Linux doit etre convert par cette note legale.  Ainsi,  vous  ne
 pouvez  pas  creer  un  document  derive  d'un  HOWTO  et  ajouter des
 restrictions sur sa diffusion. Des exceptions  a  ces  regles  peuvent
 etre  eventuellement acceptees dans certaines conditions. Contactez le
 coordinateur des HOWTO a l'adresse qui suit.

 En  resumant,  nous  souhaitons  favoriser  la  dissemination  de  ces
 informations  _v_i_a  le  maximum de moyens de communications. Toutefois,
 nous souhaitons garder un copyright sur ces documents et souhaiterions
 etre  tenu  au  courant  de  toute  initiative  de  diffusion  de  ces
 documents.

 Si vous avez des questions, contactez Greg  Hankins,  le  coordinateur
 des  HOWTO  Linux a [email protected] par courrier electronique ou
 par telephone au 1 404 853 9989.

 33..  IInnttrroodduuccttiioonn

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

 L'utilisation la plus interessante reside dans la  connexion  de  deux
 machines  separees  par  des _f_i_r_e_w_a_l_l_s ou par des serveurs _s_o_c_k_s.  Les
 _f_i_r_e_w_a_l_l_s permettent l'etablissement  de  connexions  a  travers  eux-
 memes, typiquement en utilisant le protocole _s_o_c_k_s.  Ce dernier permet
 aux machines du reseau interne  de  se  connecter  a  l'exterieur,  et
 oblige  les  utilisateurs  exterieurs a se connecter en premier sur la
 machine passerelle qui leur demande un mot de  passe.   Ces  _f_i_r_e_w_a_l_l_s
 rendent  impossible,  par  exemple, la communication entre un client X
 sur  une  machine  interieure  et  un  serveur  exterieur.   Mais,  en
 configurant   une   connexion  term,  ces  restrictions  peuvent  etre
 contournees assez facilement, au niveau de l'utilisateur.

 44..  MMiissee eenn ooeeuuvvrree ggeenneerraallee

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

 Dans  un  premier temps, votre client habituel telnet est utilise 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 a term.

 55..  PPrroocceedduurree ddeettaaiilllleeee

 En detail, la marche a suivre est la suivante :

 1. A partir d'une machine a l'interieur du _f_i_r_e_w_a_l_l, se connecter  par
    telnet a l'exterieur de celui-ci et s'y loger.

 2. Sauf  si  vous  etes  sous LLiinnuuxx et que vous utilisez le systeme de
    fichiers _/_p_r_o_c (voir ci-dessous), verifiez que votre shell  est  du
    genre  sh.  C.a.d.  que votre shell par defaut soit une variante de
    csh. Appelez telnet par (setenv SHELL /bin/sh;  telnet  machine.la-
    bas.dehors).

 3. Apres s'etre loge, lancer la commande sur la machine de l'exterieur
    : term -r -n off telnet.

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

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

 _E_t _v_o_i_l_a _!_!_! (Ndt : En francais dans le texte).

 (Si  vous possedez une autre version de telnet, vous risquez d'avoir a
 utiliser d'autres descripteurs de  fichiers  que  3.  C'est  facile  a
 determiner  en utilisant trace. Mais 3 semble fonctionner sur tous les
 telnet de type bsd que j'ai testes. J'ai egalement essaye sous Sun  OS
 4.x et les distributions LLiinnuuxx standard.)

 Certains  clients telnet ne possedent pas de caractere d'echapement !.
 Par exemple, client telnet diffuse  avec  la  Slackware  3.0  en  fait
 partie.    Les   sources   de   ce  client  sont  senses  provenir  de
 ftp://ftp.cdrom.com:/pub/linux/slackware-3.0/source/n/tcpip/NetKit-
 B-0.05.tar.gz,  paquetage  qui contient le caractere d'echapement. Une
 solution  assez  simple  est  de  recuperer  ces  sources  et  de  les
 recompiler.  Je n'y suis malheureusement pas arriver. De plus, si vous
 etes a l'interieur d'un firewall socks, vous devrez  avoir  un  client
 telnet  a  la  SOCKS. J'ai reussi a compiler un tel cient en utilisant
 ftp://ftp.nec.com/pub/security/socks.cstc/socks.cstc.4.2.tar.gz ou  si
 vous         etes         a         l'exterieur        des        USA,
 ftp://ftp.nec.com/pub/security/socks.cstc/export.socks.cstc.4.2.tar.gz

 Autrement,  sous  LLiinnuuxx  version  1.2.13  ou  precedentes, vous pouvez
 mettre telnet en sommeil avec  ^]^z , recuperer son pid et lancer :

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

 Cela ne fonctionne plus avec les noyaux  1.3  et  superieur,  qui  ont
 verouille  certaines  failles  de securite pour eviter les acces a des
 descripteurs  de  fichiers  n'appartenant  pas  au   proprietaire   du
 processus ou a ses fils.

 66..  SSoocckkeettss ppoouurr tteerrmm multiples

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

 77..  LLee ffiicchhiieerr dd''iinniittiiaalliissaattiioonn ..tteerrmm//tteerrmmrrcc..tteellnneett

 J'ai  attendu  que la ligne soit claire en utilisant un verficateur de
 ligne sur ce media. J'esperais qu'il soit totalement transparent, mais
 cela semble impossible. Toutefois, le seul caractere perturbant semble
 etre 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 etre ameliore en trichant, j'ai un debit de  seulement  30.000
 cps  (caracteres  par  secondes) pour une connexion longue distance a-
 travers un _f_i_r_e_w_a_l_l lent.  FTP  peut  aller  jusqu'a  100.000  cps  en
 suivant le meme chemin. Une vitesse en bps (bits par seconde) realiste
 peut eviter quelques temps morts.

 88..  AAddmmiinniissttrraattiioonn

 Manifestement, si vous attaquez de l'exterieur  du  _f_i_r_e_w_a_l_l,  et  que
 vous  employez  une  carte  avec un identificateur securise ou quelque
 chose de ce genre,  vous  voudrez  surement  inverser  les  roles  des
 serveurs  de connexion et local (si vous ne comprennez pas ce que cela
 signifie, vous n'etes peut-etre pas  assez  familier  avec  term  pour
 utiliser l'astuce decrite dans ce document d'une maniere responsable).

 99..  SSeeccuurriittee

 Ce n'est rien moins qu'une  faille  que  la  possibilite  d'avoir  une
 connexion   telnet   detournee   sur  une  machine  non  securisee  de
 l'exterieur.  Le premier risque supplementaire provient des  personnes
 capables  d'utiliser  la socket term que vous avez configuree sans que
 vous soyez au courant. Donc, soyez prudents (personnellement, je  fais
 cela  sur  une  machine externe que je sais etre securisee.  Pour etre
 plus precis, un portable sous LLiinnuuxx que j'administre moi-meme  et  qui
 n'accepte aucune connexion de l'exterieur).

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

 1100..  MMooddee tteellnneett

 Verifiez que le demon telnetd distant n'est pas dans un  mauvais  mode
 sept  bits. Si c'est le cas, vous devez l'indiquer a 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).

 1111..  BBuuggss eett mmeess ssoouuhhaaiittss ccoonncceerraanntt tteerrmm

 Le  programme  de  verification  de ligne a de temps en temps quelques
 problemes pour controler la connexion telnet. Cela provient parfois du
 fait  qu'il  ne verifie pas le code de retour de l'appel read().  Pour
 des connexions reseau, cet appel peut retourner le  code  d'erreur  -1
 avec  _E_I_N_T_R  (interrompu)  ou _E_A_G_A_I_N (reessayer).  Manifestement, cela
 serait une bonne chose que cela soit verifie.

 Un   certain   nombre   de   caracteristiques   pourraient   faciliter
 l'utilisation  de term sur telnet. Cela provient essentiellement d'une
 hypothese qui a influence le developpement de term,  qui  est  que  la
 connexion dispose d'une largeur de bande faible, d'une latence reduite
 et qu'elle est quelque peu bruitee.

 Une connexion telnet possede  en  general  une  bande  passante  assez
 importante,  une  grande  latence  et qui contient peu d'erreurs. Cela
 signifie que la connexion pourrait etre mieux utilisee si :

 1. la taille maximale de la fenetre etait augmentee, bien  au-dela  de
    la limite imposee par la formule _N___P_A_C_K_E_T_S_/_2 _= _1_6 de term

 2. une  option  pour desactiver l'envoi et la verification du _c_h_e_c_k_s_u_m
    des paquets etait implementee

 3. de plus grands paquets etaient permis lorsque cela est approprie.

 Egalement, pour ameliorer la securite, il serait  sympathique  d'avoir
 une  option  dans term pour afficher la liste des connexions realisees
 par la socket dans un fichier ou sur stderr, ou bien  dans  les  deux.
 Cela permettrait de verifier si une connexion term a ete corrompue par
 des pirates situes du cote non securise de la machine.

 1122..  TTrruuccss qquuii sseemmbblleenntt nnee ppaass ffoonnccttiioonnnneerr

 Quelques  clients  et  serveurs  telnet  acceptent   d'encoder   leurs
 communications    pour    tromper    la   surveillance   sur   reseau.
 Malheureusement,  la  methode  employee  ci-dessus  (en  utilisant  la
 connexion  reseau que le client telnet a configure pendant que l'autre
 client est en attente) ne fonctionne pas dans  ce  cas.   Au  lieu  de
 cela,  il  doit  reellement  traverser  le client telnet, donc ne peut
 realiser 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 connectes au telnet en cours.  Cela serait  egalement  utile
 pour des processus de connexion automatiques, peut-etre quelqu'un l'a-
 t-il deja fait.

 1133..  SSoouurrcceess

 J'ai legerement consulte la bibliotheque Term. Les details  ainsi  que
 les  patches  a  SOCKS sont disponibles en les demandant a Steven Danz
 ([email protected]).

 1144..  RReemmeerrcciieemmeenntt

 Mes remerciements a

 +o  Gary Flake ([email protected])

 +o  Bill Riemers ([email protected])

 +o  Greg Louis ([email protected])

 1155..  CCooppiiee ssuupppplleemmeennttaaiirree ddeess aavveerrttiisssseemmeennttss --LLiisseezz--llee !!

 Je  decline  sur  le  present  document  toute  responsabilite   d'une
 quelconque  application  de  ce  qui  a  ete expose. Si cela echoue de
 n'importe quelle maniere, c'est votre probleme. Ce n'est pas ma faute.
 Si  vous  ne comprenez pas les risques qui decoulent de cette methode,
 ne l'utilisez pas. Si l'emploi de cette methode permet a  des  pirates
 vicieux  de  penetrer dans votre systeme informatique et que cela vous
 cote votre travail et a votre entreprise des millions de  dollars,  ce
 n'est que de votre faute. Ne venez pas pleurer.