Page suivante Page précédente Table des matières

4. Le faire

4.1 Préparation

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.

4.2 Rassembler les outils

Vous aurez besoin :

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

4.3 Compiler et installer

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 Configurer les autres sous-systèmes

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.

4.5 Configurer les comptes pour le VPN

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?

4.6 Générer une clé ssh pour le compte du 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.

4.7 Configurer une connexion ssh automatique pour le compte esclave

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.

4.8 Resserrer la sécurité ssh sur les bastions.

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').

4.9 Permettre l'exécution de ppp et route sur les deux comptes.

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.

4.10 Faire les scripts

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   

Page suivante Page précédente Table des matières