OpenVpn : Liaison VPN / accès au réseau distant, Routage sur serveur, sécurisation par certificats PDF Imprimer Envoyer
Note des utilisateurs: / 2
MauvaisTrès bien 
Informatique - Sécurité
Dimanche, 28 Février 2010 21:21

Mise en situation

Des serveurs distants ont besoin d’être interconnectés au réseau d’entreprise pour joindre un domaine, utiliser des services d’authentification kerberos, ou radius.

Ce type de mise en situation n’est pas courant, ni vraiment applicable dans un environnement professionnel pour des structures de taille moyenne ou grande. On préférera des succursales avec un propre sous domaine au sein d’un nouvel AD (domaine délégué) dans une même foret.

Attention les clients ne serviront pas de router / passerelle pour accéder au réseau d’entreprise même si cela reste possible avec openVpn.

Détails technique

L’active directory fonctionne sur un serveur Windows Server 2008 SP2 Enterprise Edition.

Les serveurs distants fonctionnent sur Linux Debian Lenny.

Un serveur sera spécifiquement crée pour faire office de serveur VPN.

Ce serveur pourra fonctionner indifféremment sous linux ou Windows. La configuration étant identique avec openVpn. Attention les commandes ici sont décrites sous linux, certaines petites chosent changent sous Windows (notamment l’élaboration des certificats avec openssl).

Un réseau IP sera défini pour les communications VPN. L’ensemble des machines du réseau d’entreprise pourront correspondres avec les postes distants.

Configuration du serveur

Installation des paquets nécessaire sous linux

apt-get install openvpn openssl

Téléchargement des outils nécessaire sous windows

openssl

openvpn

Elaboration des certificats

source : http://doc.ubuntu-fr.org/openvpn

Elaboration du certificat racine

mkdir /tmp/ovpn
cd /tmp/ovpn

cp /usr/share/doc/openvpn/examples/easy-rsa/2.0 ./ –R
cd 2.0/
vi vars

#Modifier les variables KEY_COUNTRY, KEY_PROVINCE, KEY_CITY, KEY_ORG, KEY_EMAIL. Tous les champs doivent être complété.

#Initialisation des variables
./vars
#Nettoyage des clés et certificats existants
./clean-all
#Création du certificat pour l’autorité de certification maitre
./build-ca

#Suivre les étapes nécessaires (comme le renseignement des données nécessaire. Elles peuvent ne pas être saisie puisqu’elles sont renseigné dans le fichier vars). Attention le champ common name ne peut pas être vide !

#Le certificat de l’authorité est disponible : ./keys/ca.crt
#La clé de l’authorité est disponible : ./keys/ca.key

Elaboration du certificat serveur

#Remplacer servername par son nommage
./build-key-server sername

#Lors de la demande du common name, il faudra ressaisir exactement la même information que celle paramétré dans le ligne de commande

#A la fin de la génération, le script vous permettras d’auto-signé le certificat, si vous ne comptez pas le faire payer par une autorité, alors accepter

Certificate is to be certified until ************ (3650 days)
Sign the certificate ? [y/n] :y
1 out of 1 certificate requests certified, commit ? [y/n] y

#Le certificat serveur est disponible : ./keys/servername.crt
#La clé du serveur est disponible : ./keys/servername.key

Elaboration d’un certificat client

#Remplacer cli1 par le nommage du client
./build-key cli1
#Lors de la demande du common name, il faudra ressaisir exactement la même information que celle paramétré dans la ligne de commande

#Il est possible de protéger la clef avec un mot  de passe. Dans ce cas préférer cette commande :
/build-key-pass cli1

#Chaque common name devant être unique, chaque client devra porter un nom différent

#Les clefs et certificats sont disponibles dans le répertoire ./key

Génération des paramètres Diffie-Hellman

./build-dh
#Les paramètres DH sont disponibles dans le fichier : ./keys/dh1024.pem

Mise en place du fichier de configuration

Nous allons créer un fichier de configuration nommé server.conf dans /etc/openvpn.conf :

touch /etc/openvpn.conf

Editons le

vi /etc/openvpn.conf

Editions des paramètres : (conseil : utiliser des adresses absolues !!!)

server 172.17.101.0 255.255.255.0 
push "route 172.17.100.0 255.255.255.0"
client-to-client

port 1194

proto udp

dev tap

ca ca.crt
cert web.crt
key web.key

dh dh1024.pem

keepalive 10 120

comp-lzo

persist-key
persist-tun

status openvpn-status.log

;Enregistrement des IP par CN (simulation d'ip fixe basé sur CN)
ifconfig-pool-persist /etc/openvpn/ipp.txt

verb 3

 

Copie des fichiers nécessaire

cp keys/ca.crt /etc/openvpn
cp keys/servername.crt /etc/openvpn
cp keys/servername.key /etc/openvpn
cp keys/dh1024.pem /etc/openvpn

Lancement du processus en tache de fond

cd /etc/openvpn
nohup openvpn server.conf &

Automatisation du lancement d’openVpn sous Linux

Pour que le serveur soit lancé automatiquement, il suffit de nommer le fichier de conf avec l’extension .conf est de le placer dans le répertoire /etc/openvpn.

Automatisation du lancement d’openVpn sous Windows

Utiliser la commande SC.

Configuration de la passerelle / routeur du serveur

Avec les configurations ci-dessus, on utilisera le port par défaut d’openVpn (soit 1194). Elle peut être modifié en ajoutant dans le fichier de configuration l’attribut “port”.

Dans les fichiers de configuration d’exemples, afin d’optimiser les flux c’est le protocole UDP qui est retenu. Il faudra donc rediriger le port UDP 1194.

Dans cette situation, le serveur openvpn devra être configuré en router (service de routage netfilter ou ms), le routeur de la zone (firewall…) devra disposer d’une route dans sa table de routage afin de rediriger l’ensemble des requêtes du réseau IP openVpn vers le serveur OpenVpn.

Exemple netfilter

iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 172.17.100.0/24 -o eth0 -j MASQUERADE

Sous windows, le paramétrage du service de routage suffira.

Configuration du client

Création de la configuration

;Conseil : utiliser des adresses absolues

;Récupération de la configuration IP par le serveur
pull

;type de connexion
client

dev tap

proto udp

remote midgard.info 1194

resolv-retry infinite

nobind

persist-key
persist-tun

;Certificats racine et clients
ca ca.crt
cert asgard.crt
key asgard.key

ns-cert-type server

;Compression
comp-lzo

;Verbose
verb 3

Pour que la connexion fonctionne, le client doit disposer du certificat racine (ca.crt), ainsi que du certificat et de la clef générer uniquement pour ce client (client.crt et client.key).

Automatisation de lancement

Lancement manuel dans un prompt

cd /etc/openvpn

openvpn client.conf

ou détachement du prompt avec nohup pour test

nohup openvpn client.conf &

Mise à jour le Lundi, 01 Mars 2010 15:06