Team-Azerty

OpenVPN - How to

Dernière modification :  Samedi 15 Décembre 2018

Page 1 : Tutoriel OpenVPN

Les VPN ont le vent en poupe ces derniers temps.
Il existe plusieurs solutions payantes ou gratuites proposées sur internet mais ma paranoïa naturelle alliée pour la cause à de la curiosité compulsive m'ont fait m'interroger sur le : pourquoi ne pas me monter mon propre VPN aux petits oignons ?

Dans cette optique je me suis donc penché sur la solution OpenVPN.
Il y a eu quelques soucis de mise en place et de compréhension mais au final ça fonctionne bien du coup je me suis dit que j'allais partager avec vous mon expérience sous la forme d'un "How To".

1 - l'hébergement

Je paye mensuellement un serveur Kimsufi assez musclé pour différents besoins personnels, il a donc été mon support pour monter le VPN.
Cependant, inutile de payer un truc monstrueux... Le choix n'a pas besoin de se faire sur la puissance de la machine.
Les solution Kimsufi KS-1, Dedibox SC gen2 ou encore un VPS classic 1 OVH, suffisent amplement et se font sans engagement de durée.

De plus sur ces machines vous pourrez faire fonctionner d'autres services comme votre propre SMTP avec POSTFIX, ou votre cloud perso avec OwnCloud pourquoi pas ... Pour qui est un peu bricoleur ce n'est pas un investissement inutile.

2 - Le système

Si OpenVPN propose des clients Windows, Mac et Linux, pour la partie serveur vous n'y couperez pas, il va falloir tater de la ligne de commande sous linux. Pas de panique, je vais tout vous dicter.
Préférez un système DEBIAN ou UBUNTU sur votre serveur. Les hébergeurs possèdent tous des scripts d'installation automatique qui ne nécessitent pour vous aucun effort.
Dans tous les cas OVH, Online.net et autres ouvriront le port 22 pour que vous puissiez administrer votre machine via SSH.

Si vous êtes sous windows téléchargez PUTTY qui sera votre meilleur ami et paramétrez-y la connexion à votre serveur.

NB : Il y a de très nombreux tutoriaux sur internet je vais reprendre les points principaux de ceux que j'ai suivi, condenser le truc et agrémenter d'astuces pour éviter les tuiles. Néanmoins vous aurez facilement de l'aide en faisant une recherche web.

3 - Installations de base

Avant propos nous aurons besoin d'un éditeur de texte sous linux en mode console. Si VI est installé de base, je lui préfère NANO qui est plus simple d'utilisation.

Allons-y pour l'installation de nano sous debian / ubuntu

Connectez vous à l'aide de putty

et saisissez :

sudo apt-get install nano

L'interface ufw nous aidera pour administrer le firewall

sudo apt-get install ufw

Enfin procédons à l'installation de OpenVPN

sudo apt-get install openvpn

suivi de

sudo apt-get install easy-rsa

4 - Configuration

On a tous les outils nécessaires, on va donc tout pouvoir configurer.
Note : Je n'expliquerai pas le pourquoi des manipulations, je donne simplement une méthode pour y arriver. Si vous souhaitez comprendre le pourquoi du comment telle ligne de configuration est commentée et telle autre passe à un, je vous redirige vers la documentation officielle de openVPN.

à partir de là on va passer en root

sudo su

4.1 - OpenVPN

On décompresse les fichiers de démonstration pour s'en servir comme base

gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf

On va modifier quelques points du fichier server.conf

nano /etc/openvpn/server.conf

remplaçons dh dh1024.pem par dh dh2048.pem

il faut retirer le ";" devant :

;push "redirect-gateway def1 bypass-dhcp"

Dans la partie causant des DNS (;push "dhcp-option DNS ...)
remplaçons les deux lignes par :

push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"

note : ce sont les DNS de OpenDNS ...
note 2 : notez que j'ai viré les ";"

On enlève les ";" de :

;user nobody
;group nogroup

On enregistre :
Ctrl + X
saisissez : o
appuyez sur Entrée

4.2 - Firewall

Notre VPN va passer par le port 1194 et devra faire du forwarding. Pour y arriver nous avons besoin d'autoriser le port sur le firewall et de dire à Linux que le forwarding par cette machine est autorisé.

toujours dans notre console en mode root :

nano /etc/sysctl.conf

trouver la ligne

#net.ipv4.ip_forward=1

et retirer le #

net.ipv4.ip_forward=1

On enregistre :
Ctrl + X
saisissez : o
appuyez sur Entrée

On continue cette fois sur notre UFW (Uncomplicated firewall)
donc dans la console, toujours en root :

ufw allow ssh
ufw allow 1194/udp

Une petite modification via nano :

nano /etc/default/ufw

chercher la ligne DEFAULT_FORWARD_POLICY="DROP"
et remplacer DROP par ACCEPT.

On enregistre ... Ctrl + X... o... Entrée

puis :

nano /etc/ufw/before.rules

en début de fichier on ajoute :

*nat
: POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
COMMIT

On enregistre ... Ctrl + X... o... Entrée
dans la console en root :

ufw enable

si à ce stade ufw pose une question comme quoi ça va couper les connexions etc ... répondre "y"

histoire de vérifier que le port est bien ouvert on peut faire un

ufw status

et normalement on devrait (entre autres) voir deux lignes correspondants au port 1194 (l'une avec un V6 pour le support IP V6)

4.3 - Certificats serveur

On y est presque ! Reste maintenant à générer le certificat de notre serveur et on aura terminé la configuration d'OpenVPN. Nous pourrons alors générer des certificats clients et les récupérer ce qui est plutôt simple.

Toujours en root.

cp -r /usr/share/easy-rsa/ /etc/openvpn
mkdir /etc/openvpn/easy-rsa/keys
nano /etc/openvpn/easy-rsa/vars

on trouve la section correspondante et on la renseigne comme bon nous semble (inutile d'y mettre des informations véritables)

export KEY_COUNTRY="US"
export KEY_PROVINCE="TX"
export KEY_CITY="MonCul"
export KEY_ORG="SuperEntrepriseAndCo"
export KEY_EMAIL="mireille.mathieu@hurlement.com"
export KEY_OU="IHaveNoIdeaWhatImDoing"

On trouve ensuite la section export KEY_NAME et on la renseigne avec un nom simple comme : "server" ...

export KEY_NAME="server"

On enregistre ... Ctrl + X... o... Entrée

dans la console en root (attention ça peut prendre quelques minutes):

openssl dhparam -out /etc/openvpn/dh2048.pem 2048

puis

cd /etc/openvpn/easy-rsa
. ./vars

Attention :

merci de bien noter l'espace entre les deux "." de la commande précédente. (en gros on lui demande de charger le source de cette façon)
et :

./clean-all
./build-ca
cd /etc/openvpn/easy-rsa
./build-key-server server

Note importante : le paramètre de la précédente commande "server" est le nom que vous avez donné au serveur dans le KEY_NAME quelques lignes plus haut.
Note 2 : lors de cette commande openvpn va vous demander de renseigner des information "country", "name", "password" etc ... appuyez sur Entrée à chaque fois sans autre forme de procès.
Il posera ensuite 2 question pour valider la création de la clé serveur, répondez "y" aux deux.
On termine par déplacer les certificats au bon endroit :

cp /etc/openvpn/easy-rsa/keys/{server.crt,server.key,ca.crt} /etc/openvpn

On va vérifier que notre OpenVPN est ok :

service openvpn start
service openvpn status

s'il dit que le VPN est "running" c'est gagné.

A ce point et avant de passer à la suite un petit reboot ne serait pas de trop.

shutdown -r 0

Félicitation votre serveur OpenVPN est opérationnel!

5 - Clients

Enfin nous y voilà! ?

On va pouvoir générer nos certificats clients, les récupérer via SCP et se connecter au VPN.
La méthode qui va suivre sera a répéter pour chaque compte client.

5.1 - Génération des fichiers pour le client

On se connecte à Putty (ou directement en SSH si vous fonctionnez sous linux chez vous)
Boom mode root.

sudo su
cd /etc/openvpn/easy-rsa

mettons que je veuille créer un certificat pour mon PC chez moi. Je vais lui donner un nom explicite du genre : djip_pc

. ./vars
./build-key djip_pc

OpenVPN va alors me demander les même informations que lors de la création de clé du serveur "company name", "password" etc ... je flood donc la touche entrée jusqu'aux questions de génération de la clé auquel on va répondre par "y"

Votre clé client est générée. ?

5.2 - Récupération des fichiers sur le client

Alors à ce point du How To vous avez le choix. Soit vous récupérez les documents en utilisant une solution comme SFTP, soit vous passez scp.

Si vous fonctionnez sous windows, il sera bien plus facile d'utiliser le logiciel:
WinSCP

Paramétrez votre serveur dans le logiciel avec comme utilisateur le root le tout en SCP

Et vous voilà devant un interface qui permet de faire de la copie sécurisée de votre serveur linux sur votre client windows en simple Drag'n Drop.
Les fichiers à récupérer sont (en reprenant l'exemple du djip_pc):

/etc/openvpn/easy-rsa/keys/djip_pc.key
/etc/openvpn/easy-rsa/keys/djip_pc.crt
/etc/openvpn/ca.crt

placez ces précieux fichiers dans un répertoire judicieusement choisis .... (comprendre ici : Evitez de laisser ça trôner sur votre bureau...)

5.3 - Un client windows pour OpenVPN

Dernier point de ce how to. (Promis après j'arrête)
Il existe plusieurs clients OpenVPN pour windows, je vous conseille d'utiliser SecurePoint SSL VPN.

Une fois installé sur le PC client, suivez le guide :

Créez un nouveau profil

Ajoutez les différents fichiers récupérés du serveur

Modifiez les options de votre connexion

pour activer la compression lzo et le forwarding.

Et voilà le travail !?

Connectez vous et faites un tour du côté de monip.org pour vérifier que vous sortez bien sur l'IP de votre VPN ?

A bientôt.