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.