Le réseau privé virtuel ou VPN (Virtual Private Network) permet de vous connecter à un réseau par un tunnel crypté. Vous pouvez ainsi vous y connecter depuis une entreprise, depuis chez quelqu’un.

Ses applications et avantages sont nombreuses :
- Avoir une liaison crypté sur un support non crypté (du Wifi ouvert par exemple)
- Se connecter à son réseau domestique depuis n’importe où
- Isoler/sécuriser les communications en interconnectant des postes par VPN

Pour ma part c’est surtout pour les deux premier points. Ce tutoriel s’adresse plus particulièrement aux utilisateurs d’Ubuntu.

Commencons

Sur le client

Installez openvpn et openssh-server
sudo apt-get install openssl openvpn openssh-server
Donnez le droit à l’écriture dans le répertoire de configuration openvpn
sudo chmod o+w /etc/openvpn

La suite se fait sur le serveur

Installez openvpn
sudo apt-get install openssl openvpnNous allons maintenant créer des jeux de certification grace aux outils se trouvant dans /usr/share/doc/openvpn/examples/easy-rsa/
Les clés et certificats générés seront crées dans le sous repertoire keys.
cd /usr/share/doc/openvpn/examples/easy-rsa/

Avant de commencer, nous allons modifier les reglages par defaut utilisés par ces outils.
sudo nano vars
Editez à la fin de ce fichier les paramètres afin qu’ils correpondent aux votres :
export KEY_COUNTRY=FR
export KEY_PROVINCE=NA
export KEY_CITY=Paris
export KEY_ORG= »MonOrganisation »
export KEY_EMAIL= »mon@email.ici »
Enregistrez et fermez.

Executez ce fichier (Notez bien qu’il s’agit d’un point et non de sh en debut de ligne)
. ./vars

Nettoyez les jeux de clés déjà présent (Les clées precements crées seront effacés du repertoire keys)
sudo ./clean-all

Executez la génération du certicat qui autentifira tout les jeux de clés :
sudo ./build-ca
Répondez aux questions par une simple validation de la touche enter

Executez la génération du jeu de clé serveur :
Ici remplacez server par le hostname de votre serveur
sudo ./build-key-server server
Validez les questions par defaut SAUF « Common name » où mettez votre hostname expliqué ci dessus.
Et répondez « y » aux deux dernière questions ( Sign the certificate ? [y/n] requests certified, commit ? [y/n] )

Faites la même chose (mais avec « build-key ») pour chcunes des clés à destination de client (nous nous occuperons de les transferer plus tard)
Ici remplacez client par le hostname de votre client
sudo ./build-key client
Validez les questions par defaut SAUF « Common name » où mettez votre hostname expliqué ci dessus.
Et répondez « y » aux deux dernière questions ( Sign the certificate ? [y/n] requests certified, commit ? [y/n] )
Il n’est pas nécéssaire d’utiliser un mot de passe si vous pensez que la clé (fichier) ne pourrat être compromise.

Executez la génération des paramètres Diffie-Hellman
sudo ./build-dh

Voilà, vos clés et certificats sont prets, nous allons maintenant les placer au bon endroit.

Placement des clés au bons endroits

Restez dans le répertoire /usr/share/doc/openvpn/examples/easy-rsa/Déplacez les clés serveurs (remplacez server par le hostname donné au serveur)
sudo mv keys/server.crt keys/server.key keys/ca.crt keys/ca.key keys/dh1024.pem /etc/openvpn/

Déplacez la clé client
sudo scp keys/ca.crt keys/fanchbox.crt keys/fanchbox.csr keys/fanchbox.key utilisateur@ip-du-client:/etc/openvpn/
sudo rm keys/ca.crt keys/fanchbox.crt keys/fanchbox.csr keys/fanchbox.key

Paramètrage du serveur openvpn

Réutilisons l’exemple proposé par openvpn
cd /etc/openvpn
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz .
sudo gunzip server.conf.gz

Editez le fichier /etc/openvpn/server.conf
sudo nano server.conf
Modifiez les ligne faisant référence aux fichier clés (remplacez server par le hostname donné au serveur)
cert server.crt
key server.key # This file should be kept secret
Enregistrez et fermez le fichier

Testez en lancant openvpn avec le fichier de configuration :
sudo openvpn /etc/openvpn/server.conf

Si vous avez des erreurs, ceux ci sont généralement assez explicite (file not found…) pour les résoudre facilement.

Thu Jan 31 12:49:34 2008 OpenVPN 2.0.9 i486-pc-linux-gnu [SSL] [LZO] [EPOLL] built on May 21 2007
Thu Jan 31 12:49:34 2008 Diffie-Hellman initialized with 1024 bit key
Thu Jan 31 12:49:34 2008 TLS-Auth MTU parms [ L:1542 D:138 EF:38 EB:0 ET:0 EL:0 ]
Thu Jan 31 12:49:34 2008 TUN/TAP device tun0 opened
Thu Jan 31 12:49:34 2008 ifconfig tun0 10.8.0.1 pointopoint 10.8.0.2 mtu 1500
Thu Jan 31 12:49:35 2008 route add -net 10.8.0.0 netmask 255.255.255.0 gw 10.8.0.2
Thu Jan 31 12:49:35 2008 Data Channel MTU parms [ L:1542 D:1450 EF:42 EB:135 ET:0 EL:0 AF:3/1 ]
Thu Jan 31 12:49:35 2008 UDPv4 link local (bound): [undef]:1194
Thu Jan 31 12:49:35 2008 UDPv4 link remote: [undef]
Thu Jan 31 12:49:35 2008 MULTI: multi_init called, r=256 v=256
Thu Jan 31 12:49:35 2008 IFCONFIG POOL: base=10.8.0.4 size=62
Thu Jan 31 12:49:35 2008 IFCONFIG POOL LIST
Thu Jan 31 12:49:35 2008 Initialization Sequence Completed

Votre serveur est maintenant à l’écoute. (tant que vous ne coupez pas le programme).

Pour que cette configuration soit reconnue par le service openvpn (vous savez, le /etc/init.d/openvpn start), éditez le fichier /etc/default/openvpn

sudo nano /etc/default/openvpn

Ajoutez la ligne suivant, enregistrez et fermez.

AUTOSTART= »server »

Openvpn serat alors lancé à chaque démarrage.

Paramètrage d’openvpn sur le client

Resécurisons le répertoire dont nous avons modifié les permission précedement
sudo chmod o-w /etc/openvpn

Réutilisons l’exemple proposé par openvpn
cd /etc/openvpn
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf .

Editez le fichier de configuration (celui ci est prévu pour se connecter à un serveur précis)
sudo nano /etc/openvpn/client.conf
Modifiez les lignes suivantes à votre convenance :
#Remplacez server par le hostname du serveur (accessible par le client)
remote server 1194
#Remplacez le nom des fichiers pour utiliser les clés du client
cert fanchbox.crt
key fanchbox.key
Enregistez et fermez.

Il ne vous reste plus qu’a lancer openvpn avec ce fichier de configuration pour vous connecter au serveur par vpn. Cela va vous créer une nouvelle interface avec une ip que vous attribuera le serveur (ici 10.8.0.x).
sudo openvpn /etc/openvpn/client.conf

Ce tutoriel s’inspire en partie des pages openvpn sur toulouse-sans-fil et openvpn sur Ubuntu-fr

Si vous êtes sages je vous expliquerai peut-être comment bridger le vpn avec votre réseau domestique, et comment vous y connecter grâce à gnome-network-manager.

Have fun !

Tags: , , , ,