Installer un serveur OpenVPN sous Debian

Un nouvel article sur le sujet est disponible à cette adresse: Créer un serveur OpenVPN sur Microsoft Azure

Un serveur VPN dans la pratique est généralement utilisé pour passer outre les limitations imposées par l’administrateur du réseau que vous utilisez.
Ainsi il est bien souvent utilisé pour:

  • consulter les sites non autorisés sur le réseau
  • afficher à la face du monde une IP différente de celle de notre domicile

Bref, un serveur VPN ça permet de protéger ses données et de contourner la censure (une problématique qu’une partie du monde ne connaît que trop bien).

Techniquement:

Un serveur VPN (VPN pour Virtual Private Network), permets de relier de manière sécurisée 2 réseaux entre eux en créant un tunnel sécurisé (encapsulation et chiffrement de paquets).
Le protocole utilisé le plus souvent auparavant était le protocole PPTP, celui-ci présenté déjà une faiblesse, car attaquable lors de sa phase d’identification, qui était résolu grâce à une complexité de mot de passe plus élevé notamment.
Cependant le fait que le chiffrement MS-CHAPv2 est désormais lui aussi cassé, PPTP est à abandonner.

OpenVPN est la solution à déployer dans le monde du libre afin de créer un serveur VPN avec lequel vous pourrez établir une connexion sécurisée.

Afin de pouvoir se connecter sur ce serveur VPN en tout lieu, c’est à dire depuis des hotspots publics notamment sans avoir de problème, on va configurer notre serveur VPN pour qu’il écoute sur son port 443.

Si jamais votre serveur VPN fait aussi office de serveur WEB avec connexion HTTPS (vous avez dit « owncloud » ?), nous verrons plus loin une astuce afin de garder ce service actif également.

Menu du jour:

  1. Pré-requis
  2. Installer OpenVPN
  3. Configurer OpenVPN
  4. Configuration du routage
  5. Création d’un compte client OpenVPN
  6. Installation et configuration du client OpenVpn sous Windows et Linux
  7. Script pour automatiser installation Serveur et création compte client
  8. Faire cohabiter un serveur VPN sur port 443 avec un serveur apache en HTTPS

Les explications qui vont suivre ont été copiées à 99% depuis le blog de Pazpop

Je m’accorde 1% car je suis sympa avec moi-même.


 

Dans cet article, je vais donc vous expliquer comment installer votre propre serveur VPN OpenVPN sous GNU/Linux Debian 7. Vous pouvez également suivre ce tutoriel pour d’autre distributions Linux et d’autres versions de Debian. Pour connaître la version de votre système d’exploitation, utiliser les commandes : uname -a et/ou cat /etc/debian_version.

Pré-requis :

Avant de commencer, vous devez être connecté sur votre serveur GNU/Linux en root via putty. Vous devez également avoir votre système à jour (apt-get update && apt-get upgrade).

 

Installer OpenVPN :

Effectuez une copie des fichiers de configuration et du générateur de clées :

 

Configuration d’OpenVPN :

Éditez le fichier /etc/openvpn/easy-rsa/vars et ajoutez ces lignes à la fin du fichier:

Ensuite, exécutez les commandes suivante afin de générer les clés (.key) et les certificats (.crt) :

Copiez ensuite les clés et les certificats dans le répertoire /etc/openvpn/ :

Puis, générez les répertoires /etc/openvpn/jail et /etc/openvpn/clientconf. Le premiers répertoire permet de chrooté le processus OpenVPN (afin de limiter les dégâts en cas de faille dans OpenVPN) puis, le dernier répertoire contiendra la configuration des clients :

Enfin, créez le fichier de configuration /etc/openvpn/server.conf :

Cette configuration permet de créer un serveur VPN SSL routé basé sur le protocole TCP et utilisant le port HTTPS (443). Les clients obtiendront une nouvelle adresse IP dans le range 10.8.0.0/24 et aurons les DNS de OpenNIC (87.98.175.85 et 188.165.91.48).

Vous pouvez tester la configuration en saisissant la commande suivante:

Alors en théorie si ça marche, ça renvoie à peu près cette ligne:

Personnellement cela ne m’a rien renvoyé, et même une fois j’ai fais ctrl+c pour sortir ^^ et pourtant mon serveur fonctionne donc … je ne sais pas.

– Démarrage du serveur VPN OpenVPN :

On lance le serveur avec la commande :

Vous pouvez observer les logs :

 

Configuration du routage :

À ce stade les machines clientes vont pouvoir se connecter au serveur VPN. Par contre impossible d’aller plus loin car ce dernier aura l’adresse 10.8.0.x qui ne sera par routée en dehors de votre serveur. Il faut donc configurer le serveur pour qu’il joue le rôle de routeur entre l’interface VPN (tun0) et l’interface physique (eth0). Après ces opérations, votre serveur NATera les adresses en 10.8.0.x vers son adresse IP réelle.

Configuration du routage:

[ sh -c ‘echo 1 > /proc/sys/net/ipv4/ip_forward’ ]

Afin de rendre cette modification permanente, vous devez éditer le /etc/sysctl.conf :

Puis configurer la translation d’adresse (NAT) :

Pour rendre cette règle de NAT persistante, il va falloir créer un script qui se lancera au démarrage de votre Debian :

Dans le fichier « /etc/init.d/ScriptIPtables », écrire (en root):

Rendre exécutable ce fichier (en root):

Le serveur est maintenant prêt à accueillir les clients.

Création d’un compte client OpenVPN

Ici, nous allons créer la configuration pour notre client VPN. (Plus bas, un script pour faire ça rapidement)

Avec  les commandes suivantes, un mot de passe sera demandé à l’utilisateur pour se connecter à votre serveur VPN.

Si pour vous cela n’a pas d’importance, vous pouvez utiliser les commandes suivantes:

Copiez les fichiers nécessaires sous le répertoire /etc/openvpn/clientconf/ préalablement créé :

On va ensuite dans le répertoire /etc/openvpn/clientconf/mon-serveur-vpn/ :

Créez le fichier client.conf (remplacez A.B.C.D par l’adresse publique de votre serveur VPN) :

Pour assurer la compatibilité avec le client Windows OpenVPN, on fait une copie du fichier client.conf vers client.ovpn:

 

Installer et configurer votre client VPN Windows

Téléchargez et installez le client VPN OpenVPN. Vous le trouverez ici. Attention, prenez le client compatible avec l’architecture de votre CPU (64bits ou 32).

Allez sur votre serveur et télécharger le contenue du répertoire /etc/openvpn/clientconf/mon-serveur-vpn. Collez ensuite les fichiers dans le répertoire de votre ordinateur C:Program FilesOpenVPNconfig.

Exécutez votre client VPN OpenVPN en tant qu’administrateur. Dans votre barre des taches, en bas à droite, une nouvelle icône devrait apparaître. Faites un clic droit dessus et cliquez sur ‘Connecter’.

– Installer et configurer votre client VPN Linux

Et bien, il suffit d’un petit « apt-get install openvpn », se rendre ensuite à l’aide du terminal dans le dossier ou se trouve l’ensemble de vos fichiers clients. Puis « sudo openvpn client.conf ».

Après quelques secondes vous serez connecté à votre serveur VPN !!
Pour vérifier votre nouvelle IP, allez ici.


–  Script création d’un serveur OpenVPN

Script extrêmement basique car il compile juste les étapes décrites précédemment. Fonctionne parfaitement sous une installation propre de Debian 7.
A télécharger en txt.
Attention, il va falloir fixer à la main les règles iptables.

– Script création compte client OpenVPN

Un script pour automatiser la création de clients OpenVPN.

 


– Faire cohabiter OpenVPN et un serveur web sur son port 443 c’est tout à fait possible.

Pour cela on doit procéder à « 2 » modifications.

Tout d’abords si vous utilisez un serveur web apache:
Modifier le fichier: « /etc/apache2/ports.conf » afin de changer le port des connexions SSL qui était (surement) 443 en 10443 par exemple.

Il faut que vous fassiez le même types de modification dans vos fichiers de virtual-hosts, qui doivent se trouver ici: « /etc/apache2/sites-available » toutes mentions du port 443 deviendra 10443.

Ensuite il faut modifier le fichier: « /etc/openvpn/server.conf »

On a rajouté la ligne:

Cela permet d’indiquer à OpenVPN que les paquets https qu’il va recevoir sur ce port devront être redirigés en interne sur le port 10443 sur lequel écoute désormais notre serveur apache.

Bien sûr après avoir fait ces modifications, il faut relancer nos services:

Si un message d’erreur apparaît pour l’un ou l’autre c’est probablement dû à un oubli du côté d’Apache.


Ce qu’il faut comprendre: bien que nous accédions au serveur OpenVPN via le port 443, qui correspond généralement à une connexion de type sécurisée SSL, les paquets envoyés par OpenVPN sur ce port ne comportent pas l’en-tête attendus dans le cas d’une connexion https.
Ainsi si jamais votre opérateur utilise un équipement particulier pour regarder à l’intérieur de vos paquets, il peut repérer l’utilisation d’OpenVPN et le bloquer.
Si jamais vous étiez dans ce cas de figure, il est intéressant de s’orienter vers ces solutions:


 

Astuce: Si jamais vous arrivez à vous connecter au VPN avec votre client, mais que vous n’avez pas ensuite accès à internet, pensez à vérifier vos règles NAT:


Sources consultées (et aujourd’hui copié) lors de la création de cet article:

Création du serveur: http://pazpop.fr/installer-un-serveur-vpn-openvpn-sous-gnulinux-debian/
Chroot OpenVPN + script: http://blog.valouille.fr/2013/02/installation-dun-serveur-openvpn-et-automatisation/
Faire cohabiter OpenVPN + serveur web https: http://www.vpntutorials.com/tutorials/openvpn-sharing-a-port-with-a-webserver-on-port-80-443/

 

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.