Magazine High tech

Error establishing a database connection

Publié le 22 juin 2016 par Borntobeonline

Si vous arrivez ici car vous recherchez la cause de ce message " Error establishing a database connection " qui s'affiche lorsque vous tentez d'accéder à un site web, je vais ici vous en indiquer les causes et une façon de remédier au problème.

A première vue, le process mysql qui permet de faire fonctionner la base de donnée s'est arrété. Tentons de comprendre pourquoi.

Tapez " dmesg " dans l'invité de commande de votre serveur

[4747880.173192] Out of memory: Kill process 6898 (apache2) score 102 or sacrifice child
[4747880.176918] Killed process 6898 (apache2) total-vm:319164kB, anon-rss:61624kB, file-rss:41932kB
[4747881.542885] init: mysql main process (6526) terminated with status 1
[4747881.542913] init: mysql main process ended, respawning
[4747881.577925] type=1400 audit(1466221659.162:47): apparmor="STATUS" operation="profile_replace" profile="unconfined" name="/usr/sbin/mysqld" pid=6963 comm="apparmor_parser"
[4747881.692184] init:mysql main process (6975) terminated with status 1
[4747881.692197] init:mysql main process ended, respawning
[4747882.677913] init:mysql post-start process (6976) terminated with status 1
[4747882.704025] type=1400 audit(1466221660.286:48): apparmor="STATUS" operation="profile_replace" profile="unconfined" name="/usr/sbin/mysqld" pid=6999 comm="apparmor_parser"
[4747882.988167] init:mysql main process (7011) terminated with status 1
[4747882.988183] init: mysql respawning too fast, stopped

Relancer le serveur mysql avec la commande " service mysql start " fera repartir votre site web et corrigera le problème... temporairement. Car en y regardant de plus près, on trouve les causes du problème dans les logs apache :

Tapez " grep xmlrpc /var/log/apache2/access.log "


63.251.225.206 - - [20/Jun/2016:11:17:34 -0400] "POST /xmlrpc.php HTTP/1.0" 200 820 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)"
63.251.225.206 - - [20/Jun/2016:11:17:34 -0400] "POST /xmlrpc.php HTTP/1.0" 200 820 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)"
63.251.225.206 - - [20/Jun/2016:11:17:36 -0400] "POST /xmlrpc.php HTTP/1.0" 200 820 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)"
63.251.225.206 - - [20/Jun/2016:11:17:36 -0400] "POST /xmlrpc.php HTTP/1.0" 200 820 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)"
63.251.225.207 - - [20/Jun/2016:11:17:41 -0400] "POST /xmlrpc.php HTTP/1.0" 200 820 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)"
63.251.225.207 - - [20/Jun/2016:11:17:41 -0400] "POST /xmlrpc.php HTTP/1.0" 200 820 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)"
63.251.225.207 - - [20/Jun/2016:11:17:43 -0400] "POST /xmlrpc.php HTTP/1.0" 200 820 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)"
63.251.225.207 - - [20/Jun/2016:11:17:43 -0400] "POST /xmlrpc.php HTTP/1.0" 200 820 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)"

Tout un tas de requêtes XMLRPC, saturant la mémoire de votre serveur mettant ainsi en route les systèmes de protection du kernel : kill le process qui consomme de façon excessive !

Il s'agit donc d'une attaque de type DOS. Voyons maintenant un moyen efficace de se protéger contre cette attaque

Installation et configuration de Fail2Ban

Fail2ban est un outil très puissant vous permettant de déclencher des actions précises en s'appuyant sur les fichiers de logs de vos différents outils (ssh, apache, etc)

Dans notre cas, nous devons créer un nouveau filtre pour nous protéger de cette attaque.

En premier lieu, installez fail2ban : Tapez " sudo apt-get install fail2ban"
Créons ensuite un filtre apache-xmlrpc : Tapez " vim /etc/fail2ban/filter.d/apache-xmlrpc.conf "

Ajoutez ensuite la configuration suivante qui vous permet de détecter ce type de requêtes XMLRPC grâce à l'expression régulière suivante :

[Definition] failregex = ^<HOST>.*\"POST /xmlrpc.php HTTP/1.0
ignoreregex =

Enregistrez et quittez en appuyant sur ECHAP+:wq + ENTREE

Ensuite, nous allons définir les actions à prendre lorsque les conditions précédentes sont rencontrées :

[apache-xmlrpc]

enabled = true
port = http,https
filter = apache-xmlrpc
logpath = /var/log/apache2/access.log
maxretry = 3
bantime = 240000

Enregistrez et quittez en appuyant sur ECHAP+:wq + ENTREE

Cette configuration indique donc à Fail2ban quel fichier de log surveiller, et quelles actions entreprendre lorsque un accès XMLRPC est détecté dans le fichier de log apache. Ici, au bout de 3 tentatives de la même adresse IP, nous bannissons l'adresse IP pendant 240.000 secondes (66 heures)

Relancez enfin fail2ban afin de prendre en compte cette nouvelle configuration : " service fail2ban restart "

Constatons le resultat quelques jours plus tard dans les logs de fail2ban, plus de problèmes de apache2 ou mysql qui crashent !


2016-06-20 01:31:41,361 fail2ban.jail : INFO Jail 'apache-xmlrpc' stopped
2016-06-20 01:31:42,842 fail2ban.jail : INFO Creating new jail 'apache-xmlrpc'
2016-06-20 01:31:42,843 fail2ban.jail : INFO Jail 'apache-xmlrpc' uses pyinotify
2016-06-20 01:31:42,859 fail2ban.jail : INFO Jail 'apache-xmlrpc' started
2016-06-20 11:17:38,062 fail2ban.actions: WARNING [apache-xmlrpc] Ban 63.251.225.206
2016-06-20 11:17:45,076 fail2ban.actions: WARNING [apache-xmlrpc] Ban 63.251.225.207
2016-06-20 11:27:10,390 fail2ban.actions: WARNING [apache-xmlrpc] Ban 128.199.230.229
2016-06-20 11:27:11,406 fail2ban.actions: WARNING [apache-xmlrpc] Ban 107.170.112.47
2016-06-20 11:27:13,419 fail2ban.actions: WARNING [apache-xmlrpc] Ban 52.172.157.148
2016-06-21 14:49:34,250 fail2ban.actions: WARNING [apache-xmlrpc] Ban 162.243.73.135
2016-06-21 15:32:37,567 fail2ban.actions: WARNING [apache-xmlrpc] Ban 46.101.238.216
2016-06-21 15:33:01,603 fail2ban.actions: WARNING [apache-xmlrpc] Ban 104.236.7.133

Et pour cause ! L'attaque a continué à partir d'autres adresses IP, toutes bannies, mais maintenant votre serveur est paré contre ce genre d'attaques !


Retour à La Une de Logo Paperblog

A propos de l’auteur


Borntobeonline 60 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte