Nous allons distinguer deux types de VPN, VPN SSL et VPN IPSec. La plus grande difference entre les deux types de protocoles est la methode de chiffrement qui sont respectivement SSL/TLS ou IPSec. Ils vont encapsuler sur la couche 3 (réseau) du modèle OSI afin de transporter des paquets/trames (de couche 2 ou 3). Cette dernière propriété va le rendre indépendant du modèle TCP/IP. IPSec est standard en IPv6 a été pensé pour marcher en IPv6. OpenVPN est un VPN SSL et Wireguard est une alternative differente de IPSec.
Très concrètement, comme on le voit sur le schéma ci-dessus, un VPN est simplement un "tunnel", un canal virtuel dédié, entre votre machine (ordinateur, routeur par exemple) et un serveur VPN.
Ce canal permettra de simuler pour votre équipement un réseau local entre lui et le serveur. La pratique la plus commune est de chiffrer les données qui y circulent via des protocoles comme IPSec ou TLS, pour éviter toute exposition sur Internet. En effet, le tunnel est virtuel, les données doivent bien passer par Internet pour arriver au serveur.
Utiliser un VPN ouvre de nombreux usages :
Pour le commun des mortels :
Pour les professionnels :
.zip
qui devra être mis en ligne sur l'intra des tcom.
Si vous êtes sur une machine VM sur un Windows par exemple VirtualBox, vous devez configurer votre réseau en mode bridge (pont). Voici quelques screenshots :
Nous allons maintenant procéder à l'installation de OpenVPN, cette installation va se faire en trois étapes :
OpenVPN est logiciel libre permettant de créer un VPN SSL dont le développement a débuté en 2001. Le code source est disponible sur Github.
Comme tout logiciel/protocole utilisant SSL/TLS (comme HTTPS), il se base sur la cryptographie asymétrique et les clés RSA, ce qui est la même technologie utilisée pour le protocole SSH par exemple.
Chaque utilisateur (un seul dans le cas du schéma ci-avant par soucis de clareté) possède un couple de clés (une publique/une privée). La clé privée sert à déchiffrer les messages et leurs signatures. La clé publique sert à chiffrer les messages et est obtenue par une fonction à sens unique (facilement calculable mais quasi-impossible à inverser). L'ANSSI recommande une clé de 2048 bits dans le cadre d'une clé RSA.
Pour envoyer un message à A, B utilise la clé publique de A, pour que A puisse déchiffrer le message grâce à sa clé privée. La clé privée est le seul moyen de déchiffrer le message. Si bien qu'une fois chiffré, même B ne peut pas le lire.
Comme vous l'avez compris, A doit envoyer sa clé publique à B pour que B puisse chiffrer ses messages à destination de A, afin qu'ils soient lisibles par A (via sa clé privée).
Or, lors de l'envoi de cette clé publique, aucune vérification de l'expéditeur ne peut être effectuée pour que B soit assuré que la clé qu'il reçoit est bien émise par A ! D'où l'intégration d'un tiers : l'autorité de certification
L'autorité de certification a pour objectif de certifier que la clé publique émise est bien celle de A.
Une personne souhaitant communiquer via TLS envoie à une autorité de certification une "demande de signature de certificat" (1) contenant sa clé publique et des informations sur son identité (comme ses coordonnées postales et numériques). La CA vérifie en interne ces informations et si elles sont correctes, signe elle-même (via sa propre clé privée) la demande de signature (qui devient de fait le certificat) et la renvoie au demandeur (3).
A chaque connexion d'un utilisateur, le serveur lui envoie le certificat (pour preuve), que le client peut donc authentifier avec certitude et débuter la connexion.
À chaque envoi de certificat, le client demande à la CA si le certificat reçu est encore valide, faute de quoi, il sera refusé par le client. Notez que par le passé, les clients (navigateurs dans le cas d'HTTPS) téléchargeaient régulièrement les listes de révocation.
NB : Cette pratique est effectuée par le serveur dans le cas de notre VPN car c'est au serveur de vérifier l'identité du client et non l'inverse dans notre cas. Notez que la CA envoie les mises à jour au serveur quand elles sont nécessaires, afin que le serveur n'ait pas à demander des confirmations à la CA à chaque connexion :
Pour aller plus loin :
Nous rentrons peu dans les détails dans le cadre de ce TP. La logique est celle présentée dans le TP, mais des principes mathématiques (comment est calculée la clé privée, comment le message est chiffré, etc.) et des détails d'implémentation (comment le certificat est vérifié, comment est-il envoyé, etc.) sont utilisés et peuvent vous intéresser.
Assurez-vous de mettre votre système à jour avec la commande correspondant au packet manager de votre OS.
$ sudo pacman -Syu
ou
$ sudo apt update
Puis installer OpenVPN via celui-ci,
$ sudo pacman -S openvpn
ou
$ sudo apt install openvpn
Ce packet doit contenir les commandes nécessaires pour configurer OpenVPN ainsi que les fichiers correspondants. Le contenu peut varier d'une distribution à l'autre.
Assurez-vous d'avoir la commande wget installée, puis effectuez cette commande :
Cela permet de télécharger EasyRSA, qui va nous fournir les fichiers nécessaires pour mettre en place notre serveur CA (autorité de certification).
Créez les dossiers permettant de différencier le serveur de l'autorité de certification. Le dossier ca
sera l'authorité de certification et le dossier server
sera votre serveur OpenVPN :
$ cd ~
$ mkdir ca
$ mkdir server
Extrayez le contenu de la tarball dans chacun des dossiers ca
etserver
:
$ cd ~/ca
$ tar -xvf ../EasyRSA-3.0.4.tgz
$ cd ~/server
$ tar -xvf ../EasyRSA-3.0.4.tgz
Vous disposez maintenant de toutes les ressources nécessaires pour le TP.
Nous allons maintenant configurer le serveur CA (autorité de certification). Pour cela EasyRSA dispose d'un fichier de configuration, allez dans le répertoire EasyRSA de la CA :
$ cd ~/ca/EasyRSA-3.0.4/
Vous allez trouver un fichier nommé vars.example qui va contenir un ensemble de variables de préférence liées aux certificats que l'on va générer. Faites-en une copie en la nommant vars
sans extension. Certaines variables doivent être décommentées.
Remplissez les selon vos préférences mais ne les laissez pas vides :
Exemple :
Vous trouverez également un script easyrsa, c'est via celui-ci que nous allons mettre en place et gérer la CA.
Vous pouvez effectuer cette commande pour avoir une idée de tout ce que propose ce script :
$ ./easyrsa help
Nous allons commencer avec cette commande pour pouvoir créer les clés publiques que nous délivrerons avec la CA :
$ ./easyrsa init-pki
Puis maintenant construisez la CA avec cette commande, cela devrait créer deux nouveaux fichiers ca.crt et ca.key qui correspondent respectivement à votre clé publique et votre clé privé. Si vous ne voulez pas de mot de passe pour votre CA vous pouvez rajouter l'option nopass
.
$ ./easyrsa build-ca nopass
À la suite de cette commande, il vous sera demandé le nom de votre CA. Ce nom peut être modifié à votre convenance.
Vous avez maintenant une autorité de certification prête à signer des certificats.
Remarque
Vous pouvez utiliser l'option revoke
pour révoquer un client, cependant le client révoqué aura toujours accès au service VPN. Pour palier ce problème vous devez mettre en place une liste de révocation avec la commande :
$ ./easyrsa gen-crl
qui va créer un fichier crl.pem
. Transférez-le vers votre serveur OpenVPN (cp
dans le cadre de ce TP sinon scp
) vers /etc/openvpn
. Puis éditez le fichier server.conf
en ajoutant cette ligne en bas du fichier :
crl-verify crl.pem
puis redémarrez OpenVPN via
$ sudo restart openvpn@server
Cette opération est scriptable est doit être refaite pour chaque révocation d'un client.
Remarque
Les certificats SSL que nous allons pouvoir générer sont du même type que les certificats permettant de certifier un protocole HTTPS qui n'est autre qu'un protocole HTTP associé à un certificat SSL.
Nous allons maintenant créer les premiers certificats. Naviguez dans le dossier du serveur OpenVPN :
$ cd ~/server/EasyRSA-3.0.4/
Comme pour la CA, vous devez créer une PKI qui sera différente de celle utilisée pour votre CA :
$ ./easyrsa init-pki
Générez le certificat de notre serveur afin pouvoir communiquer avec lui avec la commande suivante :
server
. Si vous le modifiez, assurez-vous de ne pas faire d'impair suite à un copié/collé des commandes.
$ ./easyrsa gen-req server nopass
Cette commande a pour effet de générer une requête de certificat (.req) et une clé privée (.key). La requête de certificat doit maintenant être certifiée/signée par la CA. Elle prendra la forme server.crt
après signature et pourra être propagée.
Les requêtes de certificats générées sont dans le dossier pki/reqs
.
Les clés privées sont dans le dossier pki/private
.
Déplaçons la requête du certificat nouvellement créé (server.req) dans le dossier /tmp/
afin de la transférer à notre CA.
Il faut aussi déplacer la clé privée du serveur (server.key) dans le dossier /etc/openvpn
(accessible uniquement en sudo) qui sera utilisée dans la suite du TP.
scp
permet de le faire en sécurité.
Naviguez dans le dossier de la CA :
$ cd ~/ca/EasyRSA-3.0.4/
Il est maintenant temps d'importer votre certificat dans la CA :
$ ./easyrsa import-req /tmp/server.req server
Pour rappel c'est cette entité qui va orchestrer tout ce qui a un rapport avec les certificats et également exécuter des fonctions dessus comme la révocation ou la création de certificats, c'est la raison pour laquelle elle doit avoir en mémoire tous les certificats existants.
Puis signons ce certificat :
$ ./easyrsa sign-req server server
Dans cette commande, nous avons deux arguments le premier indique que nous voulons signer un certificat server
ou client
.
Le deuxième est le nom du certificat qui sera généré (ici server
).
Les certificats générés par cette commande sont stockés dans le répertoire pki/issued
Après la génération du certificat serveur il nous faut maintenant le renvoyer sur la machine qui contient le serveur (dans le cadre de ce TP comme précisé en introduction, le serveur OpenVPN et le serveur CA cohabitent sur la même machine).
$ cp pki/issued/server.crt /tmp/
Il nous faut aussi le certificat de notre CA pour vérifier les signatures.
Copiez-le dans le dossier de transition tmp
:
$ cp pki/ca.crt /tmp/
Envoyons maintenant ces clés dans le dossier d'OpenVPN :
$ sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/
Nous allons passer dans la partie serveur :
$ cd ~/server/EasyRSA-3.0.4/
Des clés de chiffrement doivent être générées pour finaliser la création des clés coté serveur. Nous allons générer une clé pour sécuriser nos différents échanges avec l'algorithme de Diffie-Hellman :
$ ./easyrsa gen-dh
Il nous faut ensuite une signature afin d'avoir une sécurité renforcée. La signature générée peut être répandue sur les clients afin d'ajouter une sécurité.
$ sudo openvpn --genkey --secret ta.key
Et enfin copiez ces clés vers le dossier d'OpenVPN.
$ sudo cp ~/server/EasyRSA-3.0.4/ta.key /etc/openvpn/
$ sudo cp ~/server/EasyRSA-3.0.4/pki/dh.pem /etc/openvpn/
La partie serveur CA est maintenant terminée nous allons pouvoir commencer à nous occuper des clients.
Cette partie vous explique comment générer une seule paire clé certificat/clé client, si vous désirez en avoir plusieurs, vous pouvez répéter ce processus ou écrire un script qui va s'occuper de créer et remplir les fichiers de config des clients et de les transferer automatiquement de la CA au client.
Pour cette partie notre client s'appelera ploppy
On va commencer par créer un répertoire sur votre machine serveur :
$ mkdir -p ~/client-configs/keys
Dans ce répertoire on va stocker des informations critiques liées à nos clients, nous allons donc y restreindre les droits :
$ chmod -R 755 ~/client-configs
Ensuite, retournez dans le répertoire EasyRSA et exécutez le script easyrsa avec les options gen-req et nopass, ainsi que le nom commun du client :
$ cd ~/server/EasyRSA-3.0.4/
$ ./easyrsa gen-req ploppy nopass
Copiez le fichier ploppy.key dans le répertoire /client-configs/keys/ que vous avez créé précédemment :
$ cp pki/private/ploppy.key ~/client-configs/keys/
Ensuite, copiez le fichier ploppy.req sur votre machine CA (encore une fois, on utiliserait une méthode sécurisée telle que scp
si les deux serveurs ne cohabitaient pas sur la même machine) :
$ cp pki/reqs/ploppy.req /tmp
Puis naviguez jusqu'à la CA et importez ploppy.req
$ cd ~/ca/EasyRSA-3.0.4/
$ ./easyrsa import-req /tmp/ploppy.req ploppy
$ ./easyrsa sign-req client ploppy
Entrez yes
quand on vous invite à signer la demande de certification ; pour ceux qui en ont un, on vous demandera également votre mot de passe.
Vous avez un nouveau fichier nommé ploppy.crt
que vous pouvez transferer au serveur (on utiliserait une méthode sécurisée tel que scp si les deux serveurs ne cohabitent pas sur la même machine).
$ cp pki/issued/ploppy.crt /tmp/
$ cp /tmp/ploppy.crt ~/client-configs/keys/
Transferez vos clés publique et privé dans le dossier de configuration des clients.
$ sudo cp ~/server/EasyRSA-3.0.4/ta.key ~/client-configs/keys/
$ sudo cp /etc/openvpn/ca.crt ~/client-configs/keys/
Nous reviendrons sur ces fichiers dans la suite du TP en attendant nous devons finir la configuration d'OpenVPN sur notre serveur.
L'objectif de cette partie est de créer un service openVPN cela est possible grâce à différents outils pour ce TP nous avons choisit systemctl.
Commencez par copier un exemple de fichier de configuration OpenVPN dans le répertoire de configuration, puis extrayez-le afin de l'utiliser comme base pour votre installation :
$ sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
$ sudo gzip -d /etc/openvpn/server.conf.gz
Attention, si vous êtes sur Archlinux, on doit différencier les dossiers de serveur et de client, ducoup mettez tous les fichiers suivant dans /etc/openvpn/server : ca.crt, dh.pem. nomduserver.crt, servername.key et ta.key. Le fichier de conf du serveur est dans /usr/share/openvpn/examples/server.conf
Nous allons maintenant modifier la configuration par défaut d'OpenVPN.
Ouvrez le fichier de configuration :
$ sudo vim /etc/openvpn/server.conf
Vérifiez que la ligne suivante n'est pas précédée d'un ;
(qui permet de mettre en commentaire) :
tls-auth ta.key 0 # This file is secret
Trouvez la ligne contenant le mot cipher
. Le AES-256-CBC
permet un bon niveau de chiffrement et est assez bien supporté. Cette ligne doit être décommentée :
cipher AES-256-CBC
En dessous de cette ligne ajoutez un auth
pour selectionner une fonction de hachage. SHA256
est un bon choix :
auth SHA256
Trouvez la ligne contenant la directive dh
. Elle permet de définir le nom du fichier contenant les paramètres pour l'algorithme de Diffie-Hellman. Nous l'avons créé plus tôt sous le nom de dh.pem
. Modifiez le nom préconfiguré par la configuration d'exemple :
dh dh.pem
Décommentez la ligne permettant de créer les logs et choisissez openvpn.log
comme fichier de log. Cela nous permettra de vérifier les logs par la suite.
log /var/log/openvpn/openvpn.log
Décommentez la ligne suivante pour pouvoir forward le traffic et pouvoir obtenir l'IP du serveur sans quoi le traffic ne passera pas par notre VPN.
push "redirect-gateway def1 bypass-dhcp"
Dernière ligne à modifier, trouvez user
et groupe
et décommentez-les.
user nobody
group nogroup
group nogroup
doit être remplacé par group nobody
Afin de rendre votre VPN accessible et ainsi réussir à vous connecter, il vous faut maintenant changer certains paramètre réseaux.
En premier lieu, nous allons modifier les règles d'IP forwarding. Ouvrez le fichier de config sysctl. Si ce fichier n'est pas présent vous pouvez le créer :
$ sudo vim /etc/sysctl.conf
Cherchez la ligne net.ipv4.ip_forward
et décommentez-la en enlevant le #
:
net.ipv4.ip_forward=1
Fermez le fichier et appliquez les modifications.
$ sudo sysctl -p
La sortie devrait afficher :
net.ipv4.ip_forward = 1
Installez le packet ufw
. UFW ou Uncomplicated Firewall est un firewall assez répandu et utilisé. Même si vous l'avez déjà, cela permettra de récupérer tous les fichiers par défaut qui ne sont pas sur votre machine.
$ sudo pacman -S ufw
ou
$ sudo apt install ufw
Vérifions votre interface réseau avec la commande :
$ ip route | grep default
Vous devriez obtenir en sortie une ligne similaire à :
default via 192.168.1.13 dev wlp11s0 proto static
wlp11s0
(eth0 ou autre) est votre inferface réseau. Gardez-la en mémoire, elle sera utile plus tard.
Ouvrez le fichier de règles de UFW :
$ sudo vim /etc/ufw/before.rules
Les règles UFW permettent de gérer le firewall. Normalement, il faut utiliser la commande ufw
pour ajouter des règles mais les règles présentent dans le before.rules
sont chargées en avance.
Nous allons ajouter des lignes dans le fichier de configuration afin de pouvoir utiliser OpenVPN. Elles vont permettre de définir la politique de routage dans la table NAT. N'oubliez pas de changer wlp11s0
par votre interface réseau.
A la suite de :
et avant
Ajoutez ces lignes :
Nous en avons terminé avec ce fichier, sauvegardez et fermez-le.
Ouvrez le fichier /etc/default/ufw
pour autoriser les paquets transmis par défaut.
$ sudo vim /etc/default/ufw
Changez le DROP
par ACCEPT
dans la ligne :
DEFAULT_FORWARD_POLICY="DROP"
Fermez le fichier.
Nous allons maintenant ajuster le firewall pour autoriser le trafic OpenVPN. Le port que nous utilisons ici 1194
doit être le même que celui mis dans le fichier /etc/openvpn/server.conf
. Si vous n'avez rien touché, pas d'inquiétude c'est bien le port par défaut.
$ sudo ufw allow 1194/udp
$ sudo ufw allow 22/tcp
$ sudo ufw disable
$ sudo ufw enable
Votre serveur est maintenant prêt à gérer le traffic OpenVPN.
Lançons maintenant le service OpenVPN avec systemctl. Le service est connu grâce au fichier /etc/openvpn/server.conf
. :
$ sudo systemctl start openvpn@server
Sous Archlinux on fait la disctonction entre serveur et client, ducoup la commande pour lancer le serveur est:
sudo systemctl start openvpn-server@server
Vérifiez que le service est bien en état de marche :
$ sudo systemctl status openvpn@server
Vous devriez obtenir une sortie du type :
Vérifiez que l'interface tun0 est disponible via la commande :
$ ip addr show tun0
Cela devrait vous donner un résultat similaire :
Activez le service pour qu'il soit lancé au démarrage de la machine (facultatif) :
$ sudo systemctl enable openvpn@server
Votre serveur OpenVPN est maintenant lancé. Il faut maintenant créer les fichiers de configuration client afin de permettre à vos utilisateurs d'utiliser ce VPN.
Nous allons automatiser la création des configuration client car pour chaque client que vous voudrez créer, il vous faut créer une nouvelle configuration client.
Le dossier files
contiendra toutes les configurations générées.
$ mkdir -p ~/client-configs/files
Copiez la configuration de base pour les clients OpenVPN dans votre dossier client-config
et ouvrez-la :
$ cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
$ vim ~/client-configs/base.conf
Cherchez l'instruction remote
et remplacez my-server-1
par votre adresse IP. Si vous êtes sur le même réseau local, récuperez votre IP privée. Si ce n'est pas le cas, utilisez votre IP publique.
Pour récupérer votre IP publique :
$ curl ifconfig.me
(ou n'importe quel site comme https://www.monippublique.com/)
Pour récupérer votre IP privée :
$ ip a
Vous retrouverez dans les prochaines lignes les configurations que nous avons mises dans la configuration du serveur OpenVPN.
Vérifiez que la configuration est bien en mode udp
comme défini précédement :
proto udp
Décommentez user
et group
:
user nobody
group nogroup
Commentez maintenant les directives ca
, cert
et key
avec un #
. Le script de configuration ira chercher les fichiers dont il a besoin par lui même.
ca ca.crt
cert client.crt
key client.key
Assurez vous que la ligne suivante est bien commentée. Cela vous demandera la clé sur vos clients sinon (dans notre but éducatif, ce n'est pas essentiel) :
#tls-auth ta.key 1
Retrouvez les informations de chiffrement cipher
et remplacez-les par la configuration serveur :
cipher AES-256-CBC
auth SHA256
Enfin, nous devons ajouter une commande à la fin du fichier : key-direction 1
. Cela permet de signifier au client qu'il est bien client et non pas serveur.
Vous pouvez maintenant fermer ce fichier.
Nous allons maintenant créer le script de création de configuration client :
$ vim ~/client-configs/make_config.sh
Voici le script que vous utiliserez :
Rendons ce fichier exécutable :
$ chmod +x make_config.sh
Nous allons maintenant créer les configurations pour nos clients avec le script précédent.
$ cd ~/client-configs
$ sudo ./make_config.sh ploppy
Vous pouvez trouver la configuration que vous venez de générer dans le dossier ~/client-configs/files
sous le format *.ovpn
$ ls ~/client-configs/files
Il vous faut maintenant transférer ce fichier sur votre client et suivre les prochaines étapes pour tester votre VPN.
Télécharger l'application OpenVPN Connect via votre store.
Lancez l'application et trouvez l'onglet Import Profile, donnez lui votre .ovpn. Vous n'avez plus qu'à appuyer sur le bouton connecter
.
Téléchargez l'application client OpenVPN pour Windows depuis la page de téléchargement d'OpenVPN ( https://openvpn.net/client-connect-vpn-for-windows/).
Vous aurez besoin des privilèges d'administrateur pour installer openVPN sur votre machine windows.
Une fois OpenVPN installé, copiez le fichier .ovpn dans le dossier:
C:\Program Files\OpenVPN\config
ou le dossier où vous avez installé OpenVPN.
Pour pouvoir utiliser OpenVPN, vous devez l'exécuter en tant que administrateur (même si vous êtes avec un compte admin, modifiable dans les proprités de l'application).
Une fois qu'OpenVPN est lancé, initiez une connexion en vous rendant dans l'applet de la barre d'état système et en cliquant avec le bouton droit de la souris sur l'icône de l'applet OpenVPN. Cela ouvre le menu contextuel. Sélectionnez ploppy en haut du menu (c'est votre profil ploppy.ovpn) et choisissez Connecter.
Une fenêtre d'état s'ouvrira, montrant la sortie du journal pendant que la connexion est établie, et un message s'affichera une fois que le client sera connecté.
Déconnectez-vous du VPN de la même manière : allez dans l'applet de la barre d'état système, cliquez avec le bouton droit de la souris sur l'icône de l'applet OpenVPN, sélectionnez le profil du client et cliquez sur Déconnecter.
Si vous utilisez Linux, vous pouvez utiliser plusieurs outils en fonction de votre distribution. Votre environnement de bureau ou votre gestionnaire de fenêtres peut également inclure des utilitaires de connexion.
La façon la plus universelle de se connecter, cependant, est d'utiliser simplement le logiciel OpenVPN que vous trouverez avec votre packet manager si votre distribution n'est pas trop obscure.
Debian/Ubuntu:
$ sudo apt update
$ sudo apt install openvpn
CentOs/Fedora:
$ sudo yum install epel-release
$ sudo yum install openvpn
Pour Archlinux:
$ sudo pacman -Syu
$ sudo pacman -S openvpn
Vérifiez la présence du script /etc/openvpn/update-resolve-conf
.
Il est présent si vous êtes sur une distribution dérivé de debian ou faites par Redhat normalement, dans ce cas modifiez le fichier de config (le .ovpn) et décommentez ces trois lignes:
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
Si vous êtes sous Archlinux, le fichier de conf se trouve dans
/usr/share/openvpn/examples/client.conf
.
Si vous avez une distribution Redhat n'oubliez pas de modifiez le group nogroup
en group nobody
.
Vous pouvez maintenant lancer la commande:
$ sudo openvpn --config ploppy.ovpn
pour vous connecter au serveur OpenVPN.
Tunnelblick est un client OpenVPN gratuit et open source pour macOS. Vous pouvez télécharger la dernière image disque à partir de la page de téléchargement de Tunnelblick (version stable). Double-cliquez sur le fichier .dmg téléchargé et suivez les instructions pour l'installer.
Vers la fin du processus d'installation, Tunnelblick vous demandera si vous avez des fichiers de configuration. Répondez J'ai des fichiers de configuration
et laissez Tunnelblick finir. Ouvrez une fenêtre du Finder et double-cliquez sur ploppy.ovpn. Tunnelblick installera le profil du client. Des privilèges administratifs sont requis.
Lancez Tunnelblick en double-cliquant sur l'icône de Tunnelblick dans le dossier Applications. Lorsque Tunnelblick est lancé, une icône Tunnelblick apparaît dans la barre de menu en haut à droite de l'écran pour contrôler les connexions. Cliquez sur l'icône, puis sur l'élément de menu Connecter ploppy pour lancer la connexion VPN.
Afin de vérifier votre avancée sur le TP, il vous faut maintenant nous faire parvenir un fichier qui sera généré par le script suivant :
Pour toutes les personnes qui ne sont pas sur archlinux :
Pour les personnes sur archilinux, utiliser ce script :
Avant de lancer le script, assurez vous que vous êtes connecté sur votre VPN avec votre client.
Exécutez ce script avec votre login sous le format prenom.nom
:
$ chmod +x eval.sh
$ sudo ./eval.sh prenom.nom
Un fichier sera généré sous le nom : prenom.nom.openvpn
Gardez ce fichier, il vous sera demandé de le rendre un peu plus tard.
Pour finir, éteignez le service OpenVPN :
$ sudo systemctl stop openvpn@server
$ sudo systemctl disable openvpn@server
Arrêter le service ufw :
$ sudo ufw reset
Nous allons maintenant parler de Wireguard, un acteur du marché VPN différent d'OpenVPN avec comme spécificité son débit proche du Gigabit par seconde.
Contrairement à OpenVPN, nous ne créerons qu'un tunnel entre deux machines et non pas un forward complet du traffic. Si vous voulez faire du forward complet du traffic (et du coup naviguer sur internet avec l'IP de votre serveur), il vous faut modifier votre serveur comme un routeur et ce n'est pas le but de ce TP.
Voici une des façons d'utiliser votre VPN Wireguard :
Vous habitez Lyon. Vous possedez un NAS chez vous (à Lyon) avec une centaine de films téléchargés illégalement sur Internet. Vous possédez une autre machine (ordinateur portable / téléphone) et vous êtes en déplacement en Italie (parce que le Covid-19 ne vous fait pas peur et que vous êtes un imbécile fini). Avec un VPN Wireguard qui lie votre portable et votre machine distante, vous avez accès à vos films via un tunnel sécurisé et avec un acces haut débit.
Wireguard peut être déjà installé sur votre machine car il est devenu un des paquets par défaut disponible. Cependant, si ce n'est pas le cas, veuillez l'installer :
https://www.wireguard.com/install/
Wireguard fonctionne avec des paires de clés publique et privée. Rendez-vous dans un dossier où vous aller stocker les clés, son emplacement n'a pas d'importance, soyez juste sur d'avoir les droits sur ce dossier.
$ cd /etc/wireguard/
$ umask 077
$ wg genkey | tee privatekey | wg pubkey > publickey
Cela va nous créer deux fichiers :
Dans lesquels, nous retrouvons des clé du style : N3F9FOP/JxHr6vA+u3SwTGsIjOmodmlbus4hicdsbje=
C'est ces combinaisons de caractères que vous devrez mettre dans vos fichiers de config.
Créez le fichier /etc/wireguard/wg0.conf
et remplissez le avec le schema ci-dessous. Nous allons utiliser wg0
comme nom de notre interface. Vous pouvez le nommer comme vous le souhaitez.
Remplacez le <private_key>
par la clé privée que nous avons générée juste avant (ici dans privatekey
). Il vous faudra une section [Peer]
par client, nous y reviendrons plus tard.
Les PostUp
et PostDown
sont les ajouts qui seront fait dans les iptables. Cela permet de gérer les redirections et les forwards.
Remplacez eth0
par l'interface liée à internet (voir ip a
)
Fermez ce fichier.
Comme pour OpenVPN nous allons utiliser UFW pour les ouvertures des ports dans le firewall avec les commandes suivantes:
$ sudo ufw allow 22/tcp
$ sudo ufw allow 51820/udp
$ sudo ufw enable
Vous pouvez vérifier votre firewall avec :
$ sudo ufw status verbose
Des applications pour les clients sont disponibles pour tous les OS (PC et téléphones). Il vous suffit de prendre l'application Wireguard officielle sur votre appstore préféré.
Si vous êtes sur Linux, vous devez désactiver votre network manager afin de ne pas pourrir votre config et laisser wireguard jouer avec vos networks. Pour toute questions, appelez un assistant.
Voici la configuration qui répond au client 1 de la conf serveur précédente :
Si vous êtes sur téléphone, vous pouvez créer un QRcode sur votre serveur et prendre une photo de ce dernier via l'application Wireguard.
Pour cela, il vous faut une nouvelle paire de clé de wireguard :
$ wg genkey | tee client_privatekey | wg pubkey > client_publickey
Créez un fichier client.conf
, et ajoutez la configuration :
Remplissez les champs <...>
avec les valeurs demandées.
<server_ip>
étant votre ip privée ou publique.
<private_key_client>
étant votre clé privé client (ici dans client_privatekey
)
<public_key_server>
étant votre clé publique serveur (ici dans publikey
)
Exécutez les commandes suivantes :
$ sudo apt install qrencode
ou
$ sudo pacman -S qrencode
$ qrencode -t ansiutf8 < client.conf
Et scannez le QRcode généré.
Retournons dans le fichier de configuration /etc/wireguard/wg0.conf
.
Remplacez <public_key>
par la clé publique de votre client (ici dans client_publickey
).
Nous allons utiliser wg-quick
comme outil pour gérer l'état de Wireguard.
Démarez le VPN avec :
$ wg-quick up wg0
Vous pouvez vérifier l'état avec :
$ sudo wg show
Si vous avez l'erreur:
RTNETLINK answers: Operation not supported
Installez les dépendances requises avec :
apt-get install wireguard-dkms wireguard-tools linux-headers-$(uname -r)
Et avec :
$ sudo ifconfig wg0
Si ifconfig est installé sur votre machine
Depuis votre client, pingez le serveur :
$ ping 172.21.12.1
cmd
dispose de la commande ping
.ping
est disponible.ping
.Pour voir si tout fonctionne, faites :
$ sudo wg show
Si vous voyez votre nombre de bits entrants/sortants augmenter sur l'adresse de votre client c'est que tout va bien.
Si vous avez utilisé un autre nom de fichier pour la configuration, merci de changer wg0.conf
par <votre_nom>.conf
Avant de lancer le script, assurez vous que vous êtes connecté sur votre VPN avec votre client et avez fait un ping.
Exécutez ce script avec votre login sous le format prenom.nom
:
$ chmod +x eval.sh
$ sudo ./eval.sh prenom.nom
Un fichier sera généré sous le nom : prenom.nom.wireguard
Gardez ce fichier, il vous sera demandé de le rendre un peu plus tard.
Pour finir, éteignez le service Wireguard :
$ wg-quick down wg0
Arrêter le service ufw :
$ sudo ufw reset
Au cours de ce TP, deux fichiers ont été générés sous la forme :
prenom.nom.openvpn
prenom.nom.wireguard
Il est possible que le zip n'accepte pas ces fichiers, n'hésitez pas à faire un chmod 666
pour changer les permissions.
.zip
nommé : prenom.nom.zip
.rendus
: http://vivelestcom2020.ovh/
Le nom du sujet sur l'intra est prénom.nom
Vous devez rendre un seul dossier zip contenant vos deux fichiers.
En cas de soucis demandez de l'aide sur discord via @Assistant ou sur le slack via @lab
Afin d'améliorer les prochains TPs, nous vous proposons de répondre à ce formulaire afin de nous donnez vos impression sur ce TP. Sachez que ce formulaire est anonymisé.
Félicitations vous avez fini ce TP ! Good job !
Vous pouvez faire des choses illégales sans vous inquiéter (attention tout de même, votre (futur) serveur VPN est exposé).