Wie sperrt man eine IP mit .htaccess?
Die .htaccess-Datei ist eines der leistungsstärksten Werkzeuge für Webserver-Administratoren auf Apache-Servern. Sie ermöglicht eine feinkörnige Kontrolle des Zugriffs auf Ihre Website, ohne die Hauptserver-Konfiguration zu berühren. Zu den häufigsten Anwendungsfällen gehört das Blockieren unerwünschter IP-Adressen — bösartige Bots, Scraper, Angreifer oder einfach Besucher, deren Zugriff Sie einschränken möchten. Hier sind alle verfügbaren Methoden, von der einfachsten bis zur fortgeschrittensten.
Voraussetzungen: mod_authz_host aktivieren
IP-Zugriffskontroll-Direktiven in .htaccess erfordern, dass das Apache-Modul mod_authz_host auf Ihrem Server aktiviert ist. Dies ist standardmäßig bei nahezu allen Shared-Hosting-Umgebungen und modernen Apache-Servern der Fall. Wenn Sie Ihren eigenen Server verwalten, überprüfen Sie dies mit:
apache2ctl -M | grep authzBeachten Sie auch, dass sich die Syntax leicht zwischen Apache 2.2 und Apache 2.4 (der aktuellen Version) unterscheidet. Beide Syntaxen werden unten dargestellt.
Eine einzelne IP sperren
Dies ist der einfachste Fall. Fügen Sie diese Zeilen in Ihre .htaccess-Datei im Stammverzeichnis Ihrer Website ein:
Apache 2.4 (aktuelle Syntax):
<RequireAll>
Require all granted
Require not ip 123.456.789.0
</RequireAll>Apache 2.2 (veraltete Syntax):
Order Allow,Deny
Allow from all
Deny from 123.456.789.0Ersetzen Sie 123.456.789.0 durch die IP-Adresse, die Sie sperren möchten. Der Besucher erhält einen 403 Forbidden-Fehler.
Mehrere IPs gleichzeitig sperren
Sie können so viele Adressen wie nötig hinzufügen, entweder in derselben Zeile oder in separaten Zeilen aufgelistet:
Apache 2.4:
<RequireAll>
Require all granted
Require not ip 123.456.789.0
Require not ip 98.76.54.32
Require not ip 11.22.33.44
</RequireAll>Apache 2.2:
Order Allow,Deny
Allow from all
Deny from 123.456.789.0 98.76.54.32 11.22.33.44Einen IP-Bereich sperren (Subnetz)
Wenn Sie einen gesamten Adressblock sperren müssen — zum Beispiel alle IPs eines ISP oder eines Rechenzentrums — können Sie die CIDR-Notation oder das Subnetz-Präfix verwenden:
Per Präfix (alle IPs beginnend mit 123.456.789):
<RequireAll>
Require all granted
Require not ip 123.456.789
</RequireAll>Per CIDR-Notation (/24-Block, d.h. 256 Adressen):
<RequireAll>
Require all granted
Require not ip 123.456.789.0/24
</RequireAll>Weitere gängige Masken-Beispiele:
- /32 — eine einzelne IP
- /24 — 256 Adressen (z.B. 123.456.789.0 bis 123.456.789.255)
- /16 — 65.536 Adressen (z.B. 123.456.0.0 bis 123.456.255.255)
- /8 — 16 Millionen Adressen (z.B. 123.0.0.0 bis 123.255.255.255)
Eine IP in einem bestimmten Verzeichnis sperren
Wenn Sie den Zugriff einer IP nur auf ein Unterverzeichnis Ihrer Website beschränken möchten (z.B. Ihren Administrationsbereich), platzieren Sie eine .htaccess-Datei in diesem spezifischen Verzeichnis mit der Sperregel:
<RequireAll>
Require all granted
Require not ip 123.456.789.0
</RequireAll>Gut zu wissen: Sie können auch <Directory>-, <Files>- oder <Location>-Blöcke direkt in der httpd.conf oder apache2.conf-Datei für noch präzisere Kontrolle verwenden — zum Beispiel eine IP nur für eine bestimmte Datei sperren. Dieser Ansatz ist leistungsfähiger als .htaccess, da Apache die Datei nicht bei jeder Anfrage lesen muss.
Whitelist: nur bestimmte IPs erlauben
Die umgekehrte Operation ist ebenfalls möglich: nur einer oder mehreren bestimmten IPs Zugriff gewähren und alles andere blockieren. Dies ist besonders nützlich zum Schutz einer Administrationsoberfläche:
Apache 2.4:
Require ip 123.456.789.0
Require ip 98.76.54.32Apache 2.2:
Order Deny,Allow
Deny from all
Allow from 123.456.789.0
Allow from 98.76.54.32Jede nicht gelistete IP erhält einen 403-Fehler. Beachten Sie, dass wenn Ihre IP dynamisch ist (sie ändert sich mit jeder Verbindung), dieser Ansatz Sie selbst sperren kann — bevorzugen Sie dann eine Whitelist per Subnetz-Bereich.
Gesperrte IP umleiten statt 403 zurückzugeben
Statt einen rohen 403-Fehler anzuzeigen, können Sie gesperrte IPs auf eine andere Seite umleiten — eine benutzerdefinierte Fehlerseite oder sogar eine andere URL:
RewriteEngine On
RewriteCond %{REMOTE_ADDR} ^123.456.789.0$
RewriteRule ^ /zugriff-verweigert.html [R=302,L]Beachten Sie die Maskierung von Punkten mit . in der RewriteCond-Bedingung — Punkte haben in regulären Ausdrücken eine besondere Bedeutung (sie entsprechen beliebigen Zeichen) und müssen daher maskiert werden, damit sie nur einem wörtlichen Punkt entsprechen.
Nach User-Agent statt IP sperren
Einige bösartige Bots oder Scraper wechseln regelmäßig ihre IP, behalten aber denselben User-Agent. In diesem Fall ist das Sperren nach User-Agent effektiver:
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^(BadBot|EvilScraper|MaliciousSpider) [NC]
RewriteRule .* - [F,L]Das Flag [F] gibt einen 403-Fehler zurück, [NC] macht den Vergleich Groß-/Kleinschreibungs-unempfindlich. Sie können so viele User-Agents wie nötig hinzufügen, indem Sie sie mit | trennen.
| Anwendungsfall | Empfohlene Methode | Schlüsselsyntax |
|---|---|---|
| Einzelne IP sperren | Require not ip | Require not ip 1.2.3.4 |
| Mehrere IPs sperren | Require not ip (mehrfach) | Require not ip 1.2.3.4 (wiederholt) |
| /24-Bereich sperren | CIDR-Notation | Require not ip 1.2.3.0/24 |
| Bestimmte IPs auf Whitelist | Whitelist | Require ip 1.2.3.4 |
| Umleiten statt sperren | RewriteRule | RewriteCond %{REMOTE_ADDR} |
| Nach User-Agent sperren | RewriteRule + HTTP_USER_AGENT | RewriteCond %{HTTP_USER_AGENT} |
Gut zu wissen: Änderungen an der .htaccess-Datei werden sofort von Apache übernommen, ohne Serverneustart. Allerdings kann eine fehlerhafte .htaccess-Datei Ihre Website mit einem 500-Fehler vollständig unzugänglich machen. Testen Sie Ihre Änderungen immer in einer Entwicklungsumgebung oder sichern Sie die Originaldatei vor Änderungen in der Produktion. Wenn Ihre Website nach der Änderung einen 500-Fehler zurückgibt, stellen Sie sofort die frühere Version der Datei wieder her.
Nicolas,