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.