Zugriffsbeschränkungen und Absicherung von Webseiten mit Apache und Nginx

(Last Updated On: 15. Juni 2015)

Oft möchte man eine Webseite oder Webanwendung nur einem kleinen, beschränkten Kreis an Nutzern zur Verfügung stellen. Das ist insbesondere dann der Fall, wenn Sie für sich selbst eine Webanwendung auf einem kleinen Servergerät wie etwa einem NAS oder einem Raspberry PI installiert haben, auf welche Sie zwar über das Internet zugreifen wollen, jedoch ungebetene Gäste aussperren wollen.

Viele Content Management Systeme bieten wzar von Haus aus bereits eine Login-Beschränkung und Möglichkeiten zum Sperren von Inhalten an, doch oft möchte man eine „zweite Mauer“ einrichten, oder es handelt sich um ein CMS oder eine Seite, welche noch gar kein Login-System mitbringt: Dann braucht man die hier geschilderten Mechanismen umso dringender

In diesem Post zeige ich Ihnen, wie Sie den Zugriff auf diese Seiten mit den zwei beliebtesten Webservern Apache und Nginx beschränken können.

Apache und .htaccess

Der Apache Webserver hört auf die berühmten .htaccess-Dateien, die Sie einfach in das Hauptverzeichnis der Seite oder Webanwendung legen können, welche Sie beschränken wollen.

Nehmen wir an, Sie haben eine WordPress-Installation unter /var/www/wordpress, die nach außen hin über https://<ihrName>.com/wordpress erreichbar ist. Dann erstellen Sie einfach im Ordner wordpress eine neue Datei namens .htaccess und geben dem User, unter dem der Apache Webserver läuft (meist www-data) Eigentums- und Zugriffsrechte auf diese Datei

cd /var/www/wordpress
chown -R www-data.www-data /var/www/wordpress
chmod -R 700 /var/www/wordpress

Als erstes verhindern wir,d ass der Apache Webserver den inhalt dieses Ordners über indizes anzeigt, egal, was zuvor in den Webserver-Konfigurationsdateien festgelegt wurde. Das hindert ungebetene Gäste daran zu sehen, welche Dateien sich in dem Verzeichnis befinden.

Options -Indexes

eine sehr gute Möglichkeit, Ihre Webanwendung abzusichern haben Sie, wenn Sie immer von der selben, statischen IP-Adresse auf die Seite zugreifen, also beispielsweise von einem internetanschluss aus, bei dem Sie eien statische IP-Adresse haben, die sich niemals ändert. Dann können Sie nämlich angeben

allow from <IP-Adresse>
deny from all

Eventuell kann es für Sie nützlich sein, eine Datei als Index-Page zu konfigurieren, die keinen Namen wie beispieslweise index.php, index.html oder so hat. Wenn diese Datei jedoch keinen solchen Namen hat, wird der Webserver Ihre Webanwendung nicht automatisch öffnen, solange Sie den Namen der Index-Seite nicht entweder in der Apache-Konfiguration oder eben in einer .htaccess-Datei konfigurieren. Sie können den Namen der Startseite festlegen über

DirectoryIndex <Dateiname1> <Dateiname2>

Wie oben ersichtlich, können Sie mehrere Dateinamen angeben. Der Webserver probiert dann von links anch rechts die Dateinamen durch und sobald er auf den ersten funktionierenden Dateinamen stößt, zeigt er die Seite an.

Ebenfalls sinnvoll ist eventuell die Möglichkeit, Besucher weiterzuleiten. Das können Sie über folgende Direktive machen

Redirect /pfad/von/hauptverzeichnis/aus http://<Weiterleitungs-URL>

Die wichtigste Funktion zur Absicherung einer Webanwendung über eine .htaccess-Datei ist die Möglichkeit, einen Passwortschutz einzurichten. Dazu legen wir erstal in unserer .htaccess-Datei fest:

AuthName "<Beschreibung>"
AuthType Basic
AuthUserFile /<Pfad zur .htpasswd auf Dateisystemebene>
Require valid-user

Dei Datei .htpasswd enthält Usernamen und Passwort der User, die auf das geschützte Verzeichnis zugreifen dürfen. Dieses Datei sollten Sie außerhalb der Webroot ihres Webservers speichern, also meist außerhalb von /var/www. Der User, unter dem der Apache läuft, braucht wieder Zugriffsrechte auf diese Datei.

cd /home/www-data
mkdir .htpasswd
chown www-data.www-data .htpasswd
chmod 700 .htpasswd

Jetzt bearbeiten sie die Datei .htpasswd und geben die Usernamen und Passwörter an, die auf das Verzeichnis zugreifen dürfen, im Format:

<username>:<passwort>

Das Passwort wird dabei nicht im klartext in die Datei geschribeen, sondern vershlüsselt. Das passwört muss natürlich vorher noch von Ihnen in den vershlüsselten Zustand konvertiert werden. dazu können Sie den KxS Password Encrypter nutzen. Geben Sie dort den Usernamen und das Klartext-Passwort ein und der Deisnt spuckt Ihnen das verschlüsselte Passwort aus, welches Sie einfügen müssen.

Noch einfacher geht die Erstellung einer htpasswd-Datei, wenn Sie zusätzlich zum apache2-webservers die apche2-utils installiert haben.

apt-get install apache2-utils

dann können Sei nämlich foglendermaßen eine .htpasswd-Datei und gleich den ersten Usernamen dazu erstellen.

htpasswd -c /home/www-data/.htpasswd <username>

Das Tool fragt sie gleich nach einem Passwort für den nutzer und legt das Passwort lgeich im verschlüsselten Zustand in die .htpasswd-Datei ab.

Wenn jetzt jemand versucht, auf die Seite zuzugreifen, wrid er nach dem Benutzernamen und Passwort gefragt. Sie selbst können die Abfrage nach Benutzernamen und Passwort umgehen, indem Sie auf das Verzeichnis im Foramt http://<username>:<passwort>@www.ihrseite.com/wordpress zugreifen. das passwort wird dabei jedoch unverschlüsselt über das Netz übertragen, das sollten Sie im Hinterkopf behalten!

htaccess unter Nginx

Die Datei .htaccess ist eigentlich eine apache-eigene Implementierung. Der Webserver nginx unterstützt .htaccess-Dateien nicht von Haus aus. Jedoch können Sie einen ähnlciehn Schutz gewährleisten.

Nachdem sie den Nginx-Webserver eingerichtet und Ihre Webanwendung installiert haben, installieren sie zusätzlich zum Nginx-Webserver die apache2-utils

apt-get install apache2-utils

Nun erstellen wir wieder eien .htpasswd-Datei

htpasswd -c /home/www-data/.htpasswd <username>
chown www-data.www-data /home/www-data/.htpasswd
chmod 700 /home/www-data/.htpasswd

Sie werden wie beim Aapche auch gleich nach dem Passwort gefragt.

Was sich im Vergleich zum Apache nun ändert ist, dass Sie diese .htpasswd-Datei nicht über eine .htaccess-Datei konfigurieren, sondern es direkt in der nginx-Konfigurationsdatei einstellen müssen. Diese konfugurationsdatei befindet sich normalerweise unter /etc/nginx oder /etc/nginx/sites-available. Dort fügen wir dann etwas in diesem Format ein ein:

 server {
  listen       portnumber;
  server_name  ip_address;
  location / {
      root   /var/www/wordpress;
      index  index.html index.htm;
      auth_basic "Restricted";                                #For Basic Auth
      auth_basic_user_file /home/www-data/.htpasswd;  #For Basic Auth
  }
}

die anderen .htaccess-Direktiven, die wir weiter oben im Aapche-Kapitel kennegelernt haben, müssen Sie ebenfalls direkt in der Nginx-konfiguration angeben. Es gibt diverse Web-Tools, mit denen Sie .htaccess-Direktiven in Direktiven für die Nginx-Konfiguration konvertieren können. Einfach danach googeln.

 

Andreas Loibl ist SAP-Berater, Ethical Hacker und Online Marketing Manager und schreibt auf seinem Blog DaFRK Blog über verschiedene Themen in den Sektoren Projektmanagement, Informationstechnik, Persönlichkeitsentwicklung, Finanzen und Zeitmanagement.

DaFRK

Andreas Loibl ist SAP-Berater, Ethical Hacker und Online Marketing Manager und schreibt auf seinem Blog DaFRK Blog über verschiedene Themen in den Sektoren Projektmanagement, Informationstechnik, Persönlichkeitsentwicklung, Finanzen und Zeitmanagement.

Das könnte Dich auch interessieren …

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.