Gefällt dir dieser Artikel?

Wordpress, Joomla und Co: Backend mit htaccess sichern

erschienen in der Kategorie Webdesign, am 10.11.2017
Schnatterente
Diejenigen von euch, die eine eigene Webseite oder einen eigenen Webserver betreiben und ab und an mal in die Log-Dateien schauen, werden das kennen: Da stehen unzählige Zugriffe von meist ausländischen IPs, die versuchen URLs aufzurufen, die es gar nicht gibt – oder schlimmer – die es zwar gibt, aber außer dem Administrator der Seite niemanden etwas angehen.

Hinter solchen Zugriffen stecken meist Bots, die auskundschaften, mit was für einem Content-Management-System (CMS) die jeweilige Webseite betrieben wird, um dieses gegebenenfalls anzugreifen und die Webseite zu kapern. Die Programme suchen gezielt nach Seiten mit veralteten CMS-Versionen, bei denen kritische Sicherheitslücken noch nicht gepatcht wurden. Finden Sie so eine Seite, wird automatisch ein Exploit ausgeführt, um die Seite zu übernehmen. Das Ganze dauert oft nur ein paar Millisekunden.
Danach folgen für den Betreiber dann böse Überraschungen: Alle Inhalte wurden gelöscht, auf der eigenen Webseite sind plötzlich fremde (oft illegale) Inhalte zu finden, über die Seite werden massenhaft Spam-Nachrichten versendet oder der Server, auf dem die Seite läuft, ist zum Mitglied in einem Botnet geworden.

Administrationsbereich schützen

Um die eigene Webseite besser zu schützen und dafür zu sorgen, dass solche Bots keinen Zugriff auf den Log-in-Bereich erhalten, ist es ratsam, diesen zusätzlich mittels HTTP-Authentifizierung abzusichern. Das hat zwar den Seiteneffekt, dass man sich, um in den Administrationsbereich seiner Webseite zu gelangen, zukünftig zwei Mal einloggen muss, dafür sind die fiesen Bots dann aber eben ausgesperrt.

Bei den meisten Content-Management-Systemen gibt es ein Verzeichnis, welches Inhalte enthält, die ausschließlich für den Administrator zugänglich sein sollten. Beim verbreiteten Joomla CMS ist dies beispielsweise das Verzeichnis /administrator. Um diesen als "Backend" bezeichneten Bereich zu schützen, kann man einen Passwortschutz mittels einer .htaccess- und einer .htpasswd-Datei einrichten, welche man entsprechend konfiguriert im zu schützenden Verzeichnis ablegt. Wie genau das funktioniert, ist auf zahlreichen Internetseiten beschrieben und wird deshalb hier nicht im Detail erklärt. Wer schon eine Weile vor sich hin webmastert, wird das Prozedere ohnehin schon kennen. Ansonsten gilt: Die Suchmaschine ist dein Freund, such einfach mal nach ".htpasswd Generator".

Eine .htaccess-Datei, die den Passwortschutz für ein Verzeichnis aktiviert, kann zum Beispiel so aussehen:
AuthName "Geschützter Bereich. Bitte geben Sie Ihren Log-in ein."
AuthType Basic
AuthUserFile /var/www/...absoluter Pfad zur Webseite .../.htpasswd
require valid-user

In der im gleichen Verzeichnis liegenden .htpasswd-Datei sind die Log-ins samt verschlüsselter Passwörter hinterlegt:
Schnatterente:$1$wMScWxWA$//LMy38TufVWX.0Lw77Y// ZweiterNutzer:$Fl41$Am5wM/..$TkL5BIVd7bimduMeEMFIl5

Vorsicht bei der Verwendung der Verzeichnisschutz-Funktion des Providers

Wer seinen Webserver nicht selbst administriert und sich nur irgendwo ein bisschen Webspace angemietet hat, der wird in der Verwaltungsoberfläche des Providers ziemlich wahrscheinlich ein grafisches Werkzeug finden, mit dem man so einen Passwortschutz für beliebige Ordner auch einrichten kann, ohne selbst die Dateien editieren zu müssen.
Das funktioniert meist sehr gut, allerdings ist auch etwas Vorsicht geboten! Viele dieser Verwaltungssysteme schreiben im Dateisystem nämlich einfach munter drauf los und legen die entsprechenden Dateien neu an — ungeachtet dessen, ob da vielleicht schon eine .htaccess-Datei liegt, welche gegebenenfalls wichtige Einstellungen für die Webseite enthält. Ist dies der Fall, so kann einem der neue Passwortschutz die komplette Webseite zerschießen. Daher rate ich eher dazu, die Dateien doch händisch anzulegen oder vor der Verwendung der entsprechenden Tools des Providers zumindest zu prüfen, ob da nicht schon eine .htaccess-Datei im zu schützenden Verzeichnis liegt. (ACHTUNG: Dateien, die mit einem Punkt beginnen sind auf unixoiden Systemen versteckte Dateien! Man sieht sie also nur, wenn im jeweiligen S/FTP-Programm oder Dateibrowser eingestellt ist, dass versteckte Dateien angezeigt werden sollen.)

Sonderfall Wordpress: Dashboard schützen

Das "Dashboard" genannte Backend des derzeit wohl beliebtesten Content-Management-Systems Wordpress zu schützen, ist leider nicht ganz so einfach. Die meisten Anwender würden wohl einen Verzeichnisschutz für das Verzeichnis
/wp-admin

anlegen, in dem man sich aufhält, wenn man seine Wordpress-Webseite administriert. Dieses Verzeichnis versuchen übrigens auch viele garstige Bots aufzufinden – kein anderes sehe ich derartig häufig in den Log-Dateien verschiedener Webserver.

Leider ist Wordpress, was den Log-in angeht, aber ein bisschen unschön strukturiert. Es gibt zwei Gründe, warum es eine schlechte Idee ist, das wp-admin-Verzeichnis mit einem Passwortschutz zu versehen:

1.: Es gibt zahlreiche Wordpress-Plugins für den Einsatz im öffentlichen Bereich der Webseite, die auf Ressourcen innerhalb dieses Verzeichnisses zugreifen. Insbesondere liegt im wp-admin-Verzeichnis die Datei "admin-ajax.php", auf die sehr häufig zugegriffen wird. Legt man einen Passwortschutz für das wp-admin-Verzeichnis an, so sehen Webseitenbesucher plötzlich Log-in-Eingabefenster auf der Webseite, weil der Webbrowser versucht auf eine Datei zuzugreifen, die im passwortgeschützten Bereich liegt.

2.: Der eigentliche Log-in zum Backend ist gar nicht im Verzeichnis wp-admin beheimatet, sondern in der Datei wp-login.php, die im Wurzelverzeichnis von Wordpress liegt. Auf diesen Dateipfad kann also auch dann noch von außen zugegriffen werden, wenn man das wp-admin-Verzeichnis abgesichert hat.

Ein Verzeichnisschutz bringt einen hier also nicht weiter, denn wenn man das Wurzelverzeichnis der Webseite mit einem Passwort versehen würde, wäre ja die komplette Webseite nur noch für Leute einsehbar, die den Log-in kennen.
Glücklicherweise lässt sich aber auch dieser Fall mit einer .htaccess-Authentifizierung lösen. Es ist nämlich auch möglich, nur einzelne Dateien mit einem Passwortschutz zu versehen. Dazu legt man eine .htaccess-Datei mit folgenden Inhalten an:
<Files wp-login.php>
AuthType Basic
AuthName "Ey, du kommst hier net rein!"
AuthUserFile /var/www/...absoluter Pfad zur Webseite .../.htpasswd
Require valid-user
</Files>


Die Funktionsweise ist genau die Gleiche, wie bei einem Verzeichnisschutz, nur dass hier eben ausschließlich die Datei wp-login.php geschützt wird. In der .htpasswd-Datei müssen natürlich die entsprechenden Log-ins hinterlegt sein.

Fail2ban: Brute-Force-Angriffe erkennen und abwehren

Zum Schluss habe ich noch einen Tipp für alle, die das Linux, auf dem der Webserver läuft, selbst administrieren: Schaut euch mal die Software Fail2ban an.

Fail2ban ist ein "Intrusion Prevention System", also eine Software zur Vorbeugung von Einbrüchen in das System. Fail2ban läuft auf dem Webserver als Service im Hintergrund und analysiert die Log-Dateien verschiedener anderer Dienste (z. B. von SSH oder eben vom Web-Server). Erkennt Fail2ban, dass es zu viele fehlgeschlagene Log-in-Versuche von einer IP-Adresse gab, so sperrt es diese IP für einen definierbaren Zeitraum (mittels iptables) aus. Damit kann verhindert werden, dass ein angreifender Bot so lange mögliche Passwörter durchprobiert, bis er Erfolg hat (Brute-Force-Angriff).


Das wär es erst einmal zum Passwortschutz mittels .htaccess und Fail2ban.
Dann sichert mal schön eure Seiten ab! :)

Geschnatter

8 Kommentare, selbst mitschnattern << < Seite 1/2 > >>
Fryboyter, am 10.11.2017 um 16:10 Uhr
Schade, dass diese bekannten Systeme nicht einfach die Möglichkeit anbieten den Link zum Backend zu ändern. Bei Bolt CMS kann man das als Betreiber in ein paar Sekunden erledigen und hat Ruhe vor Bots und Scriptkiddies.
Karl, am 10.11.2017 um 17:28 Uhr
Ich versuche das gerade umzusetzen. Mir ist aber nicht klar woher ich den absoluten Webseitenpfad bekomme? Ich habe Webspace bei Strato gemietet.

Kann wer helfen?
Antwort:
Erstelle eine PHP-Datei, mit folgendem Inhalt:
<?php
echo realpath(dirname(__FILE__));
?>


Kopiere die Datei auf deinen Server, in das Verzeichnis, wo auch die .htaccess-Datei liegen soll und rufe sie im Browser auf. Du bekommst dann den gesuchten absoluten Pfad zur aufgerufenen Datei angezeigt.
Ben, am 10.11.2017 um 18:24 Uhr
Full ACK @ Fryboyter. Ist ein Grauen. Gibt Mittel und Wege das wp-admin-Verzeichnis umzubenennen. Aber man wird damit nicht froh! Plugins funktionieren teils nicht mehr, weil sie nicht standardkonform implementiert wurden, etc., etc.
chis_blues, am 11.11.2017 um 10:24 Uhr
Laut den Apache-Docs ist es keine gute Idee die .htpasswd in ein öffentlich einsehbares Verzeichnis zu legen. Es wird empfohlen, diese Datei außerhalb des "webroot" zu speichern [1]. Z.Bsp. /var/www/htpasswd/.htpasswd_zweck

Nun bieten viele Webhoster eben das nicht an, man hat keinerlei Schreibrechte außerhalb des Webroot-Verzeichnisses. Da kann man meines Wissens nur Deine beschriebene Vorgehensweise nutzen, die leider nicht ganz so sicher ist, wie die die von Apache empfohlene.



[1] https://httpd.apache.org/docs/2.4/howto/auth.html#gettingitworking
chis_blues, am 11.11.2017 um 10:29 Uhr
@Karl:

Man könnte das sogar noch verkürzen:

<?php
echo realpath(__DIR__);
?>
Karl, am 14.11.2017 um 11:48 Uhr
Danke, jetzt läufts!
Mark, am 15.11.2017 um 23:04 Uhr
Erledigt.