solip.de
Intel Channel Partner
Lancom Reseller
  • SiteLinks

  • Translator

  • TechBlog

  • Spiced Pork Ham

Angriffe auf xmlrpc.php mittels fail2ban abwehren

Erstellt von solip am Mittwoch 23. März 2016

Nicht nur bei Verwendung von WordPress ein Thema: Massenweise Zugriffe auf die Datei xmlrpc.php eines Webserver.

Diese Datei gehört zu WordPress und wird gerne für Angriffe auf selbiges missbraucht. Man kann sich dagegen mit Plugins schützen oder auch die Datei mittels .htaccess aus dem Zugriff nehmen.

Was man jedoch nicht so einfach abstellen kann, das sind die initialen Zugriffe. Die sind für WordPress-Installationen mitunter ein Problem, denn die Fehlerbehandlung führt auch WordPress durch wenn keine komplette Sperrung erfolgt. Das erzeugt Systemlast.

Die Angreifer brauchen sehr lange um festzustellen, das ihre Aufrufe ins Leere führen. Auf einem Server, der schon seit Monaten kein WordPress mehr beherbergt, fand ich immer noch 30-50 Zugriffe auf diese Datei pro Sekunde vor. Selbst diese „nicht gefunden“ Zugriffe mit Statuscode 404 erzeugen deutlich Systemlast, je nach verwendetem PHP-Interpreter (fpm, cgi, fcgi) sogar sehr viel. Und produzieren auch sehr große, sinnfreie Log-Dateien.

Einzelne aufrufende IP-Adresse sperren bringt hier nichts, die Angriffe kommen aus Botnetzen. Es kommen dann einfach automatisiert andere IP-Adressen zum Einsatz.

Mittels fail2ban kann man die Angreifer loswerden. Dies funktioniert sowohl mit einzeln installiertem fail2ban oder mit dem Modul in Plesk.

Zunächst legt man in /etc/fail2ban/filter.d einen neuen Filter namens wordpress-xmlrpc.conf an:

# Fail2Ban filter for WordPress XMLRPC
#
[INCLUDES] before = common.conf

[Definition] _daemon = wordpress
failregex = ^.*].*/xmlrpc\.php.*
ignoreregex =

Und unter /etc/fail2ban/jail.d das dazugehörige Jail gleichen Namens:

[wordpress-xmlrpc] enabled = true
filter = wordpress-xmlrpc
action = iptables-multiport[name=WordPressXMLRPC, port="http,https,7080,7081"] logpath = /var/log/apache2/access_log
maxretry = 2

In Plesk legt man das Jail über das Menü an. Der Pfad der Log-Dateien aller virtuellen Hosts sieht so aus:

logpath = /var/www/vhosts/system/*/logs/*access*log
/var/log/apache2/*access.log

Die Ports 7080 und 7081 sollen hier übrigens den evtl. auch installierten nginx Proxy mit einbeziehen.

So sieht das Anlegen in Plesk aus:
wordpress-xmlrpc-plesk

Im folgenden Verlauf füllt sich die Liste der gesperrten IP-Adressen schnell mit den Angreifern, die je nach Konfiguration Tage bis Wochen direkt an der Netzwerkverbindung abgewiesen werden.

Zusätzlich gibt es noch das Jail recidive, das wiederkehrende Angreifer erkennt und sehr lange ausschliesst.

Kommentar schreiben

XHTML: Sie können diese Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>