Notre page d'accueil sur la programmation d'un serveur VPN évoque le vieux matériel Linux comme plateforme cible pour un serveur maison. Ce guide détaille concrètement comment installer et durcir un serveur VPN sur une machine Linux générique, sans dépendre du matériel spécifique d'un Raspberry Pi.
Sur une distribution Linux classique (Debian, Ubuntu, ou une distribution serveur équivalente), deux options dominent. OpenVPN reste la référence historique, disponible dans les dépôts de la plupart des distributions et éprouvé depuis plus de vingt ans. WireGuard, plus récent, repose sur une base de code d'environ 4 000 lignes contre plusieurs dizaines de milliers pour OpenVPN, et sur des primitives cryptographiques modernes (Curve25519, ChaCha20-Poly1305), ce qui se traduit par une charge processeur réduite et une négociation de connexion quasi instantanée. Sur du matériel ancien à ressources limitées, cette différence de performance est particulièrement perceptible.
Installer le paquet WireGuard depuis les dépôts officiels :
sudo apt update && sudo apt install wireguard
Générer la paire de clés privée et publique du serveur :
wg genkey | tee privatekey | wg pubkey > publickey
Créer le fichier de configuration de l'interface, généralement /etc/wireguard/wg0.conf, en y renseignant la clé privée du serveur, l'adresse IP interne du tunnel et le port d'écoute (le port UDP 51820 est la valeur par défaut, mais peut être changé).
Activer le transfert de paquets IP, indispensable pour que le serveur relaie le trafic des clients vers Internet :
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf sudo sysctl -p
Démarrer l'interface et l'activer au démarrage via systemd :
sudo systemctl enable --now wg-quick@wg0
Un serveur VPN exposé sur Internet doit restreindre strictement les ports ouverts au strict nécessaire : le port du VPN lui-même, et éventuellement le port SSH pour l'administration à distance, idéalement changé de son port par défaut et restreint par adresse IP source lorsque c'est possible. Sur les distributions basées sur Debian, ufw simplifie cette configuration :
sudo ufw allow 51820/udp sudo ufw allow OpenSSH sudo ufw enable
Sur des distributions plus orientées serveur, nftables ou iptables directement offrent un contrôle plus fin, notamment pour configurer le masquage d'adresse (NAT) nécessaire au relais du trafic des clients :
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Le serveur VPN lui-même devient une cible de choix une fois exposé publiquement. Désactiver l'authentification par mot de passe SSH au profit d'une authentification par clé, désactiver la connexion directe du compte root, et installer un outil de bannissement automatique des tentatives de connexion répétées (comme fail2ban) réduisent significativement la surface d'attaque, indépendamment de la robustesse du chiffrement VPN lui-même.
sudo apt install fail2ban sudo systemctl enable --now fail2ban
À la différence d'un service VPN commercial, dont l'éditeur applique les correctifs de sécurité à votre place, un serveur auto-hébergé transfère cette responsabilité à son opérateur. Activer les mises à jour de sécurité automatiques du système reste la mesure la plus simple pour limiter l'exposition aux vulnérabilités découvertes après la mise en service :
sudo apt install unattended-upgrades sudo dpkg-reconfigure --priority=low unattended-upgrades
Cette responsabilité s'étend également au logiciel VPN lui-même : une faille découverte dans OpenVPN ou WireGuard doit être corrigée par une mise à jour manuelle ou automatisée du paquet, sans attendre qu'un tiers s'en charge.
Une fois le serveur en service, un test d'adresse IP effectué depuis un appareil client connecté au VPN doit afficher l'adresse IP publique du serveur, et non celle de l'appareil client. Un test de fuite DNS confirme que les requêtes de résolution de noms de domaine passent bien par le tunnel plutôt que par le résolveur habituel du réseau du client. Ces deux vérifications, réalisables en quelques minutes via des outils en ligne dédiés, restent la meilleure garantie qu'une configuration fonctionne comme prévu, indépendamment de la documentation suivie pour la mettre en place.
Configurer un serveur VPN sur une machine Linux générique suit les mêmes principes que sur un Raspberry Pi, avec davantage de marge de manœuvre matérielle mais aussi davantage de responsabilité : pare-feu correctement configuré, accès administrateur durci, et mises à jour de sécurité appliquées régulièrement. Ces éléments, souvent négligés au profit de la seule configuration du tunnel VPN, déterminent en pratique la sécurité réelle du serveur mis en place.