
Sécuriser un VPS en cloud public avec Wireguard
- Charles Fleury
- Sécurité , Réseau , Vps
- 9 août 2025
Sommaire
Cet article explique pas à pas comment protéger un VPS hébergé sur un cloud public en mettant en place un tunnel VPN chiffré via WireGuard. Après avoir présenté les prérequis matériels et logiciels, nous verrons comment installer et configurer WireGuard sur le serveur, sécuriser les flux réseau avec UFW, puis établir la connexion côté client. L’objectif : restreindre l’accès aux services critiques du VPS uniquement aux machines connectées via le VPN, réduisant ainsi considérablement la surface d’attaque et les risques d’intrusion.
Pré-requis
Un VPS en cloud public avec une console KVM (au cas ou on foire la conf)
Vous pouvez en louer une chez Hostinger via ce lien de parrainage (promo -20%): VPS 8go
Une distribution Linux (je me base sur Ubuntu)
Installation de Wireguard
L’installation de WireGuard est simple et rapide sur Ubuntu, car le paquet est directement disponible dans les dépôts officiels.
Cette étape installe les binaires nécessaires pour faire fonctionner le VPN, ainsi que les modules noyau requis pour gérer le chiffrement et les interfaces réseau virtuelles.
sudo apt install wireguard
Configuration de Wireguard sur le VPS
La configuration commence par la génération d’une paire de clés : une clé privée et une clé publique.
La clé privée reste strictement sur le serveur, tandis que la clé publique sera partagée avec les pairs pour établir le tunnel chiffré.
Ces clés sont indispensables pour authentifier et sécuriser les échanges entre les machines.
wg genkey | tee private_key | wg pubkey > public_key
WireGuard permet aussi de générer une clé pré-partagée (pre-shared key) en plus des clés publiques et privées.
Cette clé ajoute une couche de chiffrement symétrique supplémentaire par-dessus le chiffrement asymétrique existant, rendant plus difficile toute tentative d’attaque par force brute ou interception.
Bien qu’elle ne soit pas obligatoire, son utilisation est fortement conseillée pour renforcer la sécurité.
wg genpsk > preshared_key
Passons à la configuration du VPN.
Le fichier de configuration se trouve dans /etc/wireguard/wg0.conf
sudo vim /etc/wireguard/wg0.conf
Ici l’objectif est minimal, on doit simplement encapsuler le VPS dans le tunnel VPN, la configuration est donc extrêmement simple.
NETWORK_INTERFACE est trouvée en faisant ip a
et en cherchant l’interface qui correspond à l’adresse IP du VPS qui est exposée sur Internet.
Le mode MASQUERADE permet de faire basculer les requêtes arrivant par NETWORK_INTERFACE vers l’interface VPN.
PUBLIC_KEY_POSTE_TRAVAIL est crée en réalisant les mêmes étapes que précédemment sur le poste de travail (sauf la clé partagée évidemment, qui est … partagée)
[Interface]
Address = 10.0.0.1/24
SaveConfig = false
ListenPort = {{PORT}}
PrivateKey = {{PRIVATE_KEY_VPS}}
PostUp = iptables -t nat -A POSTROUTING -o {{NETWORK_INTERFACE}} -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -o {{NETWORK_INTERFACE}} -j MASQUERADE
MTU = 1420
# Poste de travail
[Peer]
PublicKey = {{PUBLIC_KEY_POSTE_TRAVAIL}}}}
PresharedKey = {{PRESHARED_KEY}}
AllowedIPs = 10.0.0.100/32
Address: Adresse dans le réseau VPN
SaveConfig: false, pour ne pas que la configuration soit écrasée.
ListenPort: Port de wireguard (defaut à 51280)
PrivateKey: La clé privée générée précédemment qui permettra au VPS de chiffrer ses communications
PostUp: Commande jouée lorsque l’on lance le service Wireguard.
PostDown: Commande jouée lorsque l’on éteint le service Wireguard.
MTU: Taille max d’un paquet avant fragmentation (défaut à 1420)
Peer: Déclaration d’un pair (interlocuteur si on veut) dans le VPN. Un [peer]
par machine qui va se connecter.
PublicKey: Clé publique du pair (obtenue précédemment sur le poste de travail)
PresharedKey: Clé partagée entre le pair et le VPS, elle peut être différente pour chaque pair.
AllowedIPs: Permet de router les IPs dans cette liste vers le pair. Cela peut être uniquement l’IP du pair, mais cela peut aussi être avec d’autres configurations possibles, le réseau local du pair en 192.168.0.0, ou tout le traffic de la machine avec 0.0.0.0. Ici on mettra l’IP VPN du poste de travail.
On sauvegarde le fichier puis on redémarre le service Wireguard pour appliquer les modifications.
sudo systemctl enable wg-quick@wg0
sudo systemctl restart wg-quick@wg0
Configuration de ufw
UFW (Uncomplicated Firewall) est un pare-feu simple à configurer pour gérer les règles d’accès réseau sur Linux.
Par défaut, il bloque tout le trafic entrant, ce qui empêche le VPN de fonctionner.
Nous allons donc autoriser spécifiquement le port {{PORT}}
en UDP, le protocole utilisé par WireGuard, puis recharger les règles pour les appliquer immédiatement.
On va également autoriser le trafic SSH sur le port 22 par le tunnel VPN.
sudo ufw allow {{PORT}}/udp
sudo ufw allow in on wg0 to any port 22 proto tcp
sudo ufw reload
Configuration de Wireguard sur le poste de travail
Pour alimenter la configuration du VPS, les actions suivantes ont déjà été réalisées sur le poste de travail:
- installation
- génération de clés publiques et privées
Créons maintenant la configuration du tunnel VPN de l’autre coté.
sudo vim /etc/wireguard/wg0.conf
[Interface]
Address = 10.0.0.100/24
SaveConfig = false
ListenPort = {{PORT}}
PrivateKey = {{PRIVATE_KEY_POSTE_TRAVAIL}}
MTU = 1420
# VPS
[Peer]
PublicKey = {{PUBLIC_KEY_VPS}}}}
PresharedKey = {{PRESHARED_KEY}}
AllowedIPs = 10.0.0.1/32
Endpoint = {{IP_VPS}}:{{PORT}}
PersistentKeepalive = 25
Endpoint: Adresse externe du VPN sur le VPS, pour le joindre.
PersistentKeepalive: Intervalle de temps en secondes entre deux paquets de keepalive. Pour maintenir la connexion en cas d’inactivité.
Test de connexion
Depuis le poste de travail (ici sous Linux), on va lancer le service Wireguard.
sudo wg-quick up /etc/wireguard/wg0.conf
Puis on va pinger le VPS via le tunnel VPN.
ping -c 3 10.0.0.1
Depuis le VPS, on va pinger le poste de travail via le tunnel VPN.
ping -c 3 10.0.0.100
On peut vérifier l’état du tunnel WireGuard avec la commande suivante.
sudo wg show
Autre clients Wireguard
Il existe d’autres clients wireguard sous Windows, Mac, iOS et Android. Ils fonctionnent de la même manière, bien souvent, il faut via l’interface utilisateur charger le fichier de configuration que nous venons de créer. Et c’est tout.
Troubleshooting
Vérifier que le port UDP est ouvert sur le VPS
Vérifier que le port UDP est ouvert coté hébergeur (firewall)
Vérifier que Wireguard est bien géré par le VPS:
lsmod | grep wireguard
Vérifier que
sysctl net.ipv4.ip_forward
renvoie 1Vérifier que l’interface réseau du VPS choisie est bien celle par défaut:
ip route | grep default
Vérifier si le traffic arrive au moins jusqu’au VPS pour s’il est bloqué par le pare-feu de l’hébergeur.
Sur le VPS:
tcpdump -i {{NETWORK_INTERFACE}} udp port {{PORT}}
Sur le poste de travail:
echo "test" | nc -uv {{IP_VPS}} {{PORT}}
Si une ligne apparait coté VPS c’est que le traffic arrive au moins jusqu’au VPS, et donc le problème est sur la configuration de wireguard, pas sur le réseau.
Vérifier d’éventuelles coquilles dans la copie des clés publiques, privées et partagées. (Ca arrive même aux meilleurs…)
Vérifier que le port {{PORT}} est ouvert sur le VPS.
ss -ulpn | grep {{PORT}}
Vérifier que iptables est installé sur le VPS, et actif
iptables -L
Vérifier que le mode MASQUERADE est bien présent lorsque wireguard est allumé
iptables -t nat -L -n -v | grep MASQUERADE
Vérifier que Wireguard est bien allumé coté poste de travail car si la configuration est incorrecte, il se déconnecte automatiquement.
Conclusion
Vous avez mis en place un tunnel WireGuard minimaliste mais robuste, puis restreint l’accès aux services critiques du VPS à travers l’interface VPN.
Ce modèle:
- réduit drastiquement la surface d’exposition sur Internet,
- reste performant grâce à WireGuard et sa configuration épurée.
Étapes suivantes possibles:
- Ajouter d’autres pairs (10.0.0.3/32, 10.0.0.4/32, etc.).
- Étendre au double-stack IPv6 si nécessaire.
- Automatiser les déploiements via Ansible/Terraform et gabarits de configuration.
- Pour des clients mobiles, générer des profils dédiés et, si besoin, des QR codes adaptés.
Avec ce socle, votre VPS n’expose plus que le port UDP du VPN; tout le reste passe par le tunnel chiffré, ce qui élève significativement le niveau de sécurité opérationnelle.