27déc.2008
Compilation Installation et Configuration Openvpn

Le Réseau privé virtuel, est une extension des réseaux locaux qui procure une norme de sécurité en télécommunications.
Un bon compromis consiste à utiliser Internet comme support de transmission en utilisant un protocole de « tunnelisation » (en anglais tunneling), c'est-à-dire encapsulant les données à transmettre de façon chiffrée. On parle alors de réseau privé virtuel (aussi appelé VPN, sigle pour Virtual Private Network) pour désigner le réseau ainsi artificiellement créé. Ce réseau est dit virtuel car il relie deux réseaux « physiques » (réseaux locaux) par une liaison non fiable (Internet), et privé car seuls les ordinateurs des réseaux locaux de part et d'autre du VPN peuvent « voir » les données.
La configuration d’un VPN est souvent d’une très grande utilité pour la sécurité de vos équipements mais aussi pour une facilité d’accès accrue. Cet article va vous présenter comment mettre en place un serveur VPN en utilisant OpenVPN, ainsi que la configuration d'un clients.
Installation du serveur (cette méthode fonctionne aussi avec openvpn version 2.1_rc15) :
Télécharger la dernière version openvpn ici
cd /opt/SOURCES/ wget http://openvpn.net/release/openvpn-2.0.9.tar.gz tar -xvzf openvpn-2.0.9.tar.gz cd openvpn-2.0.9 mkdir /opt/openvpn
Compilation :
Avec OpenVPN, on peut compresser les données avec un algrothme de compression sans perte : LZO.
apt-get install liblzo1 ou yum install liblzo1-devel
liblzo et openssl sont les seul dépendances obligatoire.
Aidez vous des documentations du site officiel et du fichier INSTALL qui se trouve dans les sources.
./configure --prefix=/opt/openvpn --enable-strict --with-ssl-headers=/usr/include/openssl --with-ssl-lib=/lib64 --with-lzo-headers=/usr/include/lzo --with-lzo-lib=/usr/lib64 make make check make install
Si vous êtes sous redhat, moins drôle ! il faut la compiler j'ai fais un article à ce sujet ici
Création du certificat de l’autorité de certification CA :
cd /opt/SOURCES/openvpn-2.0.9/easy-rsa/
Dans ce répertoire se trouvent quantité de petits scripts très utiles pour la génération de clé et de certificats.
Dans un premier temps, on va éditer le fichier vars qui va contenir des variables par défaut pour les scripts. Cette étape n’est pas indispensable mais elle va vous faire gagner beaucoup de temps.
vi vars export KEY_COUNTRY=FR export KEY_PROVINCE=France export KEY_CITY=Lyon export KEY_ORG="system-linux.eu" export KEY_EMAIL="gangan@mon-domaine.org"
On prépare les variables que l’on vient de définir et on nettoie le répertoire des clefs :
. ./vars ou source ./vars ./clean-all
On va utiliser un fichier de configuration par défaut pour openssl : openssl.cnf
Ensuite on a créer dans le répertoire "keys/" le certificat principal du serveur "ca.crt" :
./build-ca
Une série de question va vous être posé, tout est déjà rempli grâce au fichier "vars", mais vous devez impérativement choisir un "Common Name" pour le server (son hostname c'est bien).
On a créé l’autorité de certification !
Création du certificat et de la clé pour le serveur :
./build-key-server hostname-vpn
Le script "build-key-server" demande un mot de passe, moi je n'ai rien mis.
Ceci créé dans "keys/" le certificat "hostname-vpn.crt" et la clé "hostname-vpn.key".
Création de certification & clé pour un client (en lieu et place de client1 préférez le hostname du client) :
./build-key client1
Attention, le Common Name doit être différent pour chaque entité, sinon vous aurez l’erreur suivante :
failed to update database TXT_DB error number 2
Création du paramètre Diffie Hellman :
./build-dh
Ceci créé dans "keys/" un fichier "dh1024.pem". C’est une opération relativement longue selon la puissance de votre machine.
Mise en place des fichiers serveurs :
On va copier les fichiers nécessaire au fonctionnement du serveur dans /opt/openvpn/etc/ :
mkdir /opt/openvpn/etc
cp ./keys/{ca.crt,ca.key,MonServeurVPN.crt,MonServeurVPN.key,dh1024.pem} /opt/openvpn/etc/
Configuration du démon openvpn :
Création d’un utilisateur :
Par défaut, l’utilisateur "nobody" est utilisé, ce qui n’est pas très clean :).
groupadd openvpn useradd -d /dev/null -g openvpn -s /bin/false openvpn
Edition du fichier de configuration :
On va se baser sur le fichier server.conf de configuration proposé par openvpn :
cd /opt/SOURCES/openvpn-2.0.9/sample-config-files/ cp server.conf /opt/openvpn/etc/
On l'édite "/opt/openvpn/etc/server.conf" :
On modifie les noms des certificats/clés et le nom de l'utilisateur/groupe pour le démon openvpn qui se trouve ici /opt/openvpn/sbin :
ca /opt/openvpn/etc/ca.crt cert /opt/openvpn/etc/hostname-vpn.crt key /opt/openvpn/etc/hostname-vpn.key # This file should be kept secret dh /opt/openvpn/etc/dh1024.pem user openvpn group openvpn log /var/log/openvpn.log verb 5
Démarrage du serveur :
cd /opt/openvpn/sbin/ ./openvpn --config ../etc/server.conf
On s’assure que le démon tourne bien et on va surveiller les messages du démon : $ ps -ef | grep openvpn openvpn 20483 1972 0 11:59 pts/1 00:00:00 ./openvpn --config ../etc/server.conf
Pour débuger :
$ tail -f /var/log/openvpn.log
On peut déjà remarquer qu’un "ifconfig"nous montre une nouvelle interface.
$ ifconfig
tun0 Lien encap:UNSPEC HWaddr xx-xx
inet adr:10.8.0.1 P-t-P:10.8.0.2 Masque:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:487260 errors:0 dropped:0 overruns:0 frame:0
TX packets:302913 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:100
RX bytes:40797602 (38.9 MiB) TX bytes:99006324 (94.4 MiB)
Configuration d’un client Linux sous debian :
apt-get install openvpn
Il faut bien sûr créer un nouveau couple (certificat/clef) pour ce client. On les copiera ainsi que l’autorité de certification "ca.crt" dans /etc/openvpn.
Copie des fichiers du serveur vers le client1 :
Il faut copier dans /etc/openvpn du client les fichiers que l’on a précédemment créé sur le serveur : "ca.crt", "client1.crt" et "client1.key". On utilise ensuite le fichier de configuration d’exemple situé dans /opt/SOURCES/openvpn-2.0.9/sample-config : client.conf. On le copie dans le répertoire "/etc/openvpn" et on fait quelques modifications :
Sur le serveur :
cd /opt/SOURCES/openvpn-2.0.9/easy-rsa/keys/ scp -P 22 client1.* root@ip-client1:/etc/openvpn/
Modifications à faire dans le fichier /etc/openvpn/client.conf
remote 91.56.78.XX 1194 ; IP du serveur VPN ca /etc/openvpn/ca.crt cert /etc/openvpn/client1.crt key /etc/openvpn/client1.key
Débug client :
Pour débuger, on peut logguer séparément les messages d’openvpn, comme pour le serveur:
log /var/log/openvpn.log
On peut modifier le niveau de verbosité des logs :
verb 5
Enfin, on peut activer un accès en local pour des commande direct sur le démon :
management localhost 7505
Ajouter un client :
La procédure est exactement la même que lors de l’installation, vous devez faire :
cd /opt/SOURCES/openvpn-2.0.9/easy-rsa/ source ./vars cd keys ../build-key clientX
Ce qui va vous créer un clientX.crt et clientX.key, que vous copierez sur votre nouveau client. Il vous faudra également paramétrer son fichier de configuration client.conf comme plus haut.
Attention :
Une erreur à ne pas faire est de réexecuter le script clean-all dans le répertorie /opt/SOURCES/openvpn-2.0.9/easy-rsa/. Cette commande vous supprimerai toutes vos clefs et certificats clients... Il faut conserver les certificats pour pouvoir les révoquer si besoin.
Information sur les différents fichiers :
/opt/SOURCES/openvpn-2.0.9/easy-rsa/ - serial : contient le numéro à affecter au prochain client - index.txt : liste de tous les clients créés - *.crt : les certificats - *.key : les clefs privées - *.csr : les demandes de certificats, qui devront être signés pour créer le certificat
/opt/openvpn/etc/ - ipp.txt : garde une association entre IP et client
Liste des fichiers créés :
- ca.crt : c'est le certificat du Master CA. Il doit être installé sur chaque clients et sur le serveur.
- ca.key : c'est la clef du Master CA. Elle doit rester secrète et être sur chaque machine qui doit générer des clefs, dans note cas : le serveur.
- dh1024.pem : c'est les paramètres Diffie Hellman. Il doit rester sur le serveur.
- hostname-du-serveur.crt : c'est le certificat du serveur et doit être sur le serveur.
- hostname-du-serveur.key : c'est la clef de votre serveur, doit être sur le serveur et rester secrète.
- client1.crt : c'est le certificat d'un de vos clients, à mettre sur le client.
- client1.key : c'est les clefs d'un de vos clients, à mettre sur le client et rester secret.
- Les .key doivent être secret. Vous devez donc les garder en sécurité.
- ca.crt doit être installé sur chaque client ainsi que sur le serveur
- client1(.crt|.key) est a installer sur le client1.
- hostname-du-serveur(.crt|.key) est a installer sur le serveur.
Si vous utilisez iptables :
Règles iptables sur le serveur.
iptables -t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -d ! 10.8.0.1 -j SNAT --to-source IP_SERVEUR_VPN iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE iptables -A OUTPUT -p tcp --dport 1194 -j ACCEPT iptables -A INPUT -p tcp --dport 1194 -j ACCEPT iptables -L
Vous devez changer IP_SERVEUR_VPN par l'IP de votre serveur et eth0 par l'interface réseau que vous utilisez.
Autoriser le forward IPv4 :
Deux méthode.
vi /etc/sysctl.conf et vous mettez ceci à 1 : net.ipv4.ip_forward = 1 ou alors echo 1 > /proc/sys/net/ipv4/ip_forward
Petit plus d'openvpn : des clients graphiques de connexion et d'administration :
Voila j'espère que cela vous aura aidé 

Commentaires
vendredi, août 28 2009 | 10:49
Salut
dhpara error est toujours la.
Pourrais tu faire un meilleur HOWTO?
C'est low level.
Concernant les users, faudrait indiquer plus d'infos. On comprend rien dans tes explications, pour les users et groupes...
mardi, septembre 1 2009 | 23:10
Si tu t'en sort pas avec cet article c'est toi qui a un souci je pense.