Titre

Mettre en place un serveur openvpn

Installer et configurer un serveur openvpn sous Linux Ubuntu

Avant de commencer, je vais exposer des infos tirées du wiki d'openvpn que l'on trouve très simplement comme montré ci-dessous ..

Le lien d'accès direct à l'article est :
https://community.openvpn.net/openvpn/wiki/BridgingAndRouting

Voici ma traduction et le résumé du début de l'article

Précision sur le mode TAP et TUN

Voici ce que l'on veut mettre en place :

Le schéma

Comme le mode TAP ne supporte pas Android ou iOS, on va prendre le mode TUN.
Quand au choix entre le mode Bridgé et le mode routé, le mode TUN ne supporte pas le mode bridgé, on va donc prendre le mode routé.
Cela tombe bien car utiliser un device TUN en mode routé est le mode par défaut.

Notez qu'après coup j'ai vu que le site openvpn.net explique comment faire son autorité de certification ici :
https://openvpn.net/index.php/open-source/documentation/howto.html#pki

On va installer openvpn avec cette commande :

Lien vers le fichier : cliquez ici

Répondez par y quand demandé

Il faut maintenant disposer d'une autorité de certification pour générer un jeu de clés publiques/privées

Pour cela on va installer easy-rsa avec la commande

Lien vers le fichier : cliquez ici

Et répondre y quand demandé

Maintenant qu'easy-rsa est installé, il faut trouver où le fichier "build-ca" se trouve. C'est le répertoire easy-rsa qui le contient.
Pour cela on va utiliser la commande

Lien vers le fichier : cliquez ici

Dans cet exemple build-ca se trouve dans

Lien vers le fichier : cliquez ici

On va copier le contenu de /usr/share/easy-rsa
dans /usr/share/openvpn

ainsi les programmes disponibles dans /usr/share/easy-rsa le seront aussi dans /usr/share/openvpn
Cela comprend le programme build-ca, clean-all ainsi que le fichier vars qui contient des réglages utilisés.

Voici le contenu de /usr/share/easy-rsa après installation du logiciel :

Et voici celui de /usr/share/openvpn/ avant d'effectuer la copie :

Pour cela on va utiliser la commande

Lien vers le fichier : cliquez ici

Voici le contenu de /usr/share/openvpn/ après la copie :

Pour que le reste des commandes s'exécutent avec les droits administrateur, tapez

Lien vers le fichier : cliquez ici

Et entrez le mot de passe du compte :

On va se rendre dans le répertoire contenant les fichiers à configurer d'opvenvpn, lister ce qu'il contient et vérifier que le fichier vars y est présent.

Pour cela tapez

Lien vers le fichier : cliquez ici

Le fichier vars doit être présent :

Editez le avec nano par exemple

Cherchez après KEY_COUNTRY et renseignez bien tout ce qui va avec cad au final :
KEY_COUNTRY
KEY_PROVINCE
KEY_CITY
KEY_ORG
KEY_EMAIL

D'après cet article de zdnet.fr :
http://www.zdnet.fr/actualites/77-des-serveurs-vpn-utilisent-encore-ssl-30-39833368.htm#xtor=RSS-1

il faut une longueur de clé au delà de 2048 :

Si vous ne faites rien, de base voici ce que donnera le certificat de votre autorité :

Aussi passez le paramètre export KEY_SIZE à 4096

Sauvegardez vos modifications, fermez le fichier et
initialisez les variables avec la commande

Lien vers le fichier : cliquez ici

Ce qui donne :

On nettoie toutes les clés et certificats existants présents dans le répertoire /usr/share/openvpn/keys avec la commande

Lien vers le fichier : cliquez ici

On crée le certificat et la clé de l'Autorité de Certification Maître (CA) avec la commande

Lien vers le fichier : cliquez ici

Suite à quoi des questions seront posées. La réponse est pré-remplie car on a édité le fichier 'vars' auparavant, vous n'avez donc qu'à contrôler et appuyer sur Entrée

Ce qui donne une fois terminé :

On va contrôler que le certificat et la clé de l'Autorité de Certification ont été créés. Pour cela tapez successivement

Lien vers le fichier : cliquez ici

Vous devez voir
ca.crt et ca.key

comme ici :

On va maintenant générer un certificat et une clé pour notre serveur.
Pour connaitre le nom du serveur tapez la commande

Lien vers le fichier : cliquez ici

Ce qui dans notre cas donne MyUbuntu

La commande à entrer pour générer un certificat et une clé pour un serveur est
./build-key-server nomduserveur

Donc notre exemple la commande va donner
./build-key-server MyUbuntu

Mais il ne faut pas oublier que juste avant nous sommes allés dans le répertoire 'keys' pour en vérifier son contenu.
Au préalable on va donc revenir dans le répertoire /usr/share/openvpn puis utiliser build-key-server

Lien vers le fichier : cliquez ici

A l'exécution de la commande ./build-key-server etc ... des questions sont posées mais la réponse est pré-remplie, aussi il n'y a juste qu'à appuyer sur Entrée

Un mot de passe vous sera demandé pour protéger le certificat

Le nom de la compagnie sera également demandé (réponse facultative).

On demandera également à signer le certificat

Il faudra répondre par 2 fois
y

Le certificat du serveur créé, on peut maintenant créer les certificats des clients avec une commande du type

Lien vers le fichier : cliquez ici

Comme avant les réponses sont pré-remplies, il sera demandé de signer le certificat et de le valider

On va générer des paramètres Diffie-Hellman.
Pour cela on va utiliser cette commande :

Lien vers le fichier : cliquez ici

Résultat :

Pour information le résultat est dans un fichier qui commence par dh et qui se termine par pem
Ici c'est dh2048.pem

Nos clés et certificats créés on va copier une partie d'entr'eux dans /etc/openvpn/
On va copier :
_ les paramètres Diffie-Hellman, cad le fichier qui commence par dh
_ le certificat de l'autorité, cad ca.crt
_ la clé publique et privée du serveur, ici MyUbuntu.crt et MyUbuntu.key

Pour cela on va utiliser la commande suivante :

Lien vers le fichier : cliquez ici

Si on se rend dans /etc/openvpn/
on peut voir que les fichiers ont été effectivement copiés

On va s'occuper du fichier de configuration du serveur.
Pour cela on va prendre un fichier de configuration d'exemple qui est compressé en .gz et le décompresser dans /etc/openvpn

Pour cela on va taper les commandes

Lien vers le fichier : cliquez ici

Ce qui donne :

On doit pouvoir visualiser le fichier serveur.conf sous /etc/openvpn

On va exécuter une étape très importante :
on va éditer le fichier server.conf qui paramètrer le serveur.
C'est dans ce fichier que l'on va indiquer que l'on veut un device TUN en mode routé, indiquer l'emplacement des certificats de l'autorité de certification ou encore ceux du serveur.

Editez le fichier server.conf avec la commande

Lien vers le fichier : cliquez ici

On va s'intéresser à ces paramètres :

Il faut les mettre à jour par rapport à ce que vous avez dans /etc/openvpn
ce qui va donner :

Pour éviter d'avoir une erreur du type :
write to TUN/TAP : The data area passed to a system call is too small.

regardez si dans le fichier de configuration de votre serveur openvpn comp-lzo est activé. Si oui, alors il faut l'activer également au niveau du fichier de configuration du client :

Pour tester votre configuration, commencez par lancer openvpn non pas en tant que service, mais directement et en le faisant pointer sur le fichier de configuration. Vous verrez ainsi rapidement une éventuelle erreur.
Pour cela faites :

Lien vers le fichier : cliquez ici

Exemple :

Et voici un exemple où le lancement manuel d'openvpn ne remonte pas de problème : rien ne s'est affiché :

Mais ce n'est pas parce que rien ne s'est affiché que cela ne marche pas.
Si vous tapez ifconfig, l'interface tun0 d'openvpn doit apparaître :

Votre fichier de configuration sauvegardé et testé, lancez le service avec la commande

Lien vers le fichier : cliquez ici

Vous pouvez regarder le log pour voir ce que le démarrage a donné avec

Lien vers le fichier : cliquez ici

Exemple :

Si vous avez configuré openvpn pour qu'il ait son propre log, alors tapez

Lien vers le fichier : cliquez ici

Sur le serveur openvpn une route c'est bien mise automatiquement pour indiquer que tout le traffic vers 10.8.0.0 doit passer par tun0

Vérifiez que le service fonctionne correctement en regardant si l'interface tun0 a été crée. Pour cela tapez

Lien vers le fichier : cliquez ici

Exemple de visuel

tun0 doit s'afficher

Normalement c'est fait automatiquement mais pour que le service openvpn se lance automatiquement au démarrage faites :

Lien vers le fichier : cliquez ici

N'oubliez pas de permettre à votre firewall de laisser passer le flux entrant vers votre serveur OpenVpn avec une commande du type

Lien vers le fichier : cliquez ici

Et il faut également autoriser le transfert du trafic depuis le tunnel openvpn vers vos machines internes et inversement.
Les règles ci-dessous autorisent le trafic venant du tunnel vers n'importe quelle machine interne uniquement pour le port 80 (HTTP).
Dans le sens retour, n'importe quel trafic sera autorisé à repartir dans le tunnel :

Lien vers le fichier : cliquez ici

Sur un routeur avec un firmware DD-WRT connecté en frontal sur Internet, j'avais également dû natter le traffic d'internet à destination du serveur openvpn ainsi :

Lien vers le fichier : cliquez ici

Si vous avez un routeur sur votre réseau local, le plus simple est d'y ajouter une route qui permettra à vos clients internes de trouver leur chemin pour revenir vers les clients VPN.
En supposant qu'ici 192.168.2.125 est l'ip du serveur openvpn, sur un routeur avec une distrib type linux (comme un dd-wrt), l'ajout de la route se fera avec une commande de ce type :

Lien vers le fichier : cliquez ici

Si vous voulez traiter au cas par cas vos serveur, sur un Windows, inspirez vous de cette commande pour ajouter la route qui indique qu'il faut passer par le serveur OpenVpn pour atteindre les clients VPN :

Lien vers le fichier : cliquez ici

Côté clients OpenVpn, de base il ne savent contacter que le serveur OpenVpn.
Pour qu'ils sachent joindre les machines situées dans le LAN du serveur OpenVpn, c'est à dire ici des machines en 192.168.2.xxx, alors il faut leur indiquer la route à prendre.
Pour cela sur le serveur OpenVpn éditez
/etc/openvpn/server.conf

et faites un push :

Au cas où, pour effacer cette route faites :

Lien vers le fichier : cliquez ici

D'après le wiki d'openvpn, il faut s'assurer que l'ip forwarding est activé car souvent ce n'est pas le cas, et effectivement chez moi sans cela ca ne fonctionnait pas.
Pour activer l'ip forwarding, tapez la commande ci-dessous.
Pour la rendre permanente vous pouvez l'inclue dans votre script qui paramètre iptables au boot :

Lien vers le fichier : cliquez ici

Une autre technique pour rendre le changement permanent est d'ajouter cette ligne dans
/etc/sysctl.conf

Lien vers le fichier : cliquez ici

Tout devrait maintenant fonctionner.
Par défaut, sauf indication contraire dans /etc/openvpn/server.conf
les logs sont visibles dans le tronc commun avec la commande

Lien vers le fichier : cliquez ici

Au niveau firewall sur le serveur OpenVpn,
il faut permettre le trafic entrant (en provenance du routeur) vers le service OpenVpn.

Ajouter également 2 règles pour autoriser le transfert de paquets :

Lien vers le fichier : cliquez ici

On arrive maintenant à des notes que j'ai prise pendant mes galères de mise en place.

Après lecture de ce site :
http://www.nimlabs.org/dirtynat.html

J'ai tenté de natter du réseau 10.8.0.0 (tun0) vers le 192.168.2.0 (eth0) en reprenant la syntaxe donnée par le site :

Lien vers le fichier : cliquez ici

Par exemple ci-dessous pour test j'ai modifié le certificat de mon autorité racine. La connexion d'un client échoue alors et on voit dans les logs un TLS handshake failed :

Sur https://help.ubuntu.com/community/Internet/ConnectionSharing
Pour mettre en place le nat, on indiquait une autre technique :

Lien vers le fichier : cliquez ici

Toujours d'après http://www.nimlabs.org/dirtynat.html
il était indiqué que le serveur devait répondre aux requêtes ARP du réseau local (192.168.) sur l'eth0
Pour que le proxy ARP automatique fonctionne, le serveur VPN devait penser qu'il avait une route différente pour le sous-réseau des clients en VPN.

Lien vers le fichier : cliquez ici

Pages Web

Site WebDescription
Doc.ubuntu-fr.orgDoc d'installation d'OpenVPN
Guide.ubuntu-fr.orgGuide de mise en place d'OpenVPN
System-linux.euInstallation et configuration d’un client Openvpn Windows
Wiki.debian.orgConfigure openvpn on a Debian server and client

Téléchargement(s)

NomSite Web d origineDescription
Putty V0.63http://www.chiark.greenend.org...Client ssh Putty
WinSCP_V4.1.8.isohttp://winscp.net/eng/download...Client ftp et sftp de référence pour Windows
9157OpenVpnSchem.vsdxSchéma visio qui représente l'infrastructure
9157_server.conf_complet....Fichier de configuration server.conf d'OpenVpn complet
9157_server.conf_sans_com...Fichier de configuration server.conf d'OpenVpn sans commentaires

Article(s) précédent(s)