Jak zabránit útokům na CMS WordPress?

1. Použití nástroje fail2ban (z repozitáře rpmforge). Jeho instalace a popis je v příspěvku Zabezpečení linuxového serveru pomocí fail2ban. Stačí vytvořit soubor /etc/fail2ban/filter.d/apache-wp-login.conf s obsahem
 
[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>