Bloquer les attaques « Force Brut »
Bloquer efficacement les attaques par force brute (focus WordPress)
Objectif: empêcher les tentatives massives de connexion (wp-login.php, XML-RPC, API) tout en gardant l’accès normal pour vous et vos utilisateurs.
Priorités essentielles (rapide et très efficace)
- Activez l’authentification à deux facteurs (2FA)
- Plugins fiables: Two‑Factor (officiel), Wordfence, WP Cerber, iThemes Security.
- Exigez 2FA au moins pour les administrateurs/éditeurs.
- Limitez les tentatives de connexion (+ délai)
- Plugins simples: Limit Login Attempts Reloaded, WP Cerber, Wordfence.
- Paramètres conseillés: 3–5 essais, blocage progressif (15 min → 1 h → 24 h), journalisation et alertes email.
- Protégez/filtrez XML‑RPC
- Si vous n’en avez pas besoin: bloquez-le.
- Apache (.htaccess):
<Files "xmlrpc.php"> Require all denied </Files> - Nginx:
location = /xmlrpc.php { return 403; }
- Apache (.htaccess):
- Si vous utilisez Jetpack/applis mobiles: limitez par IP/WAF ou activez uniquement les méthodes nécessaires via plugin sécurité.
- Mots de passe forts + rôle minimal
- Exigez >12 caractères, uniques; supprimez les comptes inactifs; pas d’admin “admin”.
Renforcement côté serveur/Réseau
- WAF/CDN (recommandé): Cloudflare, Sucuri, Wordfence Care/Defender WAF
- Règles typiques Cloudflare (Expression Editor):
- Bloquer bursts sur login:
- Create rate limiting: URI equals /wp-login.php OR /?rest_route=/jwt-auth/v1/token, 10 req / 1 min → Block/JS Challenge.
- Défi sur /wp-admin/ pour pays spécifiques/bots connus.
- Bloquer bursts sur login:
- Activez un CAPTCHA/Turnstile sur le formulaire de connexion si compatible.
- Règles typiques Cloudflare (Expression Editor):
- Limitation de débit (server)
- Nginx:
# Définir une zone de taux limit_req_zone $binary_remote_addr zone=logins:10m rate=10r/m; location = /wp-login.php { limit_req zone=logins burst=10 nodelay; include fastcgi_params; # votre config PHP # ... } location = /xmlrpc.php { limit_req zone=logins burst=5 nodelay; return 403; } - Apache: mod_evasive ou mod_security avec règles OWASP CRS.
- Nginx:
- Liste blanche IP (si équipe restreinte)
- Nginx:
location ^~ /wp-admin/ { allow 203.0.113.25; # votre IP deny all; } location = /wp-admin/admin-ajax.php { allow all; } - Apache:
<Directory "/chemin/site/wp-admin"> Require ip 203.0.113.25 </Directory>
- Nginx:
- Fail2ban (serveurs dédiés/VPS)
- Jail type “wordpress-hard” ou jails pour Nginx/Apache basés sur 401/403 de /wp-login.php et xmlrpc.
- Action: bannir IP 10–60 min via firewall (nftables/iptables).
Mesures complémentaires utiles
- Changer l’URL de connexion avec WPS Hide Login (déplace la cible des bots; à combiner avec 2FA/limitation de taux).
- Empêcher l’énumération des utilisateurs:
- Bloquer /?author=1 et les redirections vers /author/:
- Nginx:
if ($args ~* "author=\d+") { return 403; } - Apache:
RewriteCond %{QUERY_STRING} author=\d+ RewriteRule ^ - [F]
- Nginx:
- Bloquer /?author=1 et les redirections vers /author/:
- Captcha/ReCAPTCHA/Turnstile sur login et reset password.
- Restreindre l’API REST pour les données sensibles (exposer les posts mais pas la liste des users).
- Journaliser et surveiller: activer logs de sécurité, alertes sur multiples échecs/connexions depuis pays inhabituels.
Check‑list d’implémentation (plan en 60–90 minutes)
- Installer et configurer un plugin sécurité complet (Wordfence, Cerber ou iThemes): 2FA, rate limit, XML‑RPC, notifications.
- Mettre une règle WAF/CDN de rate limiting sur /wp-login.php et /xmlrpc.php.
- Ajouter limit_req (Nginx) ou mod_evasive (Apache).
- Désactiver l’énumération d’utilisateurs + activer CAPTCHA.
- Vérifier mots de passe/roles et supprimer comptes dormants.
- Tester: 6 tentatives erronées → blocage? 2FA fonctionne? XML‑RPC bloqué/autorisé selon besoin?
