  HOWTO Rseaux Privs Virtuels
  Arpad Magosanyi <mag@bunuel.tii.matav.hu> v0.2,7 Aug1997
  Traduction par Nicolas Prigent <prigentn@cicrp.jussieu.fr>
  v0.2, 7 August 1997

  11..  MMooddiiffiiccaattiioonnss


  Le problme de 'pas de contrle du tty' -> -o 'BatchMode yes' par Zot
  O'Connor <zot@crl.com>

  Avertissements au sujet du kernel 2.0.30 par mag

  22..  BBuurrppss


  Vous avez sous les yeux le howto Rseaux Privs Virtuels, un
  rassemblement d'informations concernant la manire de monter un Rseau
  Priv Virtuel sous Linux (et les autres Unix en gnral).

  22..11..  CCooppyyrriigghhtt


  Sauf indication contraire, les droits d'auteur des HOWTO Linux sont
  dtenus par leurs auteurs respectifs. Les HOWTO Linux peuvent tre
  reproduits et distribus, en totalit ou en partie, sur tout mdia
  physique ou lectronique dans la mesure o ce copyright est prserv
  dans chaque copie. La distribution commerciale en est autorise et
  encourage. L'auteur apprcierait toutefois qu'on lui notifie
  individuellement ce genre de distribution. Le prsent copyright doit
  couvrir toute traduction, compilation et autre travail driv des
  HOWTO Linux. C'est--dire qu'il est interdit d'imposer des
  restrictions de diffusion allant au del du prsent copyright  des
  ouvrages inspirs, ou incorporant des passages, de HOWTO Linux. Sous
  certaines conditions, des exceptions  ces rgles seront tolres :
  contactez le coordinateur des HOWTO  l'adresse donne ci-dessous.
  Pour rsumer, nous souhaitons une diffusion aussi large que possible
  de ces informations. Nanmoins, nous entendons garder la proprit
  intellectuelle (copyright) des HOWTO, et apprcierions d'tre informs
  de leur redistribution. Pour toute question plus gnrale, merci de
  contacter le coordinateur des HOWTO, Tim Bynum,  l'adresse
  lectronique tjbynum@wallybox.cei.net.

  22..22..  MMiissee eenn ggaarrddee


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

  22..33..  MMiissee eenn ggaarrddee


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

  22..44..  RReemmeerrcciieemmeennttss


  Merci  tous ceux qui ont crit les outils utiliss.

  Merci  Zot O'Connor <zot@crl.com> pour m'avoir montr le problme de
  "no controlling tty", et sa solution.


  Le traducteur voudrait remercier Aude Hurtrel pour son aide prcieuse.

  22..55..  EEttaatt ddee ccee ddooccuummeenntt..


  Voici les prliminaires. Vous devez avoir une connaissance gnrale 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 dcid d'crire mes
  expriences afin de ne pas les oublier. En fait, Il se peut qu'il y
  ait des trous de scurit. Pour tre honnte, j'ai ralis mes essais
  sur des machines configures comme des routeurs, et pas des firewalls,
  c'est plus simple.

  22..66..  DDooccuummeennttaattiioonn rreellaattiivvee aauu ssuujjeett


    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 (majordomo@greatcircle.com)

  33..  IInnttrroodduuccttiioonn


  Les firewalls tant de plus en plus largement utiliss dans les
  systmes de scurit internet et intranet, la capacit de raliser de
  bons VPNs est de plus en plus importante. Voici le relev de mes
  expriences. Les commentaires sont les bienvenus.

  33..11..  CCoonnvveennttiioonnss ddee ddnnoommiinnaattiioonn


  J'utiliserais les termes de "firewall-matre" et "firewall-esclave",
  bien que raliser un VPN n'ait rien  voir avec l'architecture client-
  serveur. Je me rfre simplement  eux en tant que participant actif
  et passif de la mise en place de la connection. On utilisera la
  dnomination de "matre" pour l'hte qui initie la connection, et
  celle d'esclave pour le participant passif.

  44..  LLee ffaaiirree



  44..11..  PPrrppaarraattiioonn


  Avant de commencer  mettre en place votre systme, vous devriez
  connatre les dtails concernant le rseau. Je considre que vous avez
  deux firewalls, chacun protgeant un intranet, et qu'il sont tous deux
  connects  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 rseau. Vous aurez besoin d'une adresse IP
  suplmentaire par firewall pour le VPN que vous voulez mettre en
  place. Ces adresses devraient tre extrieures  vos sous-rseaux
  existants. Je vous suggre 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 prparatifs.

  44..22..  RRaasssseemmbblleerr lleess oouuttiillss


  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 rdaction de cet HOWTO)

    kernel : 2.0.29 Utilisez un kernel stable, qui doit tre plus
     rcent que la version 2.0.20,  cause du bug du "ping de la mort".
     Au moment de la rdaction, la version 2.0.30 est le dernier kernel
     stable, mais il contient des bugs. Si vous voulez bnficier du
     super code efficace et rapide qu'il contient, essayez un prpatch.
     Je trouve que le 3me fonctionne plutt bien.

    Un systme de base : Je prfre 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
     htes 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 problmes 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 sr qu'elle soit scurise, c'est pourquoi j'ai plac le
     bit setuid  0, et utilis sudo pour le lancer.

    sudo : 1.5.2 est la dernire 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 problme en l'utilisant.


  44..33..  CCoommppiilleerr eett iinnssttaalllleerr


  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.


  44..44..  CCoonnffiigguurreerr lleess aauuttrreess ssoouuss--ssyyssttmmeess

  Configurez correctement les paramtres des firewalls. Vous devez
  autoriser les communications ssh entre les deux htes disposant de
  firewalls. Cela signifie qu'il doit exister une connexion sur le port
  22 du matre vers l'esclave. Lancez sshd sur l'esclave et vrifiez que
  vous pouvez vous connecter. Je n'ai pas vrifi cette tape, n'hsitez
  pas  me communiquer les rsultats que vous avez obtenus.

  44..55..  CCoonnffiigguurreerr lleess ccoommpptteess ppoouurr llee VVPPNN


  Crez un compte sur le firewall esclave en utilisant vos outils
  favoris (par exemple vi, mkdir, chown, chmod). Vous pouvez aussi crer
  un compte sur le matre, mais je pense que vous souhaitez que la
  connexion se fasse au dmarrage, 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 matre?

  44..66..  GGnnrreerr uunnee ccll sssshh ppoouurr llee ccoommppttee dduu mmaattrree


  Utilisez le programme de gnration de cl de ssh. Donnez un mot de
  passe vide pour la cl prive si vous voulez raliser une
  configuration automatique du VPN.

  44..77..  CCoonnffiigguurreerr uunnee ccoonnnneexxiioonn sssshh aauuttoommaattiiqquuee ppoouurr llee ccoommppttee eessccllaavvee


  Copiez la cl publique frachement gnre dans le compte esclave dans
  le fichier .ssh/authorized_keys, et configurez les droits d'accs
  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 premire ligne tant ~esclave/.ssh, la seconde ~esclave.

  44..88..  RReesssseerrrreerr llaa ssccuurriitt sssshh ssuurr lleess bbaassttiioonnss..


  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 dsactive, la connexion
  n'est possible qu'avec les cls autorises. (Vous aurez bien entendu
  dsactiv telnet et la commande 'r').

  44..99..  PPeerrmmeettttrree ll''eexxccuuttiioonn ddee pppppp eett rroouuttee ssuurr lleess ddeeuuxx ccoommpptteess..


  Comme le compte matre 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'hte esclave.

  44..1100..  FFaaiirree lleess ssccrriippttss


  Sur l'hte matre, 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 <miquels@cistron.nl>.
  #               Modified for Debian GNU/Linux
  #               by Ian Murdock <imurdock@gnu.ai.mit.edu>.
  #
  # Version:      @(#)skeleton  1.6  11-Nov-1996  miquels@cistron.nl
  #

  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 prparation 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



  55..  RReeggaarrddoonnss ccee qquuii ssee ppaassssee ::


  Le matre se connecte  l'esclave, commence pppd, et redirige tout
  vers un terminal pty local. Ce qui consiste en l'enchanement
  suivant :

    allouer un nouveau pty

    ssh'er dans l'esclave

    lancer pppd sur l'esclave

    le matre lance pppd sur son pty local

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


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

  66..  LLee ffaaiirree  llaa mmaaiinn..


  66..11..  SSee ccoonnnneecctteerr


  Vous avez dj 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 problmes d'autorisation sur certains
  fichiers, ou avec la configuration de sshd.

  66..22..  FFaaiirree cchhaauuffffeerr pppppp


  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 problmes 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 dbarrasser
  des problmes et continuer  travailler, appuyez sur Enter, '~' et
  '^Z'. Vous devriez alors avoir l'invite du matre, et faire kill %1.
  Regardez la partie concernant les rglages si vous voulez en savoir
  plus sur les caractres d'chappement.



  66..33..  RRuunniirr lleess ddeeuuxx..


  Bon, alors

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




  devrait aussi marcher, et vous renvoyer son blabla en pleine tte.

  66..44..  RReeddiirreeccttiioonn dduu tteerrmmiinnaall


  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'accs
  complet dans l'excutable ssh, du fait que le programme de redirection
  du pty n'autorise que cette forme pour des raisons de scurit.
  Maintenant, vous disposez d'un nom de fichier spcial 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'.

  66..55..  YY aa--tt--iill qquueellqquuee cchhoossee ssuurr llee ddiissppoossiittiiff ??



  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
  vrifier votre rseau virtuel.

  66..66..  MMeettttrree eenn ppllaaccee llee rroouuttaaggee..


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

  77..  RRggllaaggeess


  77..11..  RRggllaaggeess ddee llaa ccoonnffiigguurraattiioonn


  Comme je l'ai dj dit, cet HOWTO est avant tout un mmo rapide sur la
  manire dont j'ai mont un VPN. Il y a des choses dans la
  configuration que je n'ai pas encore essayes. Ces choses rejoindront
  leur place quand je les aurais essayes, 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 caractre tilde (~)
  comme un caractre d'chappement. Cela pourait stopper ou ralentir la
  communication si une squence retour--la-ligne/tilde conduisait ssh 
  retourner une invite. Selon la documentation de ssh : <sur la plupart
  des systmes, donner au caractre d'chappement la valeur "none"
  rendra de la session transparente, mme si un tty est utilis.> Le
  drapeau correspondant  cela pour ssh est '_-_e', et vous pouvez aussi
  le placer dans le fichier de configuration.

  77..22..  BBaannddee ppaassaannttee ccoonnttrree ccyycclleess dd''hhoorrllooggee


  Crer quelque chose, aussi virtuel soit-il, entrane l'utilisation de
  ressources du monde rel. 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 rglages 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 expriences sont les
  bienvenues.

  88..  AAnnaallyyssee ddee vvuullnnrraabbiilliitt


  J'essaie de couvrir ici les trous de scurit naissant de cette mise
  en oeuvre en particulier, et des VPNs en gnral. Tous les
  commentaires seront vivement apprecis.

    sudo : en fait, j'utilise sudo de manire excessive. Je crois que
     c'est toujours plus sr que d'utiliser les bits setuid. C'est
     encore un inconvnient de Linux de n'avoir pas un contrle d'accs
     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 lancs avec sudo.
     Plutt 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
     dpassements de la mmoire tampon. Ligne de dfense : scurisez
     votre compte esclave autant que possible.

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

    firewall : avec des rgles 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 contrles trs
     srieux sur les interfaces VPN.










