WordPress est le CMS le plus utilisé au monde. Cette popularité attire l’attention de visiteurs malveillants qui peuvent générer du trafic non désiré.
De nombreux sites sous WordPress ne sont pas protégés contre les attaques dites DDOS (ou par déni de service) et particulièrement contre les attaques de type Brute-Force dirigées vers le fichier xmlrpc.php.

Cet article va vous donner les clés pour protéger votre site.


Qu’est-ce-que XML-RPC ?

WordPress utilise XML-RPC pour exécuter des commandes à distance. Par exemple les applications mobile dédiées à WordPress utilisent ce « protocole » pour communiquer avec votre site.
Le problème est que cette fonctionnalité peut-être exploitée pour générer des milliers de requêtes non sollicitées et ainsi saturer l’accès à votre site.
Plus grave encore, l’attaque peut prendre la forme d’un Brute-Force.

Reconnaître une attaque DDOS sur XML-RPC

En cas d’attaque dirigée vers le fichier xmlrpc.php, votre site sera ralenti, voir complètement inaccessible. C’est à ce moment là qu’il vous faut vérifier les « access log » de votre serveur.
Ces fichiers ou journaux de bord enregistrent toutes les connexions faites sur votre site. Y compris les attaques.

Le log qui nous intéresse est :
/var/log/apache2/other_vhosts_access.log

Il est accessible en SSH. Il vous faut chercher des entrées de ce type :
mon_site.com:80 193.201.225.21 – – [23/Jan/2016:14:42:24 -0500] « POST /xmlrpc.php HTTP/1.0 » 200 56990 « – » « -« 

Pour caractériser une attaque il faut trouver beaucoup d’entrées similaires. Cela peut varier de quelques dizaines, à quelques milliers. La commande suivante va vous permettre d’afficher toutes les requêtes effectuées sur le fichier xmlrpc.php :
cat /var/log/apache2/other_vhosts_access.log  | grep xmlrpc.php

Comment protéger son site WordPress ?

Jetpack

Jetpack est un plugin WordPress, qui vous permet entre autre de sécuriser l’accès de votre site.

jetpack

Une fois activé, les fonctions de protections sont automatiquement activées. Vous pouvez ajouter votre IP dans une liste blanche afin de ne pas être bloqué par le plugin.

Fail2ban

Fail2ban est un anti brute-force qui scan les fichiers logs de votre serveur à la recherche de mots-clés préalablement définis. Une fois le mot clé trouvé, il extrait du log l’IP de la personne qui s’est connectée et la bannit.

Si vous utilisez une formule VPS avec ISPconfig, fail2ban est déjà installé.fail2ban

Sinon vous pouvez l’installer grâce à la commande :
apt-get update && apt-get install fail2ban

Ensuite ajoutez la configuration suivante à la fin du fichier /etc/fail2ban/jail.conf :
[wordpress-xmlrpc]
enabled = true
filter = wordpress-xmlrpc
port = 80
logpath = /var/log/apache2/other_vhosts_access.log
bantime = 86400
maxretry = 4

Créez le fichier /etc/fail2ban/filter.d/wordpress-xmlrpc.conf qui va contenir l’expression régulière (ou filtre de mot clé) qui permet de retrouver l’erreur donnée plus haut :
# wordpress-xmlrpc.conf
[INCLUDES]
before = common.conf

[Definition]
_daemon = wordpress
failregex = .*:(80|443) <HOST> .*(GET|POST) .*/xmlrpc.php
ignoreregex =</HOST>

Finalement on redémarre le service :
/etc/init.d/fail2ban restart

Les IP’s bannies le seront au bout de 4 connexions (maxretry = 4) sur le fichier xmlrpc.conf et seront bannies 24 heures (bantime = 86400 secondes).

Bloquez le trafic vers le fichier xmlrpc.php

La dernière solution, consiste à bloquer tout le trafic à destination du fichier xmlrpc.php.
Dans la configuration de votre site :
/etc/apache2/sites-available/mon_site.com.vhost

Vous pouvez ajouter un bloc de ce genre (pour Apache 2.4, « dpkg -l apache2 » pour voir votre version) :
<VirtualHost>

<files xmlrpc.php>
Require all denied
</files>
</VirtualHost>

Et de ce genre pour les versions inférieures d’Apache :
<VirtualHost>

<files xmlrpc.php>
order allow,deny
deny from all
</files>
</VirtualHost>

Attention, dans cet exemple tout accès au fichier xmlrpc.php sera bloqué.

Redémarrez le service Apache pour activer les nouvelles directives :
/etc/init.d/fail2ban restart