Sécuriser un MySQL en cloud public avec Wireguard

Sécuriser un MySQL en cloud public avec Wireguard

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.

Partager :