Hushfort

Comment limiter les tentatives de connexion sur WordPress ?

Par Eureka Studio · Mis à jour le

En bref

WordPress laisse n’importe qui deviner des mots de passe indéfiniment. Pour limiter les tentatives de connexion, utilisez une extension qui compte les connexions échouées par IP sur une fenêtre de temps et bloque cette IP pendant un moment, par exemple 8 échecs en 5 minutes entraînent une attente de 15 minutes. Assurez-vous que les échecs de 2FA et de mots de passe d’application comptent aussi, et ajoutez votre propre IP à la liste d’autorisation.

Étapes

  1. 1Étape 1

    Voyez à quoi ressemblent des tentatives illimitées

    Sans limite, WordPress répond à chaque mauvais mot de passe par la même erreur, aussi souvent qu’on le lui demande, et le message par défaut confirme même que l’identifiant existe.

    Deux mauvais mots de passe saisis dans le formulaire de connexion WordPress ; à chaque fois, WordPress indique que le mot de passe de demo-admin est incorrect et laisse passer l’essai suivant
  2. 2Étape 2

    Activez les Limites de connexion et fixez les règles

    Dans WordPress, ouvrez Hushfort → Limites et restrictions et cochez Activer les limites de connexion. Par défaut : 8 tentatives échouées en 5 minutes, puis un blocage de 15 minutes ; après 4 blocages en 24 heures, le blocage dure 1 440 minutes. Cliquez sur Enregistrer les modifications.

    Onglet Limites et restrictions de Hushfort : limites de connexion activées, avec 8 tentatives échouées autorisées, une fenêtre de 5 minutes et une durée de blocage de 15 minutes
  3. 3Étape 3

    Autorisez votre propre IP et vérifiez la source de l’IP

    Plus bas, réglez Source de l’IP. « Automatique (en-têtes de proxy vérifiés uniquement) » convient à la plupart des sites, y compris ceux derrière Cloudflare. Ajoutez ensuite l’IP de votre bureau ou de votre domicile dans IP autorisées pour ne jamais vous bloquer vous-même, et enregistrez.

    Source de l’IP réglée sur Automatique (en-têtes de proxy vérifiés uniquement) et 203.0.113.10 ajoutée dans IP autorisées
  4. 4Étape 4

    Recevez un e-mail quand une IP est bloquée

    Activez E-mail d’alerte et indiquez une ou plusieurs adresses, séparées par des virgules. Cette option nécessite un SMTP fonctionnel sur le site ; sans lui, Hushfort laisse l’option désactivée et vous explique pourquoi.

    E-mail d’alerte activé avec deux adresses d’alerte saisies, puis enregistré
  5. 5Étape 5

    Regardez la limite fonctionner

    Après le nombre d’échecs autorisé, l’IP est bloquée au lieu d’obtenir un nouvel essai. L’Historique liste chaque blocage actif avec l’identifiant tenté, le nombre de tentatives et l’heure de fin du blocage, avec un bouton Débloquer.

    Écran Historique de Hushfort : blocages actifs pour trois adresses IP avec les identifiants tentés, 8 tentatives chacune et 15 minutes restantes, au-dessus de l’historique complet des tentatives échouées

Pourquoi c’est important

Une attaque par force brute n’est qu’une affaire de patience : essayer un mot de passe, se tromper, essayer le suivant. WordPress ne s’en formalise pas. Il répondra à mille mauvaises tentatives venant de la même adresse aussi poliment qu’à la première. Si un compte a un mot de passe faible ou réutilisé, ce n’est qu’une question de temps.

Une limite de connexion change l’équation. Si une IP ne peut faire qu’une poignée de tentatives avant de devoir attendre quinze minutes, deviner un mot de passe correct prend des années au lieu de quelques heures. Cela évite aussi à votre serveur d’afficher la page de connexion encore et encore pour un robot.

Ce qu’elle ne couvre pas à elle seule. Les attaquants qui disposent de milliers d’adresses IP peuvent envoyer quelques tentatives depuis chacune. C’est pourquoi une limite de connexion fonctionne mieux associée à la double authentification, qui rend un mot de passe deviné inutile sans le code.

Erreurs courantes

  • Ne compter que le formulaire de connexion. Les mots de passe peuvent aussi être testés via xmlrpc.php, via les mots de passe d’application de l’API REST, et à l’étape du code de double authentification. Si ces tentatives ne comptent pas dans la limite, les attaquants les utilisent tout simplement. Fermez aussi la connexion par XML-RPC ; voir comment désactiver XML-RPC sans risque.
  • Lire la mauvaise IP derrière un proxy. Si votre site est derrière Cloudflare et que l’extension lit l’adresse du proxy, un seul robot peut bloquer tous les visiteurs. Si elle fait au contraire aveuglément confiance à l’en-tête X-Forwarded-For, un robot peut inventer une nouvelle IP à chaque requête et n’être jamais compté. La règle sûre consiste à ne faire confiance aux en-têtes de proxy que lorsque la requête provient réellement du proxy.
  • Des blocages trop longs. Un blocage de 24 heures pour trois fautes de frappe pénalise votre propre équipe. Gardez un premier blocage court et allongez les blocages répétés.
  • Pas de liste d’autorisation. Ajoutez votre propre IP fixe pour qu’un mot de passe oublié ne vous bloque jamais.

Sans extension

WordPress dispose d’un hook, wp_login_failed, qui se déclenche après chaque connexion échouée. Vous pouvez compter les échecs avec un transient et refuser les connexions lorsque le compteur est trop élevé. Une version minimale pour une extension indispensable (must-use) (wp-content/mu-plugins/login-limit.php) :

<?php
add_action( 'wp_login_failed', function () {
    $key = 'll_' . md5( $_SERVER['REMOTE_ADDR'] );
    $n   = (int) get_transient( $key );
    set_transient( $key, $n + 1, 15 * MINUTE_IN_SECONDS );
} );

add_filter( 'authenticate', function ( $user ) {
    $key = 'll_' . md5( $_SERVER['REMOTE_ADDR'] );
    if ( (int) get_transient( $key ) >= 8 ) {
        return new WP_Error( 'too_many', 'Too many failed attempts. Try again later.' );
    }
    return $user;
}, 30 );

Cela fonctionne, mais soyons honnêtes sur ce qui manque : le code ne lit que REMOTE_ADDR, donc derrière un proxy il compte le proxy ; il ne compte pas les tentatives XML-RPC multicall comme des tentatives séparées ; il n’a ni liste d’autorisation, ni e-mail d’alerte, ni journal. Chacun de ces éléments représente du code supplémentaire à écrire et à maintenir.

Certains hébergeurs proposent aussi des outils au niveau du serveur, comme fail2ban qui surveille le journal d’accès. C’est solide si votre hébergeur s’en charge pour vous ; sur un hébergement mutualisé, vous ne pouvez généralement pas le mettre en place.

En cas de problème

  • Vous vous êtes bloqué vous-même. Attendez la fin du blocage, essayez depuis un autre réseau comme les données mobiles, ou demandez à un autre administrateur d’ajouter votre IP à la liste d’autorisation.
  • Tout le monde est bloqué en même temps. Votre site est probablement derrière un proxy et l’extension lit l’IP du proxy. Modifiez le réglage Source de l’IP.
  • Aucun blocage ne se produit jamais. Vérifiez si la source de l’IP fait confiance à un en-tête que les robots peuvent falsifier. Si chaque tentative affiche une « IP » différente, c’est la cause.

Pour tous les moyens de retrouver l’accès, consultez Bloqué après avoir changé l’URL de connexion.

Avec Hushfort

Les Limites de connexion font partie de Hushfort Pro, le module complémentaire qui s’installe par-dessus Hushfort Security, l’extension de sécurité WordPress gratuite.

La couche Limites de connexion de Hushfort compte les connexions échouées par IP (ou par IP et identifiant) sur une fenêtre de temps de votre choix, et bloque l’IP pendant une durée de votre choix. Des blocages répétés en 24 heures peuvent déclencher un blocage prolongé.

  • Les codes de double authentification erronés et les connexions échouées par mot de passe d’application comptent aussi : il n’existe donc pas de porte dérobée pour deviner.
  • Les en-têtes de proxy ne sont pris en compte que lorsque la requête provient réellement de Cloudflare ou d’un réseau privé.
  • Les e-mails d’alerte partent vers autant d’adresses que vous en indiquez.
  • Chaque tentative échouée ou bloquée apparaît dans un Historique filtrable.
  • La liste d’autorisation est partagée avec toutes les autres couches de Hushfort : vous ne vous ajoutez qu’une fois.

Désactiver Hushfort lève tous les blocages en cours.

Questions fréquentes

Combien de tentatives de connexion faut-il autoriser ?

Assez pour une personne qui se trompe quelques fois, assez peu pour rendre la devinette inutile. Quelque chose comme 5 à 10 échecs en quelques minutes, avec un blocage de 15 minutes, est un juste milieu raisonnable.

WordPress limite-t-il les tentatives de connexion par défaut ?

Non. Le cœur de WordPress accepte un nombre illimité de connexions échouées. Certains hébergeurs ajoutent une limite au niveau du serveur, renseignez-vous auprès du vôtre, mais vous ne pouvez pas compter dessus.

Une limite de connexion peut-elle me bloquer l’accès à mon propre site ?

Oui, si vous vous trompez sans cesse. Ajoutez votre propre IP à la liste d’autorisation, ou attendez la fin du blocage. Un autre administrateur peut aussi ajouter votre IP à la liste d’autorisation.

Limiter les tentatives de connexion suffit-il à stopper la force brute ?

Cela ralentit énormément la devinette, mais les attaquants disposant de nombreuses adresses IP peuvent répartir leurs tentatives. Combinez-la avec la double authentification, des mots de passe forts et la fermeture de la connexion par XML-RPC.

Pourquoi les blocages touchent-ils les mauvaises personnes derrière Cloudflare ?

Derrière un proxy, chaque visiteur peut sembler venir de l’IP du proxy. Réglez la source de l’IP pour que l’extension fasse confiance à l’en-tête contenant l’IP réelle, et uniquement lorsque la requête provient réellement de ce proxy.

Signaler un bug ou demander une fonctionnalité

Votre message arrive directement à l’équipe qui développe Hushfort.

De quoi s’agit-il ?

Utilisé uniquement pour vous répondre.

Nous utilisons ces informations uniquement pour vous répondre. Confidentialité