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.