News
Insights

Insight

Wordpress? - Ja, aber...
Wordpress erfreut sich seit vielen Jahren höchster Popularität und ist das weltweit mit Abstand meist genutzte Content Management System. Die Kehrseite der Medaille: Das Interesse an Sicherheitslücken und deren Missbrauch ist einerseits riesig, andererseits bergen Fehlkonfigurationen das Risiko von Ressourcenüberlastungen und führen früher oder später zu nur unzulänglich funktionierenden Websites.

Das beliebteste CMS der Welt...

Sowohl weltweit, aber auch beim Schweizer Webhosting Provider Hostfactory ist Wordpress das am häufigsten verwaltete Content Management System: Eine automatische Installation via Kundencenter, unzählig viele graphische Vorlagen, sog. Templates und noch viel mehr verfügbare Plugins erlauben es einem heutigen Webmaster, jede beliebige Website auf mehr oder weniger einfache Art und Weise anzufertigen.

Image: wordpress.jpg

...ist das gefährlichste CMS der Welt?!

Aufgrund der enormen Verbreitung von Wordpress und aufgrund der Vielzahl Themes und Plugins gibt es eine grössere und stets wachsende Interessengemeinschaft, welche Ihre Zeit damit aufwendet, Sicherheitslücken in Wordpress aufzuspüren und - jeweils mit mehr oder weniger krimineller Energie -zu missbrauchen.

Während der Webmaster einer Wordpress Website einem "Hacking"-Angriff dank der ausgereiften Sicherheitsinfrastrukturen bei Hostfactory (Web Application Firewall (WAF), Application Scanning and Patching etc.), zusammen mit einer unerlässlichen, regelmässigen Aktualisierung von Wordpress und den hierin installierten Erweiterungen, sowie dank der Einhaltung der rudimentärsten Richtlinien gemäss Do's and Dont's für ein sicheres Webhosting, meist problemlos widerstehen kann, sind in jüngster Zeit dDoS-Angriffe auf Softwareebene vermehrt in den Fokus geraten.

Unzulängliche Konfigurationen öffnen Angreifern Tür' und Tor, so dass Ihre Anwendung durch missbräuchliche Anfragen überlastet werden, was schliesslich zu einer wenig leistungsstarken Homepage, also zu langen Ladezeiten oder schlimmstenfalls zur Unerreichbarkeit führen. Insbesondere auf einem Virtual Shared Webhosting betrifft derartiges schliesslich nicht nur den Webmaster selbst, sondern auch weitere Kunden, welche da ihre Webapplikation auf dem gleichen System verwalten. - Wir sind also, nicht zuletzt im Interesse anderer, alle zusammen gefordert, die Situation zu optimieren.

Bitte beachten Sie, dass nachfolgendes für Virtual Shared Standard Webhosting Accounts und teilweise für Hostfactory Cloud Server (VPS) "WebEdition" unter Linux formuliert wurde; bei der Verwaltung von Wordpress andernorts, werden entsprechende Anpassungen vorausgesetzt.

Wordpress XML-RPC deaktivieren

Wordpress bietet mit XML-RPC eine Schnittstelle (API) an, welche die entfernte Verwaltung der Applikation ermöglicht. Zumal diese Funktion meist gar nicht gebraucht wird, aber gleichzeitig ein hohes Sicherheitsrisiko darstellt, sollten Sie diese nach Möglichkeit deaktivieren: Wieder und wieder stellen wir Brute-Force- und dDoS-Attacken auf diese Datei fest!
Entsprechendes ist per Plugin Disable XML-RPC möglich oder per nachfolgende, zusätzliche Zeilen in der Datei ".htaccess", welche sich in Ihrem Wordpress-Verzeichnis befindet:

  1. <Files xmlrpc.php>
  2. order deny,allow
  3. deny from all
  4. # allow from 111.222.333.444
  5. </Files>

Optional können Sie die oben erwähnte, vierte Zeile durch das Löschen der vorangestellten Raute ("#") aktivieren und die oben erwähnte IP durch Ihre eigene(n) IP-Adresse(n) (mehrere mit Leerzeichen getrennt) ersetzen, um so bestimmten Quellen einen Zugriff auf die Datei xml-rpc.php zu erlauben.

Sofern Sie das Plugin Jetpack, dessen Nutzung wir wärmstens empfehlen, verwenden, müssen Sie ausserdem das IP-Subnetz 192.0.64.0/18 (IP-Subnet von "AUTOMATTIC", dem Anbieter von "Jetpack") erlauben, um dessen korrekte Funktion weiterhin sicherzustellen!

"wp-cron.php" durch einen "echten" Cronjob ersetzen

Die Datei "wp-cron.php" wird bei jedem Seitenaufruf einer Wordpress Webseite ebenfalls aufgerufen und prüft, ob es regelmässig zu erledigende Aufgaben auszuführen gilt. Derartiges soll in der Tat regelmässig passieren und funktioniert deshalb bei einer schwach besuchten Homepage entsprechend zufriedenstellend. Bei einer gut besuchten Website oder bei expliziten DoS-Angriffen auf diese Datei führt dies sehr schnell zu einem Overhead und schliesslich zu eingeschränkter Leistungsfähigkeit oder gar zur Unerreichbarkeit Ihres Webservers!

Sie sollten also diese Funktion von Wordpress deaktivieren und die periodische Ausführung pendenter Aufgaben durch einen Cronjob (geplante Aufgabe) ersetzen. Öffnen Sie hierzu die Datei "wp-config.php", welche Sie in Ihrem Wordpress-Verzeichnis finden und suchen Sie hier nach der Zeile

  1. define('DB_COLLATE', '');

notieren Sie nun direkt eine Zeile darunter:

  1. define('DISABLE_WP_CRON', true);

und speichern Sie die Datei. Nun wechseln Sie in Ihr Kundencenter "my.hostfactory.ch" und gehen dort nach "Webhostings" -> (Webhosting auswählen) -> (Domain Account auswählen) -> "Cronjobs" und erstellen Sie hier per "Neuen Cronjob erstellen" eine zur periodischen Ausführung geplante Aufgabe vom Typ "PHP Skript ausführen". Als Pfad notieren Sie den relativen Serverpfad zu "wp-cron.php", also zum Beispiel:

  1. /httpdocs/wordpress/wp-cron.php

Damit diese Datei nun alle 15 Minuten ausgeführt wird, definieren Sie unter "Timing" im Feld "Minute" den Wert "*/15" und belassen gleichzeitig die weiteren Felder unverändert.

Image: cronjob.jpg

Zugriff auf das Wordpress Backend absichern

Zwar werden die Quell-IPs, ab welchen wiederholt Falschanmeldungen in ein Wordpress Backend versucht werden, bereits unsererseits infrastrukturseitig blockiert, dennoch lohnt es sich, den Managementzugang zusätzlich abzusichern:

Wordpress Admin deaktivieren

Deaktivieren Sie als erstes den Benutzernamen "Admin", nachdem Sie einen anderslautenden Superadmin definiert haben.

Wordpress Backend mit zusätzlichem Passwort schützen

Darüber hinaus ist es in der Tat sinnvoll und von wordpress.org durchaus empfohlen, Zugriffe auf die Datei "wp-login.php" mit einem zusätzlichen Passwortschutz zu versehen. Erstellen Sie dazu eine Datei in ihrem Wordpress-Verzeichnis, welche ".htpasswd" (inklusive vorangestelltem Punkt ".") heisst und notieren Sie darin:

  1. <Benutzername>:<Bcrypt-Hash von Ihrem Passwort>

Den Benutzernamen können sie frei wählen, während Sie ein starkes Passwort nach Wahl definieren und zuerst unter Bcrypt verschlüsseln; Derartiges ist zum Beispiel auf bcrypt-generator.com möglich: Notieren Sie hier Ihr starkes Passwort im Feld "String to encrpyt" und klicken Sie dann auf "Hash!". Sie erhalten nun einen kalkulierten Hash von Ihrem Passwort, welchen Sie per Copy/Paste in Ihr ".htpasswd"-File kopieren ("<Bcrypt-Hash von Ihrem Passwort>" überschreiben) und dieses dann speichern. - Das Ganze könnte dann also in etwas wie folgt aussehen (nur Beispiel, bitte nicht verwenden!):

  1. # cat /httpdocs/wordpress/.htpasswd
  2. IchBinDerBoss:y0.ba6x56yl8zRuZD7C58r1yyV6L1UswjO
  3. #

Dazu erstellen Sie nun eine zweite Datei im gleichen Verzeichnis und lautend auf ".htaccess". Darin notieren Sie nachfolgenden Inhalt. - In aller Regel ist in diesem Verzeichnis bereits eine gleichnamige Datei vorhanden, so dass Sie folgendes einfach zu oberst in diese bereits vorhandene Datei ergänzen:

  1. <Files ~ "^\.ht">
  2. Order allow,deny
  3. Deny from all
  4. </Files>
  5. <Files wp-login.php>
  6. AuthUserFile /absoluter/pfad/zu/ihrem/wordpress/verzeichnis/.htpasswd
  7. AuthName "Eingeschraenkter Bereich"
  8. AuthType Basic
  9. require user <Benutzername>
  10. </Files>

Sie können obige Zeilen kopieren und einfügen, vergessen Sie aber vor dem Speichern der Datei nicht, "<Benutzername>" durch Ihren oben definierten, geheimen Benutzernamen (im o.g. Beispiel "IchBinDerBoss") vollständig (inkl. eckiger Klammern) zu ersetzen, sowie den absoluten Serverpfad zu Ihrem Wordpress-Verzeichnis zu korrigieren.

Wordpress Backend nur ab bestimmten IP-Adressen zugänglich machen

Alternativ - oder idealerweise gar zusätzlich! - schränken Sie die IP-Quelladressen, welchen der Zugriff auf diese Datei erlaubt ist, auf Ihre eigene(n) IP-Adresse(n) ein. Dazu notieren Sie in der oben bereits besprochenen Datei ".htaccess" nachfolgenden Inhalt, wobei Sie die genannte IP durch Ihre eigene(n) IP-Adresse(n) (mehrere mit Leerzeichen getrennt) ersetzen:

  1. <Files wp-login.php>
  2. Require ip 111.222.333.444 555.666.777.888
  3. </Files>

Wir empfehlen Ihnen, obige Optimierungen in den von Ihnen verwalteten Wordpressinstanzen baldmöglichst einfliessen zu lassen, wobei insbesondere dem Deaktivieren von XML-RPC und dem anpassen des Cronjobs höchste Priorität ein zuräumen ist. Und, falls Sie dies nicht bereits tun, ist das eine künftige Verwendung entsprechend verfügbarer Security Plugins für Wordpress auf alle Fälle empfehlenswert: All In One WP Security & Firewall oder Jetpack sind dabei nur zwei bekannte, sehr häufig genutzte Lösungen unter vielen anderen verfügbaren, welche wir Ihnen empfehlen können.

Mit Begeisterung!
Andi Herzig

hostfactory.ch
Anleitung