Verzeichnisschutz mit Apache und nginx

Wer eine Webseite mit Backend betreibt, wie es zum Beispiel bei WordPress der Fall ist, sollte diesen nicht nur mit sicheren Zugangsdaten ausstatten, sondern auch gegen direkte Brute-Force-Attacken absichern. Am einfachsten lässt sich so etwas mit einem Verzeichnisschutz erreichen, bei dem der Login durch einen zusätzlichen vom Webserver bereitgestellten Passwortschutz abgesichert wird.

Brute-Force-Attacke?

Bei einer Brute-Force-Attacke versucht der Angreifer, durch Ausprobieren möglichst vieler Kombinationen, die richtigen Zugangsdaten zu ermitteln. Die meist automatisch ablaufenden Angriffe attackieren dabei keine gezielten Ziele, sondern durchlaufen den IPv4 Adressbereich und nutzen häufig verwendete Login-Namen und Wörterbuchdateien zum Ausprobieren. Diese sind, sollange sichere Zugangsdaten verwendet werden, zwar nicht so gefährlich wie gezielte Angriffe, können aber durchaus Serverlast verursachen.

Apache

Als Erstes benötigen wir eine Datei, in der wir die zulässigen Benutzer und deren Passwörter speichern. Wer seinen Server selbst verwaltet, kann dafür das von Apache mitgelieferte Programm htpasswd nutzen

Der Parameter -c bewirkt, dass eine neue Datei angelegt wird. Dieser sollte beim Hinzufügen weiterer Nutzer, welches mit ansonsten identischem Befehl geht, nicht angegeben werden, da er ansonsten die bereits vorhandenen Daten überschreibt. Zusätzlich ließe sich mit dem Parameter -s die Verschlüsselung SHA erzwingen, die wesentlich sicherer als die standardmäßig genutzte Crypt-Funktion ist.

Alle, die nur einen Webspace haben, können die Datei mit dem Namen .htpasswd lokal auf dem eigenen Rechner erstellen. Die genaue Schreibweise inkl. dem Punkt ist wichtig und sorgt auch dafür, dass Linux diese als versteckte Datei behandelt und standardmäßig nicht anzeigt. Anschließend müssen noch die Zugangsdaten in die .htpasswd eingetragen werden. Dafür ist pro Nutzer eine Zeile mit einer Kombination aus Username und Passwort getrennt durch einen Doppelpunkt einzutragen. Das Passwort muss jedoch zuvor verschlüsselt werden. Dafür kann entweder einer der unzähligen Onlinedienste genutzt werden, bei denen natürlich das Risiko besteht, dass die erhaltenen Daten gespeichert werden oder das Passwort per PHP-Script auf dem eigenen Webspace verschlüsselt werden. Hier ein Beispiel für ein solches PHP-Scrip:

Außerdem muss die .htpasswd-Datei in einem Verzeichnis abgelegt werden, in dem der Webserver Lesezugriff hat.

Als Nächstes brauchen wir in dem zu schützenden Verzeichnis eine Datei mit dem Namen .htaccess. Wer seinen Server selbst verwaltet, kann dafür das Tool touch nutzen und anschließend den unten stehenden Text mit einem Editor wie zum Beispiel vim in die Datei einfügen. Alle, die nur einen Webspace haben, können die Datei lokal auf dem eigenen Rechner erstellen, unten stehenden Text einfügen und anschließend per FTP hochladen.

Mit AuthType wird die Art der Authentifizierung festgelegt. Bei der hier angegebene Methode Basic wird das Passwort unverschlüsselt übertragen.

Der Text „Passwortgeschützter Bereich“ kann durch einen beliebigen Text ersetzt werden.

Der Befehl AuthUserFile gibt den Pfad zur .htpasswd an. Der Pfad muss durch den ersetzt werden, unter dem die Datei tatsächlich zu finden ist.

Mit require vaild-user wird angegeben, dass alle in der .passwd Datei angegebenen Nutzer zulässig sind. Alternativ ließe sich der Zugriff mit require user [USERNAME] auch auf bestimmte Nutzer beschränken, wobei [USERNAME] durch die zulässigen Benutzernamen ersetzt werden muss. Eine Auflistung an Benutzer ist auch möglich und wird entweder durch eine durch Kommata getrennte Aufzählung angegeben oder jeweils als eigene Zeile.

nginx

Bei nginx wird das zu schützende Verzeichnis direkt in der Konfigurationsdatei der jeweiligen Webseite eingetragen. Diese sind zum Beispiel bei Debian in dem Ordner /etc/nginx/conf.d zu finden (bei älteren Versionen von nginx unter /etc/nginx/sites-available/). Dort wird, in der entsprechenden Datei, ein Zusätzlicher location-Block mit folgendem Inhalt eingefügt:

Hinter location wird das zu schützende Verzeichnis oder die zu schützende Datei angegeben. Im Beispiel wird der komplette DocumentRoot geschützt. Nachfolgend noch ein Beispiel in dem die Login-Datei von WordPress mit einem zusätzlichen Passwortschutz versehen wird.

Bei auth_basic_user_file wird der Pfad zur htpasswd-Datei angegeben. Diese muss natürlich ebenfalls erstellt werden und enthält genauso wie bei Apache pro zulässigen Benutzer eine Zeile mit Nutzernamen und Passwort, getrennt durch einen Doppelpunkt. Bei den Passwörtern unterstützt nginx die Verschlüsselungsmethoden CRYPT, SSHA und SHA. Das Passwort kann durch diverse Onlinedienste oder dem unter Apache erwähnten PHP-Script verschlüsselt werden. Alternativ könnten diejenige, die zusätzlich den Webserver Apache installiert haben, auch das Tool htpasswd nutzen. Dieses ist ebenfalls im Abschnitt Apache beschrieben.

Nachdem die Konfigurationsdatei editiert und die htpasswd-Datei erstellt wurde, müssen diese vom Webserver zunächst neu eingelesen werden. Das geht bei Debian zum Beispiel mit folgendem Befehl: