VPN WireGuard – Sécuriser l’accès aux machines (serveur, PC, imprimante…)

Nous vous avons déjà présenté l’excellent VPN WireGuard (gratuit et open source). Il est facile à installer et à configurer par exemple avec un Raspberry Pi et PiVPN ou sur du matériel UniFi. Aujourd’hui, nous passons à l’étape suivante. Nous allons sécuriser les accès aux machines de votre réseau (PC, NAS, imprimante…) lorsque vous êtes connecté avec WireGuard.

Crédits : lembergvector/Adobe Stock

VPN WireGuard et accès réseau

WireGuard est un des meilleurs VPN du marché. Il est sécurisé, léger, rapide et relativement simple à mettre en place. La connexion VPN est établie par un échange de clés publiques, comme pour l’échange de clés SSH. Il n’y a pas besoin de gérer les connexions ou de se préoccuper de l’état… Ainsi, il est possible de passer d’une connexion WiFi à une autre ou de passer en 4G/5G de façon transparente. Tout ceci fait est très appréciable.

WireGuard Client / Serveur

WireGuard fonctionne en mode client-serveur. Tout d’abord, vous avez d’un côté une machine : le serveur WireGuard. Cela peut être un NAS, un PC, votre routeur/box ou encore un Raspberry Pi. Le serveur VPN sera la porte d’entrée du réseau local (domestique/entreprise). De l’autre côté, nous avons l’utilisateur et le client WireGuard : PC, téléphone, tablette… Il fonctionne avec un logiciel/application sur le périphérique.

Sur le serveur WireGuard, on va générer un fichier de configuration pour chaque client. Chaque appareil dispose (normalement) de son propre fichier de configuration. Ce dernier contient l’adresse du serveur, le port utilisé, une clé d’interface, une clé publique (pair), etc. Il est impossible de se connecter au serveur VPN WireGuard sans ce fichier.

Dans une entreprise, on n’expose jamais les données sensibles directement sur Internet. Les utilisateurs doivent passer par un VPN. Pour le NAS personnel, c’est un peu la même chose… nous vous recommandons de passer par un VPN pour y accéder depuis l’extérieur. Ainsi, vous avez l’authentification du VPN et l’authentification sur le NAS ou serveur, pour accéder aux données. Avec un VPN, vous êtes assurés qu’un seul port est accessible depuis Internet. Cela permet de limiter l’exposition et le risque d’exploitation d’une faille de sécurité.

Toutefois, certains voient également dans le VPN une porte d’entrée à tout le réseau…C’est exact si le paramétrage est incomplet, ou volontairement si un utilisateur souhaite parcourir tout son réseau (ceci est moins vrai pour une entreprise). Il existe 2 solutions pour limiter les accès réseau depuis WireGuard…

Première méthode : facile, mais déconseillée

WireGuard peut restreindre l’accès aux machines du réseau via le fichier de configuration Client. Ce n’est pas la méthode que nous préconisons. En effet, l’utilisateur pourra de lui-même modifier le champ AllowedIPs (valorisé par défaut avec : 0.0.0.0/0, ::/0). Un exemple pour limiter l’accès qu’à deux machines qui auraient les adresses IPv4 suivantes 192.168.1.100 et 192.168.1.254 (à adapter en fonction de vos besoins) :

AllowedIPs = 192.168.1.100/32,192.168.1.254/32

Encore une fois, il s’agit ici d’une modification manuelle à faire au niveau du fichier de configuration du Client. Le /32 signifie ici une seule adresse IP. L’utilisateur pourrait le modifier s’il n’y a pas de verrou à son édition.

Seconde méthode : complexe, mais plus sécurisée

Notre solution préférée nécessite de modifier le fichier de configuration du serveur VPN WireGuard. Ici, nous allons modifier le fichier en ligne de commande sur notre Raspberry Pi sous Linux (installer facilement WireGuard sur un Raspberry Pi) :

sudo nano /etc/wireguard/wg0.conf
En dessous du numéro port, ligne 7 par exemple, tapez les commandes suivantes :
PostUp = iptables -I FORWARD -i wg0 -d 192.168.1.0/24 -j REJECT
PostUp = iptables -I FORWARD -i wg0 -d 192.168.1.100/32,192.168.1.254/32 -j ACCEPT

PostUP permet d’envoyer une commande au démarrage du service VPN WireGuard. Notre première ligne rejette (REJECT) l’accès à tout le réseau depuis WireGuard. La seconde ligne (ACCEPT) accepte une liste d’adresse IP (ici les deux adresses 192.168.1.100 et 192.168.1.254). Mais ce n’est pas fini…

En effet, nous allons ajouter ces deux autres lignes :

PostDown = iptables -D FORWARD -i wg0 -d 192.168.1.100/32,192.168.1.254/32 -j ACCEPT
PostDown = iptables -D FORWARD -i wg0 -d 192.168.1.0/24 -j REJECT

Ces dernières vont supprimer les règles précédentes lorsque le service WireGuard s’arrêtera. Elles ne sont pas obligatoires, mais elle apporte une certaine cohérence et évite quelques erreurs. Pour la prise en compte des nouvelles règles, vous pouvez redémarrer votre Raspberry Pi ou tout simplement taper les commandes ci-dessous:

wg-quick down wg0

puis

wg-quick up wg0

À noter que les lignes PostUp/PostDown peuvent recevoir un fichier .sh (juste après le signe =). Cela permettra d’indiquer plusieurs règles iptables.

Notre avis

Les 2 méthodes présentées ici sont complètement différentes, mais leur objectif est partagé : sécuriser un peu plus son VPN WireGuard. La première est simple à mettre en place, mais le fichier de configuration est facile à modifier. Il est bien sûr possible de le verrouiller (droit utilisateur) pour que seul un administrateur puisse le changer. La seconde méthode est plus contraignante et nécessite de toucher à la configuration du serveur (avec redémarrage du service). Cependant, elle a le mérite de bloquer tout votre réseau et autorise seulement quelques adresses. L’utilisateur Client n’aura aucun moyen pour modifier ou contourner ces règles.

Enfin, sachez qu’il est tout à fait possible d’utiliser les 2 méthodes ci-dessus, simultanément, pour offrir plus de souplesses à votre configuration réseau au niveau du Serveur et du fichier de configuration Client.