Apache-Server mit .htaccess konfigurieren
Server-Beeinflussung

DeveloperIT-ProjekteSicherheitSicherheitsmanagementSoftware

.htaccess-Dateien sind Alleskönner, werden aber häufig auf den puren Verzeichnisschutz reduziert. Internet Professionell zeigt, wie Sie mehr aus diesen Dateien herausholen.

Unterschätzte Helfer

Apache-Server mit .htaccess konfigurieren

In der Regel fristen .htaccess-Dateien ein trostloses Dasein und werden häufig nur dazu benutzt, den Zugriff auf eine Webseite auf bestimmte Anwendergruppen zu beschränken. Dazu sind sie bestens geeignet, erfüllen diese Aufgabe fehlerfrei und viele Webhoster bieten sogar entsprechende Oberflächen, um diese Dateien zu administrieren. Dass dieses kleine Helferlein zu weit mehr imstande und berufen ist, ist vielen Besitzer einer auf Apache basierenden Webpräsenz jedoch vollkommen unbekannt. Internet Professionell zeigt, was mit den .htaccess-Dateien möglich ist, und stellt nützliche Praxistipps zusammen.


Vorarbeit am Apache-Server

Apache-Server mit .htaccess konfigurieren

Damit Sie die .htaccess-Dateien überhaupt zum Verzeichnisschutz einsetzen können, muss in der Hauptkonfigurationsdatei des Apache-Servers (httpd.conf) die folgende Anweisung stehen:


AllowOverride AuthConfig

Um auch die anderen Beispiele dieses Artikels testen zu können, sollten Sie zudem folgenden Eintrag in der httpd.conf vornehmen:

AllowOverride All

Am einfachsten ist es, Sie suchen nach dem Stichwort AllowOverride und passen die Zeile entsprechend an.


Verzeichnisschutz

Apache-Server mit .htaccess konfigurieren

Ein Zugriffs- beziehungsweise Verzeichnisschutz mit Hilfe von .htaccess-Dateien wird häufig verwendet, wenn bestimmte Dateien nicht der breiten Öffentlichkeit zur Verfügung stehen sollen. .htaccess-Dateien sind klein und benötigen keinerlei aufwendige Programmierung. Einen kleinen Nachteil gibt es jedoch: Sie sind nicht plattformunabhängig und funktionieren lediglich mit dem Apache-Webserver. Bei der Verbreitung des Apache-Servers dürfte dies jedoch kaum als Einschränkung gelten. Der Inhalt einer .htaccess -Datei für den Verzeichnisschutz sieht folgendermaßen aus:

AuthType Basic
AuthName “Geschützter Bereich”
AuthUserFile /usr/local/apache/passwd/.htpasswd
Require valid-user

Die Anweisung AuthType legt fest, auf welche Weise die Authentifizierung stattfinden soll. Basic bedeutet, dass das Passwort unverschlüsselt übertragen wird. Zwar gibt es noch eine Variante, in der das Passwort verschlüsselt übertragen wird, jedoch unterstützen nur die neuesten Browserversionen diese Methode.

Mit
AuthName
wird der Name des geschützten Bereichs festgelegt. Dieser kann frei gewählt werden. Achten Sie aber darauf, keine Anführungsstriche im Namen zu verwenden, da diese als Markierungen verwendet werden.

Besondere Aufmerksamkeit sollten Sie der Zeile AuthUserFile schenken. Diese legt den Pfad und den Namen der Datei fest, in der Benutzernamen und Passwörter definiert sind. Dabei gilt sowohl für Linux als auch Windows, dass eine absolute Pfadangabe verwendet werden muss. In Bezug auf Windows ist zu beachten, dass diese Datei auf demselben Laufwerk liegen muss wie das htdocs-Verzeichnis des Webservers und dass der Laufwerkbuchstabe nicht mit angegeben werden darf. Lautet der Pfad zur .htpasswd-Datei beispielsweise D:\Apache2\.htpasswd, so muss die Zeile für Auth UserFile folgendermaßen lauten: /apache2/.htpasswd. Denken Sie daran, die Backslashes durch normale Schrägstriche zu ersetzen. Wie Sie die .htpasswd-Datei anlegen, erfahren Sie weiter unten.

Die vierte Zeile Ihrer .htaccess-Datei mit der Anweisung Require legt fest, welche Benutzer überhaupt Zugriff erhalten dürfen. Die Option valid-user bedeutet in diesem Fall, dass jeder Zugriff erhält, der sich mit einem korrekten Benutzernamen und Kennwort angemeldet hat. Alternativ können Sie auch einzelne Usernamen durch Leerzeichen getrennt auflisten. Die Zeile der .htaccess-Datei könnte folgendermaßen aussehen:

Require user mark jack nicolas

Dies würde den Benutzern mark, jack und nicolas den Zugriff auf das Verzeichnis erlauben.


.htpasswd erzeugen

Apache-Server mit .htaccess konfigurieren

Um die bereits benötigte .htpasswd-Datei zu erzeugen, gibt es ein Programm, das jeder Apache-Installation beiliegen sollte. Linux-Nutzer können in der Konsole das Programm mittels

htpasswd

aufrufen. Windows-User müssen hingegen das Programm aus dem Unterverzeichnis bin des Apache-Installationsverzeichnisses aufrufen, zum Beispiel:


d:\Apache2\bin\htpasswd

Damit die Datei neu angelegt wird, muss als Parameter -c für create übergeben werden. Anschließend folgt der absolute Pfad zur .htpasswd-Datei und der Name des Benutzers, für den ein Eintrag erstellt werden soll. Ein Beispielaufruf:


htpasswd ?c /apache2/.htpasswd mark

Sie werden aufgefordert, das Passwort einzugeben und es anschließend durch erneute Eingabe zu bestätigen. War der Vorgang erfolgreich, erhalten Sie die Meldung Adding password for user xxxx. Möchten Sie weitere Benutzer in die
.htpasswd
-Datei eintragen, so verzichten Sie auf die Angabe des Parameters
-c
:

htpasswd /apache2/.htpasswd jack

Achten Sie unbedingt darauf, die .htpasswd-Datei außerhalb der öffentlich zugänglichen Verzeichnisstruktur abzulegen. Zwar werden die Passwörter verschlüsselt, jedoch ist es bereits ein Risiko, wenn die gesamten Benutzernamen bekannt sind. Im Übrigen werden jedoch alle Dateien, die mit .ht beginnen, vom Apache-Webserver automatisch als Systemdateien erkannt und in Verzeichnisauflistungen oder vor direktem Zugriff geschützt.


Hotlinking und Gegenmaßnahmen

Apache-Server mit .htaccess konfigurieren

Als so genanntes Hotlinking wird die Methode bezeichnet, Dateien oder Bilder auf einer Webseite einzubinden, die physikalisch auf einem vollkommen anderen Server abgelegt sind. Viele Betreiber einer Webseite ersparen sich somit eine Menge Traffic und Bandbreite ? auf Kosten anderer. Es gibt jedoch Mittel und Wege, solchen Schergen das Handwerk zu legen. Dabei wird dem Webserver gesagt, dass er nur dann Daten an einen Client übertragen soll, wenn dieser die Datei über die eigene Seite und nicht über eine fremde angefordert hat.

Dazu sind drei Schritte notwendig: Zuerst muss die Runtime Rewriting Engine aktiviert werden, anschließend die Bedingung festgelegt werden, in welchen Fällen sie eingreifen soll, und zum Schluss, was sie in diesen Fällen unternehmen soll. Die Runtime Rewriting Engine wird in der .htaccess-Datei folgendermaßen eingeschaltet:

RewriteEngine On

Nun folgt die Definition der Bedingungen. Aber woher weiß der Apache-Webserver, dass der Benutzer die Datei nicht vom eigenen Server angefordert hat? Die Antwort darauf zeigt zugleich auch das Problem auf: Er überprüft den HTTP_REFERER-Wert. Das Problem dabei ist, dass Clients, auf denen eine Firewall installiert ist, für diese Eigenschaft meist keinen korrekten Wert liefern. Es kann also durchaus passieren, dass ein Benutzer die Datei vom richtigen Server aus angefordert hat, die Firewall eine korrekte Überprüfung jedoch verhindert und der User somit die Datei nicht abrufen kann. An dieser Stelle müssen Sie entscheiden, ob Sie dies in Kauf nehmen oder eine andere Möglichkeit nutzen wollen, um Ihren Traffic und die Bandbreite gering zu halten. Folgendermaßen wird eine Bedingung definiert:

RewriteCond %
^$ ([])

Der Parameter haystack ist die Zeichenfolge, die überprüft, und needle definiert, wonach gesucht werden soll. Der Heuhaufen ist für unsere Zwecke die Umgebungsvariable {HTTP_REFERER}. Als Nadel im Heuhaufen kann dann ein regulärer Ausdruck eingesetzt werden, der prüft, ob der URL des Servers vorhanden ist. Folgendermaßen könnten die beiden Bedingungen für den URL http://www.mark-lubkowitz.de aussehen:


RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER}
!^http://(www\.)?mark- lubkowitz\.de(/.*)?$ [NC]


Hotlinking und Gegenmaßnahmen 2

Apache-Server mit .htaccess konfigurieren

Die erste Bedingung prüft, ob der Wert von HTTP_REFERER leer ist. Da dies nicht der Fall sein darf, wird die Bedingung mit dem Ausrufezeichen vorder Nadel negiert. Anschließend wird überprüft, ob der
HTTP_REFERER
auf die Domain des Servers passt. Dabei ist www optional und muss nicht enthalten sein. Achten Sie auch darauf, dass Punkte in einem regulären Ausdruck mit einem Backslash entwertet werden müssen, da sie ansonsten als Steuerzeichen erkannt werden. Nach dem Domain-Namen darf dann eine beliebige Kette von Zeichen folgen. Denken Sie auch an das Ausrufezeichen um die »Nadel« zu negieren. Wir suchen zwar nach dem Domain-Namen und dieser muss gefunden werden, aber nur wenn er nicht enthalten ist, soll eine Ersetzung der angeforderten Datei erfolgen. Das Flag NC legt fest, dass die Überprüfung auf Groß- und Kleinschreibung nicht erfolgen soll.

Schließlich muss noch die Regel definiert werden, wie sich der Apache verhalten soll, falls eine Bedingung zutrifft.

RewriteRule $
([flags])

Mit der Regel wird nun festgelegt, dass alle Grafiken, die voneiner fremden Seite aus angefordert wurden, ersetzt werden sollen. Dabei kann jedoch nur durch eine andere Grafik ersetzt werden. Sie sollten also eine Grafik erstellen, die Sie als Alternative angeben können und beispielsweise nohotlinking.jpg nennen.

RewriteRule \.(jpe?g|gif|bmp|png)
$ images/nohotlinking.jpg [L]

Damit sind alle drei Schritte vollständig.Im gesamten Kontext könnte die .htaccess-Datei nun folgendermaßen aussehen oder um die folgenden Zeilen erweitert werden, beispielsweise bei einer gleichzeitigen Benutzer-Authentifizierung:


RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER}
!^http://(www\.)?mark-lubkowitz\.de(/.*)?$ [NC]
RewriteRule \.(jpe?g|gif|bmp|png)$
images/nohotlinking.jpg [L]


Konfiguration anpassen

Apache-Server mit .htaccess konfigurieren

Die Möglichkeiten von .htaccess-Dateien beschränken sich nicht nur auf Authentifizierung oder das Unterbinden von Hotlinking. Je nachdem, welche Einstellungen Sie in der httpd.conf vorgenommen haben, können Sie dem Server nach Belieben für jedes Verzeichnis eine andere Konfiguration zuordnen.

So können Sie festlegen, welche Seiten angezeigt werden, falls ein Fehler auftritt. Der häufigste Fehler trägt die Nummer 404 ? das gewünschte Dokument wurde nicht gefunden. Anstatt die Standardfehlermeldung von Apache auszugeben, können Sie in einem solchen Fall auf beliebige Dokumente umleiten. Folgende Direktive ermöglicht dies:

ErrorDocument

Um bei einem 404er-Fehler also auf das Dokument error/404.html umzuleiten, müssen Sie Ihrer .htaccess-Datei folgende Zeile hinzufügen:

ErrorDocument 404 /error/404.html

Auch das Verhalten des Servers lässt sich beeinflussen, falls lediglich auf ein Verzeichnis auf dem Server verwiesen wird. Anstatt eine formatierte Auflistung des Inhalts auszugeben, kann dies mit

Options ?Indexes

unterbunden werden. Aus Gründen der Sicherheit ist ein solches Directory-Listing in jedem Fall zu unterbinden.

Um ganz auf Nummer sicher zu gehen, können Sie auch den Zugriff auf ein Verzeichnis nur von einem bestimmten Host erlauben oder verbieten. Folgende Zeilen erlauben den Zugriff nur von dem Host mit der IP-Adresse
217.138.31.92
oder dem Namen host.server.net.

Deny from all
Allow from 217.138.31.92
Allow from host.server.net

Und umgekehrt wird dem Host mit der IP-Adresse 217.137.128.5 der Zugriff verboten.

Allow from all
Deny from 217.137.128.5

Im Übrigen bleibt noch zu erwähnen, dass alle Unterverzeichnisse eines mit .htaccess konfigurierten Verzeichnisses die gleichen Einstellungen erben.


Fazit

Apache-Server mit .htaccess konfigurieren

Mit .htaccess-Dateien können Sie viele Einstellungen des Apache-Servers an Ihre eigenen Bedürfnisse anpassen. Die obigen Beispiele zeigen nur einen Teil dieser Möglichkeiten auf. Jedoch sollten Sie nach Möglichkeit wichtige Einstellungen bereits in der Apache-Konfigurationsdatei httpd.conf vornehmen.

Bei einem Shared-Hosting-Angebot ist das direkte Editieren der Konfigurationsdatei
httpd.conf
in der Regel nicht möglich. In diesem Fall bietet die .htaccess-Datei eine Menge Funktionen, um auch das in Sachen eigener Konfiguration oft stark eingeschränkte Webhosting-Paket dennoch in weiten Teilen zu konfigurieren.