Pe scurt, în acest tutorial găsești liniile de comandă prin care poți să instalezi și să configurezi Fail2Ban pentru WordPress. Securizează autentificarea WordPress și interogările de tip brute force ale xmlrpc.php.
Blogurile și site-urile dezvoltate pe platforma WordPress sunt adesea ținte ale atacurilor cibernetice. Cele mai multe atacuri sunt de tip brute force și viziează sesiunea de autentificare sau exploatarea XML-RPC (Remote Procedure Call using XML). Din fericire, fail2ban este o soluție de securitate foarte utilă pentru aceste situații. Dacă vrei să securizezi un site WordPress cu fail2ban, urmează pașii de configurare din acest tutorial.
Înainte de toate, asigură-te că ai acces la serverul web prin conexiune SSH și că aplicația fail2ban este instalată.
Configurare Fail2Ban pentru WordPress pe Debian
1. În primul rând trebuie să te asiguro că aplicația fail2ban este instalată și că rulează pe server. Execută linia de comandă de mai jos:
systemctl status fail2ban
În output ar trebui să vezi ceva de forma:
● fail2ban.service - Fail2Ban Service
Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; preset: enabled)
Active: active (running) since Tue 2025-03-11 00:39:32 EET; 6 days ago
Docs: man:fail2ban(1)
Main PID: 917 (fail2ban-server)
Tasks: 17 (limit: 76843)
Memory: 33.2M
CPU: 17min 1.752s
CGroup: /system.slice/fail2ban.service
└─917 /usr/bin/python3 /usr/bin/fail2ban-server -xf start
Dacă fail2ban nu este instalat pe server, va fi nevoie să-l instalezi. Execută linia de comandă pentru instalare fail2ban pe Debian / Ubuntu:
sudo apt install fail2ban
2. Următorul pas este să creezi filtrul fail2ban pentru WordPress. Execută în terminal linia de comandă pentru a crea și edita filtrul wordpress.conf
.
sudo nano /etc/fail2ban/filter.d/wordpress.conf
În fișierul wordpress.conf
stabilește filtrele pentru autentificare WordPress și pentru fișierul xmlrpc.php
, după cum urmează:
[Definition]
failregex = ^<HOST> -.*"(GET|POST).*(/wp-login.php|/xmlrpc.php).*" 200
ignoreregex =
Asta înseamnă că prin orice metodă, GET
sau POST
, ar fi accesate fișierele wp-login.php sau xmlrpc.php, se va putea crea o regulă pentru fail2ban. Condiția este ca aceste fișiere să existe și să poată fi accesate de atacator. Adică să returneze codul 200 (ok) la accesare.
Salvează fișierul /etc/fail2ban/filter.d/wordpress.conf
.
3. Următorul pas este să configurezi “jail” pentru WordPress. La acest pas se încurcă cei mai mulți utilizatori, deoarece regulile trebuie stabilite diferit în funcție de sistemul de management pentru hosting (dacă acesta există) sau de configurația serverului web.
Dacă utilizezi HestiaCP, VestaCP sau MyVesta, creează și editează fișierul /etc/fail2ban/jail.local
.
nano /etc/fail2ban/jail.local
Adaugă în acest fișier liniile de mai jos:
[wordpress]
enabled = true
port = http,https
filter = wordpress
logpath = /var/log/nginx/domains/*.log #or apache2.
maxretry = 5
findtime = 1800
bantime = 3600
action = hestia[name=WEB] #hestacp action.
Ajustează parametri de mai sus în funcție de nevoile tale. În configurația dată de mine, dacă într-un interval de 1800 de minute sunt 5 încercări repetate de la același IP, acesta va fi blocat pentru 3600 minute cu ajutorul acțiunii HestiaCP pentru web. (hestia[name=WEB]
). Aici va fi nevoie să ajutați în funcție de sistemul pe care îl aveți pe server.
De asemenea, este foarte important și “logpath
“. Din aceste log-uri sunt extrase datele pe baza cărora se va executa acțiune. Asigurați-vă că locația este corectă.
În cazul în care nu aveți un sistem de management instalat, va fi nevoie ca acțiunea de blocare a IP-urilor cu fail2ban pentru WordPress să se facă direct prin iptables
. Linia pentru acțiune va fi următoarea:
action = iptables-multiport[name=wordpress, port="80,443", protocol=tcp]
Ca o paranteză, în loc de /etc/fail2ban/jail.local
puteți utiliza și un fișier separat pentru configurare, precum: /etc/fail2ban/jail.d/wordpress.conf
.
După ce ați făcut ajustările, aplicați modificările.
sudo systemctl restart fail2ban
4. După restart, verificați dacă fail2ban pentru WordPress funcționează:
fail2ban-client status wordpress
Status for the jail: wordpress
|- Filter
| |- Currently failed: 355
| |- Total failed: 33873
| `- File list: (log files per domain)
- Actions
|- Currently banned: 127
|- Total banned: 680
`- Banned IP list:
După ce găsiți în această listă IP-uri blocate, asigurați-vă că acestea sunt blocate și în iptables
. Am întâlnit situația ca din cauza unei configurări greșite, în fail2ban să văd că este un IP blocat, însă în realitate acesta putea accesa în continuare wp-login.php
sau xmlrpc.php
.
Pentru a verifica dacă totul funcționează cum trebuie, alege un IP blocat din lista fail2ban și caută-l în iptables.
Execută linia de comandă:
iptables -L -v -n --line-numbers
Dacă IP-ul care apare blocat de fail2ban se regăsește și în această listă, înseamnă că ai configurat corect fail2ban pentru WordPress.
Related: Cum resetezi parola de user admin în WordPress. Fără acces la email.
Totodată, este foarte indicat să verifici log-ul cu acțiunile fail2ban:
sudo tail -f /var/log/fail2ban.log
Acestea fiind spuse, dacă ai nelămuriri sau ai nevoie de ajutor, te pot ajuta în comentarii.