[Definition]
# Option: failregex
# Notes.: Regexp to catch Apache dictionary attacks on Wordpress wp-login
# Values: TEXT
#
failregex = <HOST>.*] "POST /wp-login.php
<HOST>.*] "POST /xmlrpc.php
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =
a do konfiguračního souboru fail2ban - /etc/fail2ban/jail.conf
[apache-wp-login]
enabled = true
port = http,https
filter = apache-wp-login
logpath = /var/www/vhosts/*/statistics/logs/access_log
action = iptables-multiport[name=APACHE-WP, port="80,443", protocol=tcp]
maxretry = 10
findtime = 60
bantime = 3600
Pak se fail2ban restartuje. Když bude v průběhu 60 s (findtime) zaznamenáno 10 přístupů (POST /wp-login.php) z 1 IP adresy, bude tato adresa na firewallu zablokována po dobu 1h (hodnoty lze samozřejmě upravovat podle potřeby). Po uplynutí této doby bude pravidlo z firewallu automaticky odstraněno. Obdobně lze filtrovat jakýkoliv podobný útok (na Joomlu apod)
Často se stává, že příslušná IP je zakazována a povolována opakovaně, takže se vyplatí jí zablokovat na delší dobu - doporučujeme nastavit i jail RECIDIVE. Tam pak můžete IP zablokovat třeba na týden, měsíc (čas je v sekundách)
[recidive]
enabled = true
filter = recidive
logpath = /var/log/fail2ban.log
action = hostsdeny
bantime = 604800 ; 1 tyden
findtime = 86400 ; 1 den
maxretry = 3
action pak může vypadat i takto: "action = iptables-allports[name=recidive]"
Pravidla lze otestovat následujícím způsobem:
fail2ban-regex /var/www/vhosts/DOMENA/statistics/logs/access_log /etc/fail2ban/filter.d/apache-wp-login.conf
cestu k logu zjistěte na serveru
2. Omezení přístupu v konfiguraci apache přes .htaccess umístěného v rootu webu s následujícími direktivami:
<Directory /var/www/vhosts/domena.tld/httpdocs/wp-admin/>
Order deny,allow
Deny from all
Allow from 1.2.3.4
</Directory>
<Files wp-admin.php>
Order deny,allow
Deny from all
Allow from 1.2.3.4
</Files>