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 :
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).
Voici pour les préparatifs.
Vous aurez besoin :
Version actuelles (NDT :au moment de la rédaction de cet HOWTO)
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.
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.
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?
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.
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.
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').
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.
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 <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 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