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
Changer le hostname d’un serveur sous debian
ayant pris possession d'un petit kimsufi récemment je me suis dit qu'il serait bien de changer ksXXYYZZ par un hostname qui me parle un peu plus
, donc, si comme moi, un jour vous voulez changer le hostname d'un serveur, voici ce qu'il faut faire :
changer le ici mettant le nouveau hostname :
vim /etc/hostname |
ensuite ouvrez le fichier hosts et AJOUTER (dans le cas du kimsufi, il faut qu'il réponde toujours au nom ksXXYYZZ donc ne remplacez pas, mais ajouter) le nouveau hostname (en face des ip locales)
vi /etc/hosts |
ce qui donne (par exemple):
127.0.0.1 localhost.localdomain localhost WW.XX.YY.YY ksXXYYZZ.kimsufi.com monNouveauHostname |
rendre la modification effective :
/etc/init.d/hostname.sh start |
et c'est tout
, il faut se déconnecter/reconnecter pour voir le changement.
installer memcached sous debian lenny
avec ce post nous allons voir la procédure pour installer memcache sur une debian lenny afin de l'utiliser avec php.
Pour commencer installer memcached :
apt-get install memcached |
ensuite, installer l'extension php
pecl install memcache |
si l'installation échoue avec le message suivant :
downloading memcache-2.2.6.tgz ... Starting to download memcache-2.2.6.tgz (35,957 bytes) ..........done: 35,957 bytes 11 source files, building running: phpize sh: phpize: command not found ERROR: `phpize' failed |
Allez faire un tour ici : Installation de fileinfo on a déjà rencontré ce problème
Pour rappel, il faut faire un simple :
apt-get install php5-dev et retenter le : pecl install memcache |
il va surement vous poser une question, appuyez sur « entrée »
maintenant que memcache est correctement installer il faut l'activer en créant un fichier memcached.ini dans le dossier conf.d utilisé par le serveur (dans mon cas pour apache c'est : /etc/php5/apache2/conf.d) pour lighttpd par exemple c'est /etc/php5/cgi/conf.d) (cela évite de modifier les php.ini)
memcached.ini doit contenir :
extension=memcache.so |
pour s'assurer que l'extension est bien installée, créer un fichier php contenant :
phpinfo() |
et aller voir dedans, normalement vous devriez voir l'extension activée.

pour l'utilisation, rien de bien méchant, la doc php (http://php.net/manual/fr/book.memcache.php) est très bien faite
petit bonus :
pour vérifier que le service est bien lancé, faite :
netstat -latupen |grep memcached résultat : tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN 0 157533 5952/memcached |
Utiliser des paquets de différentes versions de debian
Aujourd'hui on va voir comment customiser les fichier source.list de debian afin de pouvoir installer des paquets de versions autres que la stable.
avant de commencer, il faut savoir que la version actuelle de debian (donc la version stable) est : lenny
la version qui nous intéresse est la testing ou bien squeeze (on pourrait s'intéresser à la sid (non stable) mais c'est à éviter)
pour plus d'infos sur ces versions : http://wiki.debian.org/DebianReleases
pour pouvoir installer des paquets de la squeeze sous lenny il faut éditer son fichier /etc/apt/sources.list en ajoutant :
deb http://ftp.fr.debian.org/debian squeeze main deb http://security.debian.org/ squeeze/updates main |
en gros dupliquer les lignes existantes en remplaçant lenny (ou stable) par squeeze (on pourrait ajouter non-free après main en cas de besoin ; pour installer jdk par exemple...)
maintenant notre debian est configurée pour aller chercher ces paquets dans la branche squeeze, cool, mais c'est un peu la cata quand même
en fait, on ne veut prendre dans squeeze que certains paquets, et par défaut on voudrait garder lenny quand même, pour cela il faut tout simplement le dire à la machine :
on édite le fichier /etc/apt/apt.conf (le créer si non existant)
on met dedans la ligne suivante :
APT::Default-Release "stable"; |
et maintenant un simple apt-get install va aller chercher les paquets au bon endroit (c'est à dire : lenny)
et si on veut installer un paquet de squeeze, on fait :
apt-get install --target-release squeeze MON-SUPPER-PAQUET-DE-SQUEEZE |
et le tour est joué
à l'heure actuelle lenny est la version stable, le jour où la stable change, il suffira d'adapter un peu tout ça.
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