Depuis plusieurs semaines, une attaque de grande envergure a lieu sur l’ensemble des blogs WordPress auto-hébergés. Cette attaque provient d’un botnet (réseau d’ordinateurs zombies), et il est donc très compliqué de bannir les dizaines de milliers d’IP différentes d’où viennent ces attaques (s’il ne s’agit pas de centaines de milliers d’IPs…)
La solution a ce problème réside en deux technologies : fail2ban et le plugin fail2ban pour WordPress. Pour le premier, je vous laisse le configurer (de nombreux tutoriels sont dispos sur Google).
La première chose à faire est de changer immédiatement le nom du compte “admin” de WordPress. Créez un autre compte (avec un login différent de “admin”, “adminadmin”, “administrator” ou “root”), et donnez lui les permissions super-administrateur. Puis désactivez ou effacez l’ancien compte ‘”admin”. Et pendant qu’on n’y est, pourquoi ne pas en profiter pour changer le mot de passe du nouveau compte super-administrateur ?
Ensuite, passons à WordPress lui-même. Le plugin fail2ban pour WordPress, sobrement intitulé wp-fail2ban est d’une simplicité enfantine et tient en 4 lignes de code. Il se contente d’afficher la réussite ou l’échec des authentifications sur votre ou vos blogs (WordPress multisite étant évidemment géré). Ces logs sont localisés dans le fichier /var/log/auth.log.
Ma première approche a été de mettre en place une solution générique en faisant en sorte que fail2ban bannisse l’adresse IP au bout de 3 tentatives infructueuses d’authentification. Le problème, c’est que le botnet a réagi et a changé de comportement : il n’essaye plus qu’une authentification par IP différente. Il va falloir donc être beaucoup plus méchant, et bannir à chaque tentative d’authentification qui aboutit sur un échec. Et ce, en limitant cette technique à certains “logins” WordPress plus particulièrement attaqués par ce botnet, afin de ne pas pénaliser les utilisateurs de vos blogs.
La mise en place va être très simple, et tient en 5 minutes chrono. Il faut commencer par installer et activer le plugin wp-fail2ban. Ensuite, nous allons créer un nouveau filtre fail2ban, ce qui consiste à mettre ceci dans le fichier /etc/fail2ban/filter.d/wordpress-admin.conf :
# Fail2Ban configuration file # Author: Arnaud Tanchoux (www.blog.tanchoux.fr) # Version : 0.2 # Date : 2013-05-24 [INCLUDES] before = common.conf [Definition] _daemon = wordpress failregex = ^%(__prefix_line)sAuthentication failure for admin from <HOST>$ ^%(__prefix_line)sAuthentication failure for administrator from <HOST>$ ^%(__prefix_line)sAuthentication failure for adminadmin from <HOST>$ ^%(__prefix_line)sAuthentication failure for root from <HOST>$ ignoreregex =
Une fois le filtre en place, il n’y a plus qu’à l’utiliser dans fail2ban en ajoutant dans le fichier /etc/fail2ban/jail.local :
[wordpress-admin] enabled = true port = http,https filter = wordpress-admin logpath = /var/log/auth.log maxretry = 1 # 1 an de ban bantime = 31622400
Et voilou, c’est tout. Ah si, il faut redémarrer le démon fail2ban bien sûr.
/etc/init.d/fail2ban restart
Attendez-vous à recevoir une pelletée de mails si vous avez activé les notifications fail2ban par E-Mail.
2013-05-23 22:49:16,787 fail2ban.actions: WARNING [wordpress-admin] Ban 166.63.127.244 2013-05-23 22:52:02,022 fail2ban.actions: WARNING [wordpress-admin] Ban 173.245.6.132 2013-05-23 22:52:03,642 fail2ban.actions: WARNING [wordpress-admin] Ban 24.234.3.189 2013-05-23 22:52:04,910 fail2ban.actions: WARNING [wordpress-admin] Ban 199.116.250.88 2013-05-23 22:52:14,502 fail2ban.actions: WARNING [wordpress-admin] Ban 93.114.46.11 2013-05-23 23:07:25,963 fail2ban.actions: WARNING [wordpress-admin] Ban 67.205.50.6 2013-05-23 23:14:20,059 fail2ban.actions: WARNING [wordpress-admin] Ban 93.170.50.174 2013-05-23 23:14:24,455 fail2ban.actions: WARNING [wordpress-admin] Ban 69.163.166.10 2013-05-23 23:14:29,163 fail2ban.actions: WARNING [wordpress-admin] Ban 50.63.154.219 2013-05-23 23:15:23,052 fail2ban.actions: WARNING [wordpress-admin] Ban 72.32.68.101 2013-05-23 23:24:00,391 fail2ban.actions: WARNING [wordpress-admin] Ban 210.210.178.20 2013-05-23 23:34:34,505 fail2ban.actions: WARNING [wordpress-admin] Ban 194.247.30.126 2013-05-23 23:34:43,187 fail2ban.actions: WARNING [wordpress-admin] Ban 87.253.162.6 2013-05-23 23:34:45,388 fail2ban.actions: WARNING [wordpress-admin] Ban 208.113.184.10 2013-05-23 23:35:36,296 fail2ban.actions: WARNING [wordpress-admin] Ban 207.58.129.221
Attention, le redémarrage est du coup beaucoup plus lent. Par exemple, sur l’un de mes serveurs Debian, avec 23 jails différentes, l’arrêt et le démarrage de Fail2ban prennent chacun 1 minute. A cela, ajoutez 97 bans mémorisés, et il met 8 minutes de plus. Ce qui nous fait un total de 10 minutes pour redémarrer Fail2ban, alors soyez patients 🙂
Cet article sera mis à jour en cas de nouvelles informations ou de modifications des scripts présentés.
Pingback : @Tb | Restauration automatique des IP bannies par fail2ban