
Sécuriser un MySQL en cloud public avec Wireguard
- Charles Fleury
- Sécurité , Base de données
- 27 août 2025
Sommaire
La migration des bases de données vers des environnements cloud publics offre flexibilité et scalabilité, mais expose également les services à de nouvelles menaces.
MySQL, largement utilisé dans des contextes critiques, peut devenir une cible privilégiée si son accès n’est pas correctement protégé. Dans un environnement où les communications transitent par Internet, il est essentiel de mettre en place des mécanismes garantissant la confidentialité, l’intégrité et l’authentification des échanges.
WireGuard, un protocole VPN moderne, léger et performant, se distingue par sa simplicité de configuration et sa sécurité robuste basée sur des algorithmes cryptographiques récents. Combiné à une configuration réseau appropriée, il permet d’établir un tunnel chiffré entre le serveur MySQL et ses clients, réduisant considérablement la surface d’attaque (notamment en masquant le port exposé) et éliminant la dépendance aux seuls mécanismes d’authentification de MySQL.
Pré-requis
Un VPS en cloud public dans un réseau Wireguard (voir cet article)
Une distribution Linux (je me base sur Ubuntu)
Installation de MySQL
L’installation de MySQL est simple et rapide sur Ubuntu, car le paquet est directement disponible dans les dépôts officiels.
sudo apt install mysql-server
Configuration de MySQL sur le VPS
Par défaut MySQL n’écoute que le localhost. Il faut modifier la variable bind-address
dans la configuration:
En général cette variable se trouve dans /etc/mysql/mysql.conf.d/mysqld.cnf
.
Dans la section [mysqld], remplacez :
bind-address = 127.0.0.1
par :
bind-address = 0.0.0.0
C’est tout. Cela permet à MySQL d’écouter sur toutes les interfaces réseau.
On redémarre le service MySQL pour appliquer les modifications.
systemctl restart mysql.service
ℹ️ MySQL ne permet pas de mettre un masque réseau directement dans bind-address. Il faut donc écouter sur toutes les interfaces (0.0.0.0) et gérer la restriction par les utilisateurs et le firewall.
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 3306 en TCP dans le tunnel VPN, C’est le port par défaut de MySQL.
Inutile de le changer car il n’est de toute façon pas exposé à Internet.
Il est derrière le port Wireguard.
sudo ufw allow in on wg0 to any port 3306 proto tcp
sudo ufw reload
Configuration de l’utilisateur MySQL
Afin de limiter les connexions aux IPs qui proviennent du réseau Wireguard on va utiliser le masque d’IP sur l’utilisateur MySQL.
-- Création de l'utilisateur limité à la plage 10.0.0.x
CREATE USER 'monuser'@'10.0.0.%' IDENTIFIED BY 'motdepassefort';
-- Attribution des droits nécessaires (adapter la base et les privilèges)
GRANT ALL PRIVILEGES ON ma_base.* TO 'monuser'@'10.0.0.%';
-- Appliquer les changements
FLUSH PRIVILEGES;
Test de connexion
Depuis le poste de travail (ici sous Linux), on va lancer le service Wireguard.
mysql -h {{IP_WIREGUARD_MYSQL}} -u monuser -p -e "SELECT VERSION();"
Cela devrait afficher la version de MySQL.
Troubleshooting
Vérifier que l’ip est joignable
Sur le poste de travail :
ping {{IP_WIREGUARD_MYSQL}}
Vérifier que le port est ouvert
Sur le poste de travail :
telnet {{IP_WIREGUARD_MYSQL}} 3306
Vérifier que le service MySQL est allumé
Sur la machine distante :
systemctl status mysql.service
Conclusion
En combinant un service MySQL correctement configuré avec un tunnel WireGuard, on obtient une solution simple et robuste :
le trafic est chiffré de bout en bout ;
le port MySQL n’est pas exposé publiquement ;
l’accès est restreint aux seules adresses du réseau VPN.
Cette approche réduit significativement la surface d’attaque et répond aux enjeux de confidentialité et d’intégrité des données dans un environnement cloud public. Elle reste par ailleurs flexible et extensible : de nouveaux clients peuvent être ajoutés facilement au réseau WireGuard, sans remise en cause de la sécurité globale.