HOWTO R�seaux Priv�s Virtuels
 Arpad Magosanyi <[email protected]> v0.2,7 Aug1997
 Traduction par Nicolas Prigent <[email protected]>
 v0.2, 7 August 1997

 11..  MMooddiiffiiccaattiioonnss


 Le probl�me de 'pas de contr�le du tty' -> -o 'BatchMode yes' par Zot
 O'Connor <[email protected]>

 Avertissements au sujet du kernel 2.0.30 par mag

 22..  BBuurrppss


 Vous avez sous les yeux le howto R�seaux Priv�s Virtuels, un
 rassemblement d'informations concernant la mani�re de monter un R�seau
 Priv� Virtuel sous Linux (et les autres Unix en g�n�ral).

 22..11..  CCooppyyrriigghhtt


 Sauf indication contraire, les droits d'auteur des HOWTO Linux sont
 d�tenus par leurs auteurs respectifs. Les HOWTO Linux peuvent �tre
 reproduits et distribu�s, en totalit� ou en partie, sur tout m�dia
 physique ou �lectronique dans la mesure o� ce copyright est pr�serv�
 dans chaque copie. La distribution commerciale en est autoris�e et
 encourag�e. L'auteur appr�cierait toutefois qu'on lui notifie
 individuellement ce genre de distribution. Le pr�sent copyright doit
 couvrir toute traduction, compilation et autre travail d�riv� des
 HOWTO Linux. C'est-�-dire qu'il est interdit d'imposer des
 restrictions de diffusion allant au del� du pr�sent copyright � des
 ouvrages inspir�s, ou incorporant des passages, de HOWTO Linux. Sous
 certaines conditions, des exceptions � ces r�gles seront tol�r�es :
 contactez le coordinateur des HOWTO � l'adresse donn�e ci-dessous.
 Pour r�sumer, nous souhaitons une diffusion aussi large que possible
 de ces informations. N�anmoins, nous entendons garder la propri�t�
 intellectuelle (copyright) des HOWTO, et appr�cierions d'�tre inform�s
 de leur redistribution. Pour toute question plus g�n�rale, merci de
 contacter le coordinateur des HOWTO, Tim Bynum, � l'adresse
 �lectronique [email protected].

 22..22..  MMiissee eenn ggaarrddee


 Comme d'habitude : L'auteur n'est en aucun cas responsable de tout
 dommage occasionn�. Pour la formulation exacte, se r�f�rer � la partie
 correspondante de la GNU GPL 0.1.1

 22..33..  MMiissee eenn ggaarrddee


 Il est question de s�curit� : vous n'�tes pas en s�curit� si vous
 n'instaurez pas une politique de s�curit� efficace, et autres choses
 ennuyeuses de ce genre.

 22..44..  RReemmeerrcciieemmeennttss


 Merci � tous ceux qui ont �crit les outils utilis�s.

 Merci � Zot O'Connor <[email protected]> pour m'avoir montr� le probl�me de
 "no controlling tty", et sa solution.


 Le traducteur voudrait remercier Aude Hurtrel pour son aide pr�cieuse.

 22..55..  EEttaatt ddee ccee ddooccuummeenntt..


 Voici les pr�liminaires. Vous devez avoir une connaissance g�n�rale de
 l'administration IP, au moins quelques connaissances sur les
 firewalls, ppp et ssh. Vous �tes de toute facon cens� les connaitre si
 vous voulez monter un VPN. J'ai simplement d�cid� d'�crire mes
 exp�riences afin de ne pas les oublier. En fait, Il se peut qu'il y
 ait des trous de s�curit�. Pour �tre honn�te, j'ai r�alis� mes essais
 sur des machines configur�es comme des routeurs, et pas des firewalls,
 c'est plus simple.

 22..66..  DDooccuummeennttaattiioonn rreellaattiivvee aauu ssuujjeett


 �  Le Firewall-HOWTO /usr/doc/HOWTO/Firewall-HOWTO

 �  Le PPP-HOWTO /usr/doc/HOWTO/PPP-HOWTO.gz

 �  La documentation ssh /usr/doc/ssh/*

 �  The Linux Network Admins' Guide

 �  NIST Computer Security Special Publications
    http://csrc.ncsl.nist.gov/nistpubs/

 �  Firewall list ([email protected])

 33..  IInnttrroodduuccttiioonn


 Les firewalls �tant de plus en plus largement utilis�s dans les
 syst�mes de s�curit� internet et intranet, la capacit� de r�aliser de
 bons VPNs est de plus en plus importante. Voici le relev� de mes
 exp�riences. Les commentaires sont les bienvenus.

 33..11..  CCoonnvveennttiioonnss ddee dd��nnoommiinnaattiioonn


 J'utiliserais les termes de "firewall-ma�tre" et "firewall-esclave",
 bien que r�aliser un VPN n'ait rien � voir avec l'architecture client-
 serveur. Je me r�f�re simplement � eux en tant que participant actif
 et passif de la mise en place de la connection. On utilisera la
 d�nomination de "ma�tre" pour l'h�te qui initie la connection, et
 celle d'esclave pour le participant passif.

 44..  LLee ffaaiirree



 44..11..  PPrr��ppaarraattiioonn


 Avant de commencer � mettre en place votre syst�me, vous devriez
 conna�tre les d�tails concernant le r�seau. Je consid�re que vous avez
 deux firewalls, chacun prot�geant un intranet, et qu'il sont tous deux
 connect�s � l'internet. De fait, vous devriez avoir deux interfaces
 (au moins) par firewall. Prenez une feuille de papier et �crivez leurs
 adresses IP et masques de r�seau. Vous aurez besoin d'une adresse IP
 supl�mentaire par firewall pour le VPN que vous voulez mettre en
 place. Ces adresses devraient �tre ext�rieures � vos sous-r�seaux
 existants. Je vous sugg�re d'utiliser des adresses de l'espace
 d'adressage "priv�". Les voici :

 �  10.0.0.0 - 10.255.255.255

 �  172.16.0.0 - 172.31.255.255

 �  192.168.0.0 - 192.168.255.255


 Pour les besoins de l'exemple, voici une configuration : les deux
 bastions s'appellent fellini et polanski. Ils ont une interface vers
 l'internet (-out), une pour l'intranet (-in), et une pour le VPN
 (-vpn).

 �  fellini-out: 193.6.34.12 255.255.255.0

 �  fellini-in: 193.6.35.12 255.255.255.0

 �  fellini-vpn: 192.168.0.1 point-a-point

 �  polanski-out: 193.6.36.12 255.255.255.0

 �  polanski-in: 193.6.37.12 255.255.255.0

 �  polanski-vpn: 192.168.0.2 point-a-point


 Voici pour les pr�paratifs.

 44..22..  RRaasssseemmbblleerr lleess oouuttiillss


 Vous aurez besoin :

 �  d'un firewall pour Linux

 �  d'un kernel

 �  d'une configuration minimale

 �  d'ipfwadm

 �  de fwtk

 �  des Outils pour le VPN

 �  ssh

 �  pppd

 �  sudo

 �  pty-redir


 Version actuelles (NDT :au moment de la r�daction de cet HOWTO)

 �  kernel : 2.0.29 Utilisez un kernel stable, qui doit �tre plus
    r�cent que la version 2.0.20, � cause du bug du "ping de la mort".
    Au moment de la r�daction, la version 2.0.30 est le dernier kernel
    stable, mais il contient des bugs. Si vous voulez b�n�ficier du
    super code efficace et rapide qu'il contient, essayez un pr�patch.
    Je trouve que le 3�me fonctionne plut�t bien.

 �  Un syst�me de base : Je pr�f�re Debian. Vous n'avez pas du tout
    envie d'utiliser de gros logiciels et vous n'avez jamais eu
    l'intention d'utiliser Sendmail (comme souvent dans le cas d'autres
    h�tes unix).  Vous ne voulez donc absolument pas permettre
    l'utilisation de telnet, ftp et des commandes "r".

 �  ipfwadm : j'ai utilis� le 2.3.0

 �  fwtk :  j'ai utilis� le 1.3

 �  ssh : >= 1.2.20. Il y a des probl�mes avec le protocole sous-jacent
    dans les versions plus anciennes.

 �  pppd : j'ai utilis� la version  2.2.0 por les tests, mais je ne
    suis pas s�r qu'elle soit s�curis�e, c'est pourquoi j'ai plac� le
    bit setuid � 0, et utilis� sudo pour le lancer.

 �  sudo : 1.5.2 est la derni�re version dont je sois au courant.

 �  pty-redir : que j'ai �crit. Essayez
    ftp://ftp.vein.hu/ssa/contrib/mag/pty-redir-0.1.tar.gz. On en est �
    la version 0.1 mantenant. Dites-moi si vous rencontrez un
    quelconque probl�me en l'utilisant.


 44..33..  CCoommppiilleerr eett iinnssttaalllleerr


 Compilez ou installez les outils que vous venez de rassembler.
 Consultez attentivement leur documentation (et le firewall-howto) pour
 de plus amples informations. Mantenant, nous disposons des outils.


 44..44..  CCoonnffiigguurreerr lleess aauuttrreess ssoouuss--ssyysstt��mmeess

 Configurez correctement les param�tres des firewalls. Vous devez
 autoriser les communications ssh entre les deux h�tes disposant de
 firewalls. Cela signifie qu'il doit exister une connexion sur le port
 22 du ma�tre vers l'esclave. Lancez sshd sur l'esclave et v�rifiez que
 vous pouvez vous connecter. Je n'ai pas v�rifi� cette �tape, n'h�sitez
 pas � me communiquer les r�sultats que vous avez obtenus.

 44..55..  CCoonnffiigguurreerr lleess ccoommpptteess ppoouurr llee VVPPNN


 Cr�ez un compte sur le firewall esclave en utilisant vos outils
 favoris (par exemple vi, mkdir, chown, chmod). Vous pouvez aussi cr�er
 un compte sur le ma�tre, mais je pense que vous souhaitez que la
 connexion se fasse au d�marrage, nous nous servirons donc de votre
 compte root habituel. Est-ce que quelqu'un pourrait me signaler les
 risques qu'il y a � utiliser le compte root sur le ma�tre?

 44..66..  GG��nn��rreerr uunnee ccll�� sssshh ppoouurr llee ccoommppttee dduu mmaa��ttrree


 Utilisez le programme de g�n�ration de cl� de ssh. Donnez un mot de
 passe vide pour la cl� priv�e si vous voulez r�aliser une
 configuration automatique du VPN.

 44..77..  CCoonnffiigguurreerr uunnee ccoonnnneexxiioonn sssshh aauuttoommaattiiqquuee ppoouurr llee ccoommppttee eessccllaavvee


 Copiez la cl� publique fra�chement g�n�r�e dans le compte esclave dans
 le fichier .ssh/authorized_keys, et configurez les droits d'acc�s
 comme indiqu� ci dessous :





 drwx------ 2 esclave esclave 1024 Apr 7 23:49 ./
 drwx------ 4 esclave esclave 1024 Apr 24 14:05 ../
 -rwx------ 1 esclave esclave 328 Apr 7 03:04 authorized_keys
 -rw------- 1 esclave esclave 660 Apr 14 15:23 known_hosts
 -rw------- 1 esclave esclave 512 Apr 21 10:03 random_seed



 la premi�re ligne �tant ~esclave/.ssh, la seconde ~esclave.

 44..88..  RReesssseerrrreerr llaa ss��ccuurriitt�� sssshh ssuurr lleess bbaassttiioonnss..


 Ce qui se traduit par la configuration suivante dans sshd_conf :


 PermitRootLogin no
 IgnoreRhosts yes
 StrictModes yes
 QuietMode no
 FascistLogging yes
 KeepAlive yes
 RhostsAuthentication no
 RhostsRSAAuthentication no
 RSAAuthentication yes
 PasswordAuthentication no
 PermitEmptyPasswords no



 L'authentification par mot de passe �tant d�sactiv�e, la connexion
 n'est possible qu'avec les cl�s autoris�es. (Vous aurez bien entendu
 d�sactiv� telnet et la commande 'r').

 44..99..  PPeerrmmeettttrree ll''eexx��ccuuttiioonn ddee pppppp eett rroouuttee ssuurr lleess ddeeuuxx ccoommpptteess..


 Comme le compte ma�tre est aussi le compte root en ce qui me concerne,
 Il n'y a rien eu � faire. Pour le compte esclave, les lignes suivantes
 apparaissent dans /etc/sudoers :

 Cmnd_Alias VPN=/usr/sbin/pppd,/usr/local/vpn/route
 esclave ALL=NOPASSWD: VPN



 Comme vous pouvez le voir, j'utilise des scripts pour mettre en place
 ppp et les tables de routage sur l'h�te esclave.

 44..1100..  FFaaiirree lleess ssccrriippttss


 Sur l'h�te ma�tre, j'utilise un full-blown script :













 #! /bin/sh
 # skeleton      example file to build /etc/init.d/ scripts.
 #               This file should be used to construct scripts for /etc/init.d.
 #
 #               Written by Miquel van Smoorenburg <[email protected]>.
 #               Modified for Debian GNU/Linux
 #               by Ian Murdock <[email protected]>.
 #
 # Version:      @(#)skeleton  1.6  11-Nov-1996  [email protected]
 #

 PATH=/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/bin/X11/:
 PPPAPP=/home/esclave/ppp
 ROUTEAPP=/home/esclave/route
 PPPD=/usr/sbin/pppd
 NAME=VPN
 REDIR=/usr/local/bin/pty-redir
 SSH=/usr/bin/ssh
 MYPPPIP=192.168.0.1
 TARGETIP=192.168.0.2
 TARGETNET=193.6.37.0
 MYNET=193.6.35.0
 ESCLAVEWALL=polanski-out
 ESCLAVEACC=esclave

 test -f $PPPD || exit 0

 set -e

 case "$1" in
   start)
         echo setting up vpn
         $REDIR $SSH -o 'Batchmode yes' -t -l $ESCLAVEACC $ESCLAVEWALL sudo $PPPAPP >/tmp/device
         TTYNAME=`cat /tmp/device`
 echo tty is $TTYNAME
         sleep 10s
         if [ ! -z $TTYNAME ]
         then
         $PPPD $TTYNAME ${MYPPPIP}:${TARGETIP}
         else
                 echo FAILED!
                 logger "vpn setup failed"
         fi
         sleep 5s
         route add -net $TARGETNET gw $TARGETIP
         $SSH -o 'Batchmode yes' -l $ESCLAVEACC $ESCLAVEWALL sudo $ROUTEAPP
     ;;
   stop)
         ps -ax | grep "ssh -t -l $ESCLAVEACC " | grep -v grep | awk '{print $1}' | xargs kill
     ;;
   *)
     # echo "Usage: /etc/init.d/$NAME {start|stop|reload}"
     echo "Usage: /etc/init.d/$NAME {start|stop}"
     exit 1
     ;;
 esac

 exit 0




 L'esclave utilise un script pour la pr�paration du routage
 (/usr/local/vpn/route) :


 #!/bin/bash
 /sbin/route add -net 193.6.35.0 gw 192.168.0.1



 et son .ppprc est tel qu'indiqu� ci-dessous :


 passive



 55..  RReeggaarrddoonnss ccee qquuii ssee ppaassssee ::


 Le ma�tre se connecte � l'esclave, commence pppd, et redirige tout
 vers un terminal pty local. Ce qui consiste en l'encha�nement
 suivant :

 �  allouer un nouveau pty

 �  ssh'er dans l'esclave

 �  lancer pppd sur l'esclave

 �  le ma�tre lance pppd sur son pty local

 �  et met en place la table de routage sur le client.


 Le temps entre en consid�ration (ne serait-ce qu'un peu), c'est pour
 cela que l'on a ajout� 'sleep 10'.

 66..  LLee ffaaiirree �� llaa mmaaiinn..


 66..11..  SSee ccoonnnneecctteerr


 Vous avez d�j� essay� de voir si ssh marche bien, n'est-ce pas ? Si
 l'esclave refuse de vous laisser vous connecter, lisez les fichiers
 logs. Peut-�tre y a-t-il des probl�mes d'autorisation sur certains
 fichiers, ou avec la configuration de sshd.

 66..22..  FFaaiirree cchhaauuffffeerr pppppp


 Connectez-vous � l'esclave, et tapez :

 sudo /usr/sbin/pppd passive




 Vous devriez voir les ennuis arriver � partir de ce moment. Si ca
 marche, c'est bien ; sinon, c'est qu'il y a des probl�mes soit avec
 sudo, soit avec pppd. Regardez ce que les commandes ont dit, ainsi que
 les fichiers  _/_e_t_c_/_p_p_p_/_o_p_t_i_o_n_s et _._p_p_p_r_c . Si tout fonctionne, ajoutez
 'passive' dans .ppprc, et essayez de nouveau. Pour vous d�barrasser
 des probl�mes et continuer � travailler, appuyez sur Enter, '~' et
 '^Z'. Vous devriez alors avoir l'invite du ma�tre, et faire kill %1.
 Regardez la partie concernant les r�glages si vous voulez en savoir
 plus sur les caract�res d'�chappement.



 66..33..  RR��uunniirr lleess ddeeuuxx..


 Bon, alors

 ssh -l esclave polanski sudo /usr/sbin/pppd




 devrait aussi marcher, et vous renvoyer son blabla en pleine t�te.

 66..44..  RReeddiirreeccttiioonn dduu tteerrmmiinnaall


 Essayez de tout rediriger cette fois-ci :

 /usr/local/bin/pty-redir /usr/bin/ssh -l esclave polanski sudo /usr/sbin/pppd




 Longue phrase, hein ? Vous �tes suppos� utiliser le chemin d'acc�s
 complet dans l'ex�cutable ssh, du fait que le programme de redirection
 du pty n'autorise que cette forme pour des raisons de s�curit�.
 Maintenant, vous disposez d'un nom de fichier sp�cial pour le
 programme. Disons que c'est _/_d_e_v_/_t_t_y_p_0 . Vous pouvez utiliser la
 commande ps pour regarder ce qui s'est pass�. Regardons 'p0'.

 66..55..  YY aa--tt--iill qquueellqquuee cchhoossee ssuurr llee ddiissppoossiittiiff ??



 Essayez

 /usr/sbin/pppd /dev/ttyp0 local 192.168.0.1:192.168.0.2




 pour �tablir la connexion. Regardez la sortie de la commande ifconfig
 pour voir si le dispositif s'est install�, et utilisez ping pour
 v�rifier votre r�seau virtuel.

 66..66..  MMeettttrree eenn ppllaaccee llee rroouuttaaggee..


 Configurez les routes sur l'h�te ma�tre, ainsi que sur l'esclave. Vous
 devriez maintenant �tre capable de lancer un ping sur un h�te d'un
 intranet depuis un h�te sur l'autre intranet. Mettez en place des
 r�gles additionnelles de firewall. Maintenant que vous avez le VPN,
 vous pouvez mettre en place les r�gles concernant l'interconnexion des
 deux intranets.

 77..  RR��ggllaaggeess


 77..11..  RR��ggllaaggeess ddee llaa ccoonnffiigguurraattiioonn


 Comme je l'ai d�j� dit, cet HOWTO est avant tout un m�mo rapide sur la
 mani�re dont j'ai mont� un VPN. Il y a des choses dans la
 configuration que je n'ai pas encore essay�es. Ces choses rejoindront
 leur place quand je les aurais essay�es, ou que quelqu'un m'aura dit :
 "C'est comme �a que �a marche". La chose la plus importante est que la
 connexion qu'utilise ppp n'est pas en 8 bits. Je crois que l'on peut
 faire quelque chose � ce sujet avec la configuration de ssh ou celle
 de pty. Dans cette configuration, ssh utilise le caract�re tilde (~)
 comme un caract�re d'�chappement. Cela pourait stopper ou ralentir la
 communication si une s�quence retour-�-la-ligne/tilde conduisait ssh �
 retourner une invite. Selon la documentation de ssh : <sur la plupart
 des syst�mes, donner au caract�re d'�chappement la valeur "none"
 rendra de la session transparente, m�me si un tty est utilis�.> Le
 drapeau correspondant � cela pour ssh est '_-_e', et vous pouvez aussi
 le placer dans le fichier de configuration.

 77..22..  BBaannddee ppaassaannttee ccoonnttrree ccyycclleess dd''hhoorrllooggee


 Cr�er quelque chose, aussi virtuel soit-il, entra�ne l'utilisation de
 ressources du monde r�el. Un VPN utilise de la bande passante et des
 ressources de calcul. Le but �tant de trouver un �quilibre entre les
 deux. Vous pouvez faire des r�glages avec le drapeau '-C' ou l'option
 'CompressionLevel'. Vous pourriez essayer de trouver un autre
 algorithme de chiffrement, mais je ne vous le recommande pas. Notez
 aussi que le temps de transmission peut �tre allong� si vous utilisez
 un meilleur taux de compression. Toutes vos exp�riences sont les
 bienvenues.

 88..  AAnnaallyyssee ddee vvuullnn��rraabbiilliitt��


 J'essaie de couvrir ici les trous de s�curit� naissant de cette mise
 en oeuvre en particulier, et des VPNs en g�n�ral. Tous les
 commentaires seront vivement appreci�s.

 �  sudo : en fait, j'utilise sudo de mani�re excessive. Je crois que
    c'est toujours plus s�r que d'utiliser les bits setuid. C'est
    encore un inconv�nient de Linux de n'avoir pas un contr�le d'acc�s
    plus rigoureux. On attend la compatibilit� avec POSIX.6
    <http://www.xarius.demon.co.uk/software/posix6/>. Ce qui est pire,
    c'est qu'il y a des scripts shell qui vont �tre lanc�s avec sudo.
    Plut�t mauvais. Quelqu'un a une idee ?

 �  pppd : lui aussi lance suid root. Il peut �tre configur� par le
    .ppprc de l'utilisateur. Il se pourrait qu'il y ait de beaux
    d�passements de la m�moire tampon. Ligne de d�fense : s�curisez
    votre compte esclave autant que possible.

 �  ssh : faites attention au fait que les versions de ssh ant�rieures
    � la 1.2.20 contiennent des trous de s�curit�. Pire, nous avons
    �tabli une configuration telle que lorsque le compte ma�tre a �t�
    compromis, le compte esclave l'est lui aussi, et est grand ouvert
    aux attaques utilisant des programmes lanc�s avec sudo. C'est parce
    que j'ai choisi de ne pas avoir de mot de passe sur la cl� secr�te
    du ma�tre pour permettre la configuration automatique du VPN.

 �  firewall : avec des r�gles de firewall incorrectes sur un des
    bastions, vous ouvrez les deux intranets. Je recommande d'utiliser
    le camouflage d'adresse IP (car l'installation de routes
    incorrectes est un peu moins �vidente), et faire des contr�les tr�s
    s�rieux sur les interfaces VPN.