Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

mod_rewrite und IP aussperren

Alles zum Thema: Robots, Spider, Logfile-Auswertung und Reports
haha
PostRank 9
PostRank 9
Beiträge: 1065
Registriert: 03.04.2006, 18:08
Wohnort: Bi Hamborg

Beitrag von haha » 13.05.2006, 10:43

IPs mit mod_rewrite auszusperren, ist meist zu kompliziert und verbrät immer unnötige Rechenzeit. Statt

RewriteEngine on
RewriteCond %{REMOTE_ADDR} ^127\.0\.0\.1 [OR]
RewriteCond %{REMOTE_ADDR} ^192\.168\.0\. [OR]
RewriteRule ^.* - [F]

reicht auch

Order deny,allow
Deny from 127.0.0.1 192.168.0

Einzelne IPs (erste RewriteCond-Zeile, bzw. erste Deny-IP) und grobe Blöcke (an Bytegrenzen der IP, zweite RewriteCond-Zeile bzw. zweite Deny-IP) sind auch die gebräuchlisten Anwendungsfälle, insofern kommt man damit gut und vor allem leicht über die Runden.

Für detailiertere Netzbereiche wie

RewriteCond %{REMOTE_ADDR} ^192.168.(12[89]|13[0-7]). [OR]

(192.168.128.0 bis 192.168.137.255) braucht man allerdings zugegebenermaßen einen Taschenrechner und etwas Geschick zum Erstellen der Netzmaske (die Maske bestimmt, welche Bits einer IP zum Vergleich herangezogen werden). Die obige RewriteCond-Zeile würde folgender Deny-Zeile enstprechen:

Deny from 192.168.128.0/255.255.248.0 192.168.135.0/255.255.254.0

Vor dem Schrägstrich steht wie bei den ersten Beispielen die Vorgabe-IP, die übereinstimmen muss (bzw. die mit Deny ausgesperrt werden soll), hinter dem Schrägstrich die Maske, die bestimmt, welche Stellen der IP (lies: welche Bits) verglichen werden (wie wollen ja einen Bereich und deshalb nicht die vollständige IP vergleichen).

Falls hier jemand gerne knobelt, kann ich das auch mal im Detail erklären.


Davon abgesehen sind die Beispiele auf der angegebenen Seite unsauber:

RewriteCond %{REMOTE_ADDR} ^10.1.23.
# Schliesst 10.1.23.* aus

Sowas schließt mitnichten nur 10.1.23.n aus, sondern auch 10.1.230.n bis 10.1.239.n. Statt 255 IPs macht man damit 2805 IPs platt.
Der Punkt steht in Mustern immer für ein beliebiges Zeichen, also bei IPs nicht nur für den Punkt zwischen den Bytes, sondern auch für 0-9. Korrekt wäre ^12\.1\.12\. . Natürlich fällt das nur bei bestimmten IPs ins Gewicht, Schlamperei ist es aber trotzdem.