Sécuriser un serveur MySQL avec iptables

quand on a plusieurs serveurs avec un mysql sur chacun, on aimerait parfois avoir un seul phpmyadmin dans lequel tous les serveurs mysql remontent, la solution est très simple, il suffit d’aller dans /etc/mysql/my.cnf et de commenter la ligne :

bind-address           = 127.0.0.1

en ajoutant un # devant.

ça s’applique aussi quand on a un seul serveur mysql accessible par plusieurs serveurs web par exemple.

en faisant cela, on vient d’autoriser les connexions au serveur depuis… partout ! (alors que par défaut il ne les accepte que depuis localhost) ce qui va nous permettre d’avoir un phpmyadmin unique pour pleins de serveurs mysql.

le problème, c’est qu’en terme de sécurité, la règle est simple, « Je ferme tout, puis j’ouvre ce dont j’ai besoin »
ici le besoin est d’ouvrir l’accès à Mysql depuis le serveur qui héberge phpmyadmin, or, avec notre modification, on vient d’ouvrir l’accès à tout le monde (encore faut-il avoir des login/password valides pour se connecter, mais vaut mieux ne pas tenter le diable^^).

pour remédier au problème, on va avoir recours au firewall, sous debain (et linux en général) c’est iptables

on va explicitement permettre l’accès à notre mysql depuis le serveur hébergeant phpmyadmin, et… le refuser à tout le reste

iptables -A INPUT -p tcp -s IP_DU_SERVEUR_PHPMYADMIN --dport 3306 -j ACCEPT
iptables -A INPUT -p tcp --dport 3306 -j DROP

et voilà, en 2 lignes c’est fait.
la première autorise le serveur qui héberge phpmyadmin, la 2ème ferme tout.

il est à noter que ces règles seront perdues si le serveur redémarre, donc, si redémarrage, il faudra les retaper, ou sinon les mettre dans un script exécuté au démarrage, comment faire ? c’est le sujet d’un prochain post :)

Share

Iptables – supprimer une règle spécifique

Si comme moi, vous utilisez fail2ban ce qui est une très bonne chose, et que comme moi vous avez oublié de lui dire d’ignorer votre IP ce qui est une mauvaise chose et que par malheur vous vous plantez X fois (chez moi au bout du 2eme fail en 2 heures ==> ban pendant 10 jours !)

pour commencer il faut trouver une autre porte d’entrée au serveur (une autre adresse IP)

en suite le but est de supprimer la règle concernant votre IP sans devoir toucher aux autres règles voici comment faire :

iptables -L --line-numbers

ce qui donne (entre autre) :

Chain fail2ban-ssh (1 references)
num  target     prot opt source               destination
1    DROP       all  --  kol-static-36-240-16-61.direct.net.in  anywhere
2    DROP       all  --  unknown-host.yaltanet.com.ua  anywhere
3    RETURN     all  --  anywhere             anywhere

là on vois qu’il y a 2 ip bannies, il faut repérer le numéro de ligne de cette qu’on veut supprimer (ce qui revient à autoriser l’ip a se connecter au serveur)

iptables -D fail2ban-ssh X

fail2ban-ssh : le nom de la chain créée par fail2ban pour le ssh
X : le #numéro de ligne qui nous intéresse

Share