WordPress támadás megállítása – DDoS xmlrpc.php

A mai nap különösen belassult a webszerverem, ugyanis rengeteg kérés érkezett rá, melynek célpontja a WordPress-ben található xmlrpc.php fájl. A “sok kérés” alatt 5-15-öt értek másodpercenként, ami intenzív load növekedést okozott.

A monitoring rendszerem jelzett, majd a logokból jöttem rá, hogy mi a konkrét probléma, ezért a fail2ban programban egy megfelelő filtert állítottam be, hogy helyre álljon a rend.

A megoldás, néhány lépésben:

1. lépés

A rendszeremen (Ubuntu – Apache – ISPConfig) létrehoztam az apache-xmlrpc.conf fájlt:

nano /etc/fail2ban/filter.d/apache-xmlrpc.conf

A tartalma a következő:

[Definition]
#failregex = ^<HOST> .*POST .*xmlrpc\.php.*
failregex = .*:80 <HOST> .*POST .*xmlrpc\.php.*
ignoreregex =

Ez mondja meg a fail2ban-nak, hogy a logban keresse meg az xmlrpc.php POST metódusú kérést. A kikommentezett rész, másik log fájlra illeszkedik. Nálam ez a beállítás lett a célravezető, viszont az Apache bejegyzésre lehet, hogy nálad más lesz a megfelelő.

Ahhoz, hogy jól látható legyen a regex kifejezés, melyik log bejegyzésre illeszkedik, lássuk azt:

customer.hu:80 208.55.220.142 - - [25/Mar/2014:18:00:34 +0100] "POST /xmlrpc.php HTTP/1.0" 200 586 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"

A kikommentezett logbejegyzés pedig hasonló volt (másik támadó IP-vel):

208.113.91.51 - - [25/Mar/2014:18:00:12 +0100] "POST /xmlrpc.php HTTP/1.0" 200 370 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"

2. lépés

Az elkészített szűrőt most használjuk is fel. Nyissuk meg:

nano /etc/fail2ban/jail.local

Melynek a sok egyéb fail2ban szűrő beállítása mellett a következő:

[apache-xmlrpc]
enabled  = true
port     = http,https
filter   = apache-xmlrpc
action = iptables-multiport[name=web-apache-xmlrpc, port="http,https", protocol=tcp]
         sendmail-whois[name=web-apache-xmlrpc, dest=root@gmail.com, sender=fail2ban@servername.hu]
#logpath  = /srv/www/customer.hu/log/access.log
logpath  = /var/log/apache2/other_vhosts_access.log
maxretry = 1

Itt látszik, hogy melyik logból olvassa ki a fail2ban. Továbbá két akciót hajt végre: tűzfallal kitiltja a betolakodó IP címét, valamint levél értesítést küld róla. Ezeket, természetesen mindenki írja át a sajátjára:-) Ha nem akarunk erről levelet, csak kommenteljük ki a “sendmail-whois” sort. A maxretry-t egyéni ízlés szerint lehet növelni… Nekem így megfelelő:-)

3. lépés

Már csak a Fail2ban szolgáltatás újraindítása van hátra:

service fail2ban restart

4. lépés

Ellenőrzés. Egyrészt érdemes figyelni, hogy a betolakodók a tűzfal megfelelő részén megjelennek-e. Ez nyilván, akkor látványos, ha éppen támadás alatt van az ember.

watch iptables -L

Ebben az esetben, valami ilyesmit kell látni, mely lista egy-re csak nő:

Másrészt a fail2ban-regex paranccsal:

fail2ban-regex /var/log/apache2/other_vhosts_access.log /etc/fail2ban/filter.d/apache-xmlrpc.conf

Remélem, számodra is segítség lesz ez a bejegyzés… Érdemes a fail2ban-t, még SSH, FTP, IMAP, POP3 stb. autentikáció ellenőrzésre is felhasználni.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöljük.