Zugriff auf Webseiten mit .htaccess sperren
Hinweis: Der Autor des Artikels ist kein ausgebildeter Fachmann zum Thema. Alle hier getroffenen Aussagen sind nach bestem Wissen sowie gegebenenfalls nach persönlicher Einschätzung des Autors getroffen. Dabei ist es leider nicht auszuschließen, dass einige Angaben veraltet, irreführend oder sonstwie fehlerhaft sind. Letztendlich liegt es in der Verantwortung jedes einzelnen Lesers, die hier gemachten Angaben zu überprüfen und gegebenenfalls weitere Informationen einzuholen. Der Autor kann und will darum keine Garantie oder Haftung für Probleme oder Verluste, die trotz oder wegen der Befolgung der hier genannten Ratschläge eintreten, übernehmen. Jeder Leser hat natürlich die Möglichkeit, die folgenden Ratschläge nicht zu befolgen oder sie gar nicht erst zu lesen.
Wie kann ich (automatisierte) Zugriffe auf meine Webseite zuverlässig verhindern?
Dieser Artikel ist Teil einer Artikelserie zur Optimierung von Webseiten. Er beschreibt die Verweigerung des Zugriffs auf selbstverwaltete Webseiten. Im Artikel "Automatisierte Webseitenzugriffe verhindern" wird beschrieben, warum diese Zugriffe problematisch sein können und im Artikel "Bots mit robots.txt ausperren" werden weiche Sperrmaßnahmen gegen Bots beschrieben.
Inhaltsverzeichnis
Nutzen einer .htaccess-Datei
Eine .htaccess-Datei ist eine Datei, in der man beschreiben kann, welche IP-Adressen auf welche Seiten zugreifen dürfen und welche nicht. Diese Anweisung wird vom (Apache-)Web-Server des eigenen Webangebots ausgelesen und wirkt somit verbindlich und zuverlässig. Die Angabe einer .htaccess-Datei ist eine übliche Methode für Webseitenbetreiber, die einen fremdgemanagten Webserver nutzen und keinen direkten Zugriff auf den Webserver haben. Mit Zugriff auf den Webserver selbst könnte man die im Folgenden beschriebenen Massnahmen auch in den Konfigurationsdateien des Webservers implementieren, was eventuell einen geringen Geschwindigkeitsvorteil brächte.
Bekommt der Webserver eine Anfrage, überprüft er zunächst eventuelle Zugriffsverbote, die in der .htaccess-Datei definiert sind. Findet er darin ein Verbot, liefert er die angefragte Seite nicht aus, sondern liefert stattdessen den Code 403 ("Zugriff verweigert"). Die verbotene Seite hat keinen weiteren Zugriff auf die angefragte Seite, kann keine Inhalte auslesen und keine Sicherheitslücken austesten. In der Grundeinstellung wird die verweigerte Anfrage trotzdem in ggf. erstellten Logfiles vermerkt.
Da die .htaccess eine IP-Adresse auf Ebene des Webservers verbietet, ist sie zwar ein zuverlässiger Schutz, der aber prinzipbedingt zumindest zwei Nachteile hat. Erstens beschränkt sich das Verbot nur auf explizit genannte Aufrufer-Adressen - benutzt der Aufrufer eine nicht gesperrte IP-Adresse (diese lassen sich oftmals leicht wechseln) hat er den normalen Zugriff auf die Seite. Häufig erfolgen unerwünschte Zugriffe von IP-Adressen, die der Aufrufer nur vorrübergehend gekapert hat. Sollte die IP-Adresse später wieder "sauber" werden, bleibt der Zugriff dennoch gesperrt, solange die IP-Adresse in der Sperrliste steht.
Einrichten einer .htaccess-Datei
Eine .htaccess-Datei ist eine einfache Textdatei mit dem Dateinamen ".htaccess". Häufig befindet sich eine solche Datei bereits im Basisverzeichnis einer Anwendung, ansonsten kann sie neu erstellt werden. Diese Datei besteht aus einer Reihe von Angaben für den Webserver. Darunter können auch Angaben sein, die den Webserver anweisen, Anfragen von bestimmten IP-Adressen zu verweigern. Diese Sperrung kann die ganze Webseite oder nur Teilbereiche davon umfassen. Zudem können einzelne IP-Adressen blockiert werden oder ganze Adressbereiche.
Achtung: Da die .htaccess-Datei das Verhalten der Webseite massiv beeinflussen kann, sollten Sie vor jeder Änderung dieser Datei eine Sicherheitskopie der bestehenden Dateiversion anlegen. Zudem sollten Sie nach der Änderung sofort kontrollieren, ob die Webseite wie gewünscht funktioniert. Bedenken Sie, das schon ein Tippfehler in der .htaccess-Datei dazu führen kann, dass der Webserver die Webseite(n), die von der Datei betroffen sind, nicht korrekt ausliefern kann. Sollte die gerade gemachte Änderung ein Problem hervorrufen, dann sollte das Wiederherstellen des vorigen Zustands das entstandene Problem sofort wieder beseitigen.
Im Folgenden soll es darum gehen, wie man den Zugriff auf seine Webseite für bestimmte IP-Adressen sperren kann. Dies kann durch folgenden Codeschnipsel geschehen, den man in einer .htaccess-Datei anlegt bzw. erweitert:
order allow,deny deny from 123.12.123.248 deny from 123.12.123. deny from 123.12. deny from 123.12.123.0/27 allow from all
Das obige Beispiel beschreibt den Inhalt beziehungsweise den Ausschnitt einer .htaccess-Datei, die bestimmten IP-Adressen den Zugriff auf alle Seiten und Elemente der Webseite verbietet. Diese IP-Adressen (und beliebige Weitere) sind dabei aufgeführt zwischen der einleitenden Zeile "order allow,deny" und der abschließenden Zeile "allow from all". Zwischen der einleitenden und abschließenden Zeile werden dann die IP-Adressen genannt. Im Beispiel sind dies:
deny from 123.12.123.248 die IP-Adresse "123.12.123.248" deny from 123.12.123. der IP-Adressbreich "123.12.123." (also alle IP-Adressen von 123.12.123.0 bis 123.12.123.255) - die vorige Zeile "123.12.123.248" wäre dadurch überflüssig deny from 123.12. der IP-Adressbreich "123.12." (also alle IP-Adressen von 123.12.0.0 bis 123.12.255.255) - die vorigen Zeilen "123.12.123." und "123.12.123.248" wären dadurch überflüssig deny from 123.12.123.0/27 der IP-Unterbereich "123.12.123.0" bis "123.12.123.31"
Bei letzterer Angabe handelt es sich um IP-Unterbereiche die durch eine "Network Prefix Length" beschrieben werden. Solche Hilfangaben sind für Sperrlisten hilfreich, da dadurch IP-Blöcke beschrieben werden, wie sie üblicherweise an einen Anbieter vergeben werden. Weitere grundlegende Angaben zu dieser Schreibweise findet man im Hilfeartikel bei Wikipedia. Unter anderen bei http://www.csgnetwork.com/ipinfocalc.html findet man ein Tool, mit dem man solche IP-Unterbereichsangaben testen kann.
Die .htaccess-Datei muss in das Basisverzeichnis eines Webauftritts kopiert werden und wirkt auf alle URLs, Webseiten und Elemente, die darunter gehostet werden. Bei Bedarf kann man in Unterverzeichnissen weitere .htaccess-Dateien speichern, die dann nur für den entsprechenden Unterbereich gelten. Wichtig ist die Schreibweise ".htaccess" für den Namen der Datei (Punkt am Anfang, Kleinschreibung wichtig, kein Punkt oder weitere Angaben am Namensende).
Der Webserver wird vor jedem Seitenzugriff nach einer .htaccess-Datei suchen und damit wird die Sperre sofort wirksam. Man kann die Wirksamkeit der Sperre testen, indem man temporär seine eigene IP-Adresse in die Sperrliste aufnimmt und schaut, ob man selbst dadurch gesperrt wird. Die eigene IP-Adresse lässt sich zum Beispiel durch Aufruf bestimmter Webseiten wie etwa http://checkip.dyndns.org/ herausfinden. Beim Erstellen der .htaccess-Blockierliste sollte man zudem darauf achten, dass man nicht unabsichtlich falsche oder zu groß bemessene Addressbereiche verbietet, weil man ansonsten ungewollt eine sehr große Zahl eigentlich gewünschter Besucher aussperren kann und somit seiner Webseite nachhaltig Traffic entziehen kann.
Zu sperrende IP-Adressen finden
Das Hauptproblem beim Erstellen einer .htaccess-Datei ist das Herausfinden der IP-Adressen, die man sperren möchte. Um diese herauszufinden, gibt es mehrere Methoden.
Logfiles durchsuchen
Sofern man für seinen Webauftritt Logfiles erstellt oder zur Verfügung hat, kann man diese nach unerwünschten Zugriffen durchsuchen. Dies sind insbesondere Zugriffe durch erkennbare Bots, die sich nicht durch robots.txt aussperren lassen und Zugriffe durch Schadbots. Letztere erkennt man häufig daran, dass sie Seiten aufrufen, die es nicht gibt (was im Logfile durch einen Fehlercode 404 aufgeführt ist), wie etwa
"GET /images/jdownloads/screenshots/nyet.gif HTTP/1.1"
Sofern man das im obigen Beispiel genannte Bild nicht installiert hat, aber diverse Zugriffe darauf findet, ist dies ein Hinweis für eine Schwachstelle in obigen (nicht installierten) Programm, die von Bots ausgetestet wird.
Auch erfolgreiche Zugriffe wie etwa auf die "wp-login.php" eines (tatsächlich installierten) Wordpressblogs deutet auch Schadbots hin, wenn man nicht sicher klären kann, dass sie von einem selbst oder einem anderen legitimierten Nutzer erfolgt sind.
Jede der auffälligen IPs sollte man der Sperrliste hinzufügen und diese dann auf den Webserver hochladen. Um sicher zu gehen, dass man dabei keinen Tippfehler gemacht hat (was zu einer Fehlermeldung auf der eigenen Webseite führen würde), sollte man die eigene Seite danach testweise aufrufen.
Es empfiehlt sich, von den verschiedenen Versionen der .htaccess Sicherheitskopien zu behalten, falls man einmal auf eine frühere Version zurückspringen will. Der Übersicht halber (es werden meist sehr schnell viele IPs, die man sperren möchte) sollten die gesperrten IPs nach Nummern sortiert werden.
IP-Bereiche sperren
Mit der Zeit werden einige IP-Bereiche eine Häufung von Einträgen aufweisen. Dann kann man entweder den erkannten Bereich aufs Geratewohl sperren (Schreibweisen siehe obiges Beispiel). Das geht zwar schnell, birgt aber die Gefahr, auch Unschuldige mitzusperren. Oder man kann stattdessen Nachforschungen anstellen. Hier bietet sich ein "Whois-Lookup" wie etwa über http://www.heise.de/netze/tools/whois/ an, der nicht nur verrät, wer der Besitzer des IP-Bereichs ist, sondern auch, wie groß dieser Bereich ist. Üblicherweise ist bei den Daten auch eine Webadresse angegeben, die man mit einem gesicherten Browser aufrufen kann, und so meist herausfindet, wer der Anbieter ist. Wenn man dem Anbieter nicht vertrauen mag, kann man gleich den ganzen genannten IP-Bereich dieses Anbieters sperren. Insbesondere bietet sich oft das Sperren von reinen Hosting-Providern an. Hinter deren IP-Adressen verbergen sich meist Webserver und keine menschlichen Nutzer und die Betreiber der meisten Webseiten können auf Aufrufe von anderen gemieteten Webservern sehr gut verzichten.
Internet durchsuchen
Mit etwas Suchgeschick lassen sich im Internet Namen und Beschreibungen von IP-Adressen oder IP-Bereichen finden, die von anderen Nutzern als potentiell störend angesehen werden, allerdings muss man hier darauf vertrauen, dass diese Angaben korrekt sind und den eigenen Vorstellungen entsprechen.
Länder aussperren
Viele Webseitenbetreiber bevorzugen das Aussperren kompletter Länder von Ihrem Angebot. Leider ist dies nicht so einfach, da die IP-Adressen und IP-Bereiche nicht Ländern, sondern Betreibern und Firmen zugeordnet sind. Es gibt jedoch Anbieter wie etwa http://incredibill.me/htaccess-block-country-ips, die Listen erstellen über IP-Adressen einzelner Länder. Die kann man dann in seine Sperrliste eintragen. Das Problem bei solchen Listen ist, dass sie sich im Laufe der Zeit immer mal wieder ändern und nie ganz genau sind. Außerdem werden konsequent alle Bewohner (oder auch Touristen und Besucher) eines Landes ausgesperrt.
Für das radikale Ausperren spricht aber immerhin die Tatsache, dass einige Länder mit einer besonders hohen Quote von Schadbots auffallen. Insbesondere bei Webseitenbetreibern, deren Angebot rein deutschsprachig ist und/oder sich nur auf einen enggefassten geographischen Raum bezieht, kann das großflächige Aussperren ganzer Länder eine effektive (Holzhammer-)Methode sein, die letztlich nur wenige erwünschte Besucher aussperrt.
Fazit
Mit der .htaccess-Datei lassen sich Besucher effektiv aussperren - sofern man Ihre IP-Adresse kennt. Insbesondere bei schädlichen Bots ist diese Methode sehr wichtig, um sich vor Angriffen auf die eigene Webseite zu schützen. Das Problem bei .htaccess-Datei ist allein, die richtigen Adressen zu finden, die man von seiner Webseite aussperren will. Wenn man beim Erstellen der Sperrlisten einen Fehler macht oder zu großzügig vorgeht, kann man aus Versehen auch schnell erwünschte und unter Umständen auch sehr wichtige Besucher (wie den Google-Bot) aussperren. Wenn man detaillierte Sperrlisten erstellt, bedeutet das häufig einen hohen Arbeitsaufwand und allzulange Sperrlisten bremsen unter Umständen den Webserver aus. (Allerdings scheinen auch sehr lange .htaccess-Dateien noch gut zu funktionieren: http://www.pooq.org/fyi/2015/01/grose-von-htaccess-dateien/)
In optimalen Fall sollte man zudem die Sperrlisten regelmäßig überprüfen, da inzwischen eventuell IP-Bereiche neu vergeben wurden oder vormals bösartige IP-Adressen mittlerweile wieder "sauber" geworden sind.
Folgeartikel
Verwandte Artikel
- Geschwindigkeitsoptimierung von Webseiten
- Ladezeiten von Wikimedia-Wikis verringern
- Ladezeiten von Wordpressblogs minimieren
- Messprogramme für Webseiten
Weitere Artikel: