Je souhaite pouvoir accéder à une base mysql hébergée sur un serveur distant depuis un pc local. Ce serveur distant est protégé par un firewall (iptables).

Comment configurer mysql et iptables afin de pouvoir accéder à cette base mysql depuis mon poste local ?

Dans la suite de ce billet,

  • 10.10.10.10 correspond à l’adresse IP du pc local
  • 12.12.12.12 coresspond à l’adresse IP du serveur distant

Par défaut, sous debian, mysql n’écoute que sur l’interface locale (localhost). Il est donc nécessaire de configurer mysql afin qu’il écoute sur l’ensemble des interfaces. Pour se faire, il est nécessaire dans le fichier /etc/my.cnf de commenter la ligne suivante :


bind-address           = 127.0.0.1

puis redémarrer mysql

Pour vérifier que le paramétrage a bien été pris en compte, vous pouvez exécuter sur le serveur distant la commande suivante :


# netstat -lnt | grep 3306
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN

Si votre serveur dispose d’un firewall (iptables) bloquant les ports non utiles, il est nécessaire d’ouvrir les ports associés à mysql pour votre PC local :


iptables -A INPUT -s 10.10.10.10 -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

avec 10.10.10.10 correspondant à l’IP depuis laquelle vous souhaitez accéder à mysql

Pour vérifier que le paramétrage est bien pris en compte, vous pouvez utiliser nmap :


nmap -v -A 12.12.12.12 -p 3306

Dès lors si tout s’est bien passé, vous devriez pouvoir vous connecter à mysql :


mysql -ulogin -ppassword -h 12.12.12.12