Website-Zugriffe anhand einer bestimmten IP-Adresse sperren oder umleiten

Dieser Tage stellte ich mit Überraschung fest, dass auf einer der von mir betriebenen Websites die sogenannten Pageviews beim rund 20-fachen der sonst üblichen Werte lagen. Auch wenn hier höhere Werte sicherlich gewünscht sind, ist ein solches Ereignis leider meist das Ergebnis von weniger netten Besuchern und siehe da: ein Blick in die Log-Dateien zeigte, dass über einen Server aus der Ukraine versucht wurde, das Gästebuch zuzuspamen. Dank eingebauer Anti-Spam-Algorithmen gelang das zwar nur in einem Fall, aber mehrere 10.000 unötiger Seitenaufrufe pro Tag müssen trotzdem nicht sein. Also musste ich selber auch mit härteren Bandagen kämpfen und dachte mir, die hierfür geeigneten Methoden könnte ich gleich mal als kleines Tutorial veröffentlichen!

Also wie kann man sich gegen ungewünschte Besucher wehren, die mit einer festen, bestimmbaren IP versuchen, Zugriff auf die Website zu nehmen. Hier ein paar Ideen:

PHP: $_SERVER[„REMOTE_ADDR“

  1. if($_SERVER["REMOTE_ADDR"]=="111.123.456.78")
  2. {
  3. header("Location: http://www.bka.de");
  4. exit();
  5. }

Hier wird der Besucher anhand der IP identifiziert und auf eine andere Website umgeleitet.

Der grosse Vorteil ist, dass diese Lösung auf den meistern Servern umgesetzt werden kann. Die Nachteile an dieser Methoden sind, dass die Website auf Basis PHP erstellt sein muss, der Code ggf. in jeder PHP-Datei eingebaut werden muss (sofern es keine zentrale Datei gibt, die von allen anderen aufgerufen wird, also z.B. Konfigurations-Dateien) und der Besucher natürlich i.d.R. mitbekommt, dass er eine ganz andere Seite angezeigt bekommt, als gewünscht.

htaccess: order

  1. order allow,deny
  2. deny from 111.123.456.78
  3. allow from all

Die Datei .htaccess ist eine Server-Konfigurationsdatei, in der manuelle Anpassungen an den Servereinstellungen vorgenommen werden können. Nicht auf allen Servern und insbesondere bei billigengünstigen Webhostern ist der Zugriff gestattet und wenn doch, oftmals reglementiert. Der o.g. Code müsste aber bei sehr vielen Anbietern funktionieren und sperrt den Besucher komplett aus, d.h. er bekommt einen Fehlerhinweis.

Hier ist der grosse der Vorteil, dass in einer einzigen Daten zentral die Sperre eingetragen wird. Nachteilig ist, dass auch hier der Besucher es i.d.R. mitbekommt und dass es nicht bei allen Anbietern zugelassen wird, eine htaccess-Datei zu nutzen.

htaccess: mod_rewrite 1

Die erste Methode mittels PHP kann auch via der Datei .htaccess vorgenommen werden:

  1. RewriteEngine on
  2. RewriteCond %{REMOTE_ADDR} ^(111\.123\.456\.78)
  3. RewriteRule .* http://www.bka.de [R=301,L]

Auch hier wird die IP-Adresse genutzt, um den Besucher auf eine andere Website umzulenken, so dass er gar nicht erst auf das eigentliche Ziel Zugriff nehmen kann. Vorteil ist erneut, dass in einer einzigen Daten zentral die Sperre eingetragen wird. Die Nachteile sind, dass hierfür auf dem Server mod_rewrite genutzt werden darf, was leider immer noch nicht überall üblich ist, und dass der Besucher auch hier i.d.R. mitbekommt, dass er umgeleitet wird und sich andere Methoden überlegen kann.

htaccess: mod_rewrite 2

Hier kommt nun die Lösung, die ich am effektivsten finde, denn damit bekommt der Besucher nicht sofort mit, dass nur er ausgesperrt wird:

  1. RewriteEngine on
  2. RewriteCond %{REMOTE_ADDR} ^(111\.123\.456\.78)
  3. RewriteCond %{REQUEST_URI} !^wartung\.html
  4. RewriteRule .* /wartung.html

Anstelle den Besucher auf eine dritte Website umzulenken, schicke ich Ihn auf eine sogenannte Wartungsseite. Dadurch bekommt er den Eindruck, dass die Website aktuell bearbeitet wird und ist nicht verwundert, dass er seine Spam-Aktivitäten nicht fortsetzen kann. Und wenn er dannbeim nächsten Besuch immer noch die Wartungsseite online hat, gibt er seine Besuche hoffentlich auf 🙂

Fazit:

Natürlich können diese Maßnahmen nicht immer 100%ig greifen. Immer dann, wenn der „Angreifer“ seine IP unterdrückt oder wechselt, laufen diese Ideen leider ins Leere. Aber zumindest kann man mit wenig Aufwand zunächst reagieren und hoffen, dass der ungewollte Besucher sich ein leichteres Ziel sucht.

32 Kommentare to “Website-Zugriffe anhand einer bestimmten IP-Adresse sperren oder umleiten”


  1. Bitte, wie würde das ausehen mit mehrerer IP Adressen?PHP: $_SERVER[„REMOTE_ADDR“htaccess: mod_rewrite 1htaccess: mod_rewrite 2


  2. Hallo Richard,

    für welche der o.g. Varianten bräuchtest Du eine Lösung mit mehreren IPs? Die PHP-Variante?

    VG Frank


  3. Hallo!
    Die PHP Variante finde ich etwas kompliziert. Einfacher ist die .htaccess aber die mod_revirte1 oder .htaccess mod_revirte2. Die funktionieren auch bei mir. Aber wenn ich mehere ip`s blokieren will wie soll ich die eingeben. Die Variante .htaccess order könne ich schon, funktioniert auf meinem Server nicht. Danke
    Richard


  4. Wenn man mehrere IPs bei den Lösungen htaccess: mod_rewrite 1 resp. htaccess: mod_rewrite 2 nutzen will, geht das folgendermassen:

    RewriteCond %{REMOTE_ADDR} ^(111.123.456.78) [OR]
    RewriteCond %{REMOTE_ADDR} ^(222.231.458.78) [OR]
    RewriteCond %{REMOTE_ADDR} ^(333.123.664.78)

    Also einfach mehrere Zeilen mit der RewriteCond %{REMOTE_ADDR} … einfügen und mit [OR] verknüpfen.

    Ich hoffe, ich habe das verständlich ausgedrückt 🙂

    VG Frank


  5. Danke Frank. Es funktioniert und Heute war erste Spamfreie Tag.


  6. Klasse,  das freut mich, dass ich helfen konnte.
    Viel Erfolg weiterhin


  7. hallo,
    geht das auch mit eine webadresse ? also alles was von google.com kommt ..ist nur ein beispiel…. ?

    order allow,deny
    deny from google.de
    allow from all


  8. Hi,

    sorry für die späte Antwort, aber ich war im Urlaub. Meines Erachtens müsste das auch so mit Webadressen funktionieren, habe das aber jetzt nicht getestet.

    CU

    Frank-Andre


  9. Hallo,wie muss der Code aussehen, wenn man die htaccess: order Variante nimmt und damit mehrere IP-Adressen sperrt? GrußWoldemar


  10. Hi Woldemar,

    das ist recht einfach, dazu müssen die einzelnen IP in separate deny from Zeilen aufgeführt werden, also z.B.:

    order allow,deny
    deny from 111.123.456.78
    deny from 222.123.456.78
    allow from all

    VG Frank


  11. Hallo Frank, danke für die Antwort.
    Gruß
    Woldemar


  12. Na, da wird sich das BKA aber freuen 😉 Ich lasse die Spammer ruhig ihren Müll eintragen. In meinen versende-Scripten frage ich dann ab, ob es sich um Spam oder um eine korrekte Mail handelt. Echte User geben z. B. nie [url=xxx.de] oder ähnliches ein. Und ein kleiner Trick hilft um festzustellen, ob das Formular per Hand abgeschickt wurde oder nicht – du darfst gern mal nachfragen.
    Wird ein Post von meinem Programm als Spam erkannt, wird die IP automatisch zu einem Logfile hinzugefügt und der User kehrt automatisch zur Homepage zurück. In Kürze werde ich einfach meine „schwarze liste“ abfragen, wenn jemand auf die Formulareingabe zugreifen will. Ist der User gelistet, wird auch gar kein Formular mehr angezeigt.
    bei Rückfragen darfst du dich gern bei mir melden.
    Michael


  13. Hallo Michael,

    Deine Vorgehensweise ist auf den ersten Blick nicht verkehrt, hat aber zwei Haken!

    Ich bin z.B. einer der User, der Links gern auch mal als BB-Code einträgt resp. gibt es Formulare, die BB-Codes anbieten. Und dann werden auch echte User blockiert. In einer ähnlichen Routine frage ich ab, ob es mehr als 2 URLs gibt, dann wandert das ganze zur manuellen Freigabe, weil das auf Spam hindeutet. Aber ich würde nie daraufhin automatisch eine Blacklist anlegen, weil dann auch echte User darauf landen können.

    Auch das Thema IP-Sperre kann kontraproduktiv sein. Einerseits nutzen viele Spamtools falsche IPs – d.h. es wird eine andere IP übertragen, als der Spammer wirklich nutzt – und bei den meisten Usern wechseln die IPs täglich. Dementsprechend besteht das Risiko, dass ein echter User aufeinmal eine bei Dir gesperrte IP hat und gar nichts dafür kann.

    Es ist halt leider ein nicht einfach zu lösendes Problem 🙂

    VG

    Frank-Andre Thies


  14. Hi leute,
     
    ich bin einfach zu blöd und hoffe ihr könnt mir helfen. Ich habe einen Webspace und dort 2 Ordner, nun möchte ich das eine bestimmte IP auf einen bestimmten Ordner kommt und alle anderen auf den anderen Ordner…
     
    ich krieg die Umleitung einer speziellen ip auf einen bestimmten ordner hin, aber wie sage ich nun, dass alle anderen auf einen anderen Ordner sollen?
    danke!


  15. Sensationeller Tipp! Vielen Dank! Mindestens 5 Sterne dafür. Ich hatte jemanden, der mich komplett ausspionieren wollte. Dem ist nun der Finger gezeigt 🙂


  16. […] Es gibt diverse Tricks um automatisierte Anfragen in die Irre zu führen. Ich entschied mich für diese, bei der man bestimmten IPs vorgaukelt, dass sich die Webseite (also meine) im Wartungsmodus […]


  17. Hallo,

    klasse Tipp! Bin über google hier her gekommen, da meine Pages aktuell täglich von mehreren hundert verschiedenen Ip’s, aus allen möglichen Ländern zugespammt werden. Bei den Kommentaren kommen die Dank Spamschutz bisher zum Glück ncht durch, ich frage mich jedoch, wie ich über 300!! Ip’s per .htacess sperren soll, die wechseln ja dauernd 🙁
    Das nervt und verfälscht die Statistik.

    Gruß
    Marco


  18. Hallo Marco,

    diese Methode ist wirklich nur dafür geeignet, ein paar eindeutige IPs zu sperren und ist keine Massenabwehr. Wenn Du schreibst, dass Du „zugespammt“ wirst, es aber nicht die Kommentare betrifft: wo liegt Dein konkretes Problem, was wird genau zugespammt?

    VG

    Frank


  19. Hi…
    Gibt es die Möglichkeit, dass der Zugriff nur über eine IP erlaubt ist und alle anderen IPs woanders hinlaufen?
     
    Danke
     
    Till


  20. Hallo Till,

    klar das geht auch – wenngleich ich aktuell nicht verstehe, warum Du das willst 🙂

    Bei der htaccess mod_rewerite Variante 2  müsste  das wie folgt aussehen:

    RewriteEngine on
    RewriteCond %{REMOTE_ADDR} !^(111.123.456.78)
    RewriteCond %{REQUEST_URI} !^wartung.html
    RewriteRule .* /wartung.html 

    Durch das ! in der zweiten Zeile  werden alle Aufrufe, die NICHT von der IP kommen, umgeleitet.

    Müsstest Du aber mal austesten. Oder wolltest Du eine andere Variante nutzen?

    VG

    Frank-Andre


  21. Hi…
    Danke! Ganz einfach, bei mir soll eine Anwendung nur auf einem Rechner mit fester IP laufen. Andere sollen diese Anwendung über das Internet nicht aufrufen können.
     
    Vielen Dank!
     
    Till


  22. OK, verstehe. Hat es denn geklappt?


  23. ja, läuft bestens 😉
    danke!
     
    Till


  24. Ich habe mit zunehmenden „Besucherzahlen“ zu kämpfen, die unsere Seite ausspionieren möchten. Da wird zum Beispiel versucht php Dateien auszulesen oder auch die liesmich, bzw. readme datei, um an die Versionsnummer des WP Blogs zu kommen. Glücklicherweise kann man den Zutritt zu diesen Dateien mit recht einfachen Mitteln über die .htaccess Datei sperren. Dies ist eine bessere Lösung, als diese zu löschen, da sie beim nächsten Update/ Upgrade dann wieder geladen würden. Bekannte Angreifer habe ich ebenfalls über die .htaccess Datei geblockt.


  25. Hallo,

    ich bin auch über die Google Seite hier gelandet, da ich herausfinden wollte wie ich eine spezielle IP sperren kann. Das funktioniert mit der zuletzt vorgestellten Methode bei mir sehr gut. Danke dafür.

    Ich habe in den Kommentaren gelesen, dass Jemand Probleme mit mehren 1000enden IPs hat. Wäre es hier ggf. hilfreich und möglich alle IPs aus einem oder mehreren Ländern zu sperren?


  26. Hallo Gavin,

    freut mich sehr, dass mein Artikel Dir weitergeholfen hat.

    Eine Sperrung von Ländern anhand IPs ist eine interessante Idee. Habe unter http://www.ipaddresslocation.org/ip_ranges/get_ranges.php eine Übersicht von IP-Ranges gefunden, die regelmäßig aktualisiert wird. War mir bisher offen gestanden so auch nicht bekannt 🙂

    VG

    Frank-Andre


  27. Der folgende Code hat mich fast zur Verzweiflung gebracht, da ein Test mit eigenener IP zu einem 500 Error führte.
    RewriteCond %{REQUEST_URI} !^wartung\.html

    Hier fehlte offenbar nur ein Slash vor wartung…
    So funktioniert es jetzt jedenfalls wie gewünscht.
    RewriteCond %{REQUEST_URI} !^/wartung\.html

    Danke für diesen Tipp!
    Maik


  28. Hallo Frank-Andre,

    vielen Dank für deine Infos.

    Ich möchte gerne einzelne Domains sperren, z.B.

    traffic.getmyads.com

    contenta-z.com

    Leider habe ich keine IP’s von diesen Seiten.

    Vielen Dank für deine Hilfe

    Karsten


  29. Hallo Karsten,

    sorry für meine späte Reaktion. Dein Kommentar war leider im Spam gelandet 🙁

    Ich kenne leider selber keine Lösung zum Sperren von Domains ohne Hinterlegung einer IP-Adresse. Solltest Du an anderer Stelle etwas dazu gefunden haben, wäre ich für eine Info sehr dankbar!

    VG

    Frank-Andre


  30. Kann ich ganze Regionen sperren?

    Danke!
    RL


  31. Hallo Robert,

    schwieriges Thema, habe ich mich noch nicht mit beschäftigt und habe daher auch keine Lösung parat. Eventuell könnte Dir die Website https://www.maxmind.com/de/home weiterhelfen, denn die beschäftigen sich mit GeoIP-Diensten. Ob es die Daten aber kostenlos gibt, habe ich auf die Schnelle nicht herausfinden können.

    VG

    Frank-Andre


  32. Man kann auch Deny from so angeben: Deny from 2.110.228.102 2.133.109.142 2.176.151.246 5.140.203.239 5.141.201.204

    So kann man direkt Listen eingeben.

    lg sven

Kommentar erfassen