Zugriff auf WordPress xmlrpc.php mit NGINX abstellen

Über die WordPress-XMLRPC-Schnittstelle werden Beiträge per Email gesetzt, aber die XMLRPC-Schnittstelle ist auch ein beliebter Angriffspunkt für Denial of Service-Attacken (DOS).

RPC steht für Remote Procedure Call – eine Anweisung an eine Anwendung auf einem anderen System. XMLRPC ist der einfachste Mechanismus für die Programm-zu-Programm-Kommunikation zwischen Web-Anwendungen. Der Massenzugriff auf xmlrpc.php bei einem Angriff erhöht die CPU-Last, die Seite wird immer langsamer und macht die Webseite am Ende unzugreifbar. Früher ließ sich die XMLRPC-Schnittstelle in den WordPress-Einstellungen deaktivieren, aber schon mit Version 3.5 haben die WordPress-Entwickler diese Option versenkt und die Bombe zum wunden Punkt vieler Internet-Auftritte gemacht.

Ein einfaches Plugin setzt mit

add_filter( 'xmlrpc_enabled', '__return_false' );

die Schnittstelle außer Kraft. Die Angriffe laufen damit zwar ins Leere, aber die Last bei einem DOS-Angriff bleibt bestehen. Auf einem NGNIX-Server kann der Zugriff schon auf der Server-Ebene blockiert werden.

location = /xmlrpc.php {
   deny all;
   access_log off;
   log_not_found off;
   return 444; 
}

Die Statusmeldung 444 gibt es nur in NGINX und schließt die Verbindung ohne Antwort, damit die CPU-Leistung gar nicht erst durch die Behandlung eines xmlrpc-Requests beeinträchtigt wird. Alle WordPress-Plugins, die auf xmlrpc.php setzen, funktionieren dann nicht mehr.

xmlrpc.php Drupal 7

Drupal 7 brachte ebenfalls noch ein xmlrpc.php -Interface mit (z.B. für das OpenID-Modul). Wer keine Module braucht, die auf dem xmlrpc-Interface beruhen, kann die Datei einfach löschen. Mit Drupal 8 wurde diese alte Bombe allerdings beseitigt.

Externe Quellen