Sécurisez votre WordPress avec Fail2ban

I. Présentation du plugin Fail2ban

Comme je l'avais annoncé dans mon dernier cours Fail2Ban sur la création de filtres et d'actions personnalisés, nous allons maintenant aborder l'intégration de Fail2Ban dans WordPress, nous utiliserons pour cela un plugin prévu à cet effet. Pour suivre ce cours, vous aurez besoin :

  • D'un WordPress installé et fonctionnel
  • D'avoir la main sur votre OS, notamment pour la gestion de Fail2ban (vous n'aurez pas assez de droits si vous vous situés sur un serveur web mutualisé par exemple)
  • D'avoir un Fail2ban installé et fonctionnel (voir mon cours Premiers pas avec Fail2ban)

Pour expliquer le fonctionnement de cette intégration de Fail2ban dans WordPress, il faut savoir que nous allons donc utiliser un plugin écrit par  "invisnet" sur la plate-forme plugin de WordPress (Voici l'URL du plugin : WordPress Fail2ban). Ce plugin intègre donc du code PHP dans le code WordPress qui va faire en sorte d'écrire une ligne de log dans les journaux d'événement Linux (plus précisément /var/log/auth.log) à chaque fois qu'une authentification sera effectuée (succès comme échec). Sachant que Fail2ban est un Log-Based IDS/IPS (Système de détection/Prévention d'intrusion basé sur les journaux d'évènement), on pourra se servir de ces lignes de logs pour faire travailler notre prison (jail) Fail2ban spécifique à WordPress.

Versions utilisées :

  • WordPress 4.0.1
  • Fail2ban v0.8.6

A nos claviers ! 🙂

II. Installation du plugin WP_Fail2ban

La première chose à faire est bien sûr l'installation du plugin qui permet l'intégration du code nécessaire dans WordPress, on va pour cela passer par l'ajout d'extension sur BackOffice de notre cher WordPress :

fail2ban-wordpress-01

On va donc aller dans notre BackOffice WordPress dans "Extensions" puis "Ajouter". On va ensuite saisir "Fail2ban" dans l'espace de recherche puis valider. Parmi les plugin proposés, on trouvera "WP fail2ban" sur lequel on sélectionnera "Installer Maintenant". Notre plugin va alors s'installer comme un plugin standard de WordPress, jusque là, rien d'insurmontable 🙂

fail2ban-wordpress-02

Il faut savoir qu'aucune configuration spécifique n'est à faire du côté WordPress mise à part l'installation du plugin la suite de la procédure portera donc du côté de Fail2ban.

III. Intégration du filtre WordPress dans Fail2ban

Passons du côté de la configuration Fail2ban, le plugin WordPress WP-Fail2ban comporte un nouveau filtre pour notre Fail2ban, on va le trouver dans le répertoire du plugin dans WordPress chemin_wordpress/wp-content/plugins/wp-fail2ban :

fail2ban-wordpress-03

On va donc tout simplement récupérer ce nouveau filtre pour le mettre au bon endroit de la configuration Fail2ban, à savoir le dossier /etc/fail2ban/filter.d qui contient tous les filtres utilisables dans les prisons (jail) Fail2ban :

cp  chemin_wordpress/wp-content/plugins/wp-fail2ban/wordpress.conf /etc/fail2ban/filter.d/

Pour les curieux, on pourra aller ouvrir ce filtre pour comprendre comment il détectera les événements qui nous intéressent, à savoir la détection des tentatives d'authentification WordPress. On remarque alors surtout le failregex, champ dans lequel on spécifie l’expression régulière qui nous servira à filtrer ce que l'on veut surveiller :

fail2ban-wordpress-06

On remarque donc que plusieurs types de message de log peuvent servir dans ce filtre, nous verrons en détails leur différences un peu plus tard.

Nous venons donc d'ajouter un nouveau filtre à notre Fail2ban, cela vous rappellera sans doute les manipulations faites dans le cours précédent, il nous faut maintenant l'utiliser dans une jail.

IV. Création d'une jail WordPress

Une fois que nous avons le filtre permettant de surveiller ce qui nous intéresse, à savoir les erreurs d'authentifications dans WordPress, il nous faut maintenant créer une nouvelle jail (prison) dans Fail2ban. Un début de jail est donné sur la page WordPress du plugin mais celle-ci n'est pas complète. On commence par se rendre dans le fichier de configuration des jails Fail2ban, /etc/fail2ban/jail.conf

On va ajouter à la suite des lignes suivantes :

#
# JAILS
#

La configuration de notre nouvelle prison :

[wordpress]

enabled = true
port = http, https
filter = wordpress
maxretry = 3
banaction = iptables-multiport
logpath = /var/log/auth.log

Pour détailler un peu cette configuration, même si vous devez déjà être à l'aise avec la création de jail si vous avez bien suivi les cours précédents sur Fail2ban 😉 :

  • On commence par spécifier que cette prison va être active avec "enabled = true" puis on indique les ports sur lesquels les flux produisant ces logs sont susceptibles d'arriver,  à savoir les ports HTTP (80) et HTTPS (443), cela est utile notamment pour Fail2ban lorsqu'il manipule le bannissement des IP suspectes avec iptables.
  • On indique ensuite le filtre à utiliser, à savoir notre nouveau filtre "wordpress.conf" et le nombre d'essais permis, au delà de ce nombre d'essai, l'IP sera bannie.
  • On va ensuite indiquer l'action de ban, j'utilise ici une action présente par défaut "iptables-multuiport" qui permet le bannissement via l'IP source part iptables et on fini par spécifier le fichier de logs dans lesquels les logs susceptibles de nous intéresser seront écrit, à savoir /var/log/auth.log pour le plugin WP Fail2ban.

On va ensuite redémarrer Fail2ban pour que ces changements soient effectifs :

service fail2ban restart

On pourra ensuite faire quelques tests pour vérifier le bon fonctionnement de notre protection.

Note : Outre les tentatives infructueuses d'authentification, WP Fail2ban peut également surveiller les pingbacks ou les tentatives d'énumération des utilisateurs. Pour le premier cas, il faut ajouter cette ligne dans le fichier "wp-config.php "define('WP_FAIL2BAN_LOG_PINGBACKS',true);" . Pour les tentatives d'énumération des utilisateurs, il faut y ajouter cette ligne : "define('WP_FAIL2BAN_BLOCK_USER_ENUMERATION',true);". Cela permettra l'inscription des lignes de logs dans le fichier /var/log/auth.log

V. Test de la sécurité WordPress avec Fail2ban

Pour tester notre protection, rien de plus simple. Il nous suffit d'effectuer plusieurs authentifications ratées sur notre page de login WordPress.

Note : Attention, s'il s'agit d'un serveur distant sur lequel vous n'avez un accès que par Internet. L'action de bannissement que nous utilisons va en effet bannir l'IP source sur tous les ports, pas juste sur le port 80. Pour information, le temps de bannissement par défaut est de 10 minutes.

Une fois nos tentatives effectuées, on pourra ouvrir un terminal et effectuer la commande montrant le statut de notre prison Fail2ban "wordpress" :

fail2ban-client status wordpress

Voici ce que l'on pourra voir si notre IP a bien été bannie  :

fail2ban-wordpress-05

On voit donc qu'en ce moment, une IP est bannit et qu'il s'agit de l'IP "192.168.1.39". Dans le fichier /var/log/auth.log, on pourra voir notre tentative d'authentification :

fail2ban-wordpress-04

Ce sont précisément ces lignes de logs que le filtre Fail2ban "wordpress" a remarqué et il a alors déclenché l'action de bannissement de l'IP indiquée dans les logs.

C'est tout pour ce cours, nous avons donc vu comment protéger un site web WordPress d'un trop grand nombre de tentative d'authentification via un plugin permettant l'intégration à Fail2ban. N'hésitez pas à partager vos avis dans les commentaires ou à poser des questions sur notre forum ! 🙂

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Mickael Dorigny

Co-fondateur d'IT-Connect.fr. Auditeur/Pentester chez Orange Cyberdéfense.

Nombre de posts de cet auteur : 521.Voir tous les posts

One thought on “Sécurisez votre WordPress avec Fail2ban

  • telle quelle ca ne fonctionne pas. après avoir redémarré fail2ban, dans fail2ban.log j’ai :

    2015-06-02 10:03:59,030 fail2ban.jail   : INFO   Jail 'wordpress' started
    2015-06-02 10:03:59,038 fail2ban.actions.action: ERROR  iptables -N fail2ban-wordpress
    iptables -A fail2ban-wordpress -j RETURN
    iptables -I INPUT -p tcp -m multiport --dports http, https -j fail2ban-wordpress returned 200
    
    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.