WordPress: Spam-IP per .htaccess sperren

So alle 3-4 Wochen gibt es einen Scherzkeks der witzig findet eine kleine Spam-Attacke auf dieses Blog zu starten. Neulich war es jemand aus China und heute einer aus dem mittleren Westen in den USA. Kommen die Spam-Versuche alle von der gleichen IP, dann sperre ich diese einfach mit folgender Methode:

# IP-Sperre
order allow,deny
deny from 123.45.678.123
allow from all

Den oberen Code einfach in die .htaccess-Datei eintragen. Bei WordPress empfiehlt es sich diesen Code unterhalb den Rewrite-Regeln für die Permalinks unterzubringen.

Schickt der Scherzbold die Kommentare von mehreren IPs z. B. von 123.45.678.123 und 123.45.678.456, dann kann man auch komplette IP-Bereiche sperren:

# IP-Sperre
order allow,deny
deny from 123.45.678
allow from all

Sperren kann man auch nach Hostnamen:

# IP-Sperre
order allow,deny
deny from boeser.spammer.com
allow from all

Allerdings sollte man vorsichtig sein beim Sperren und zwar aus mehreren gründen. Komplette Bereiche zu sperren kann auch, je nach dem welchen Bereich man sperrt, auch viele normale Besucher aussperren. Da die .htaccess-Datei afaik bei jedem Seitenaufruf geladen wird, kann es speziell bei schwächeren Servern zu Performance-einbrüchen führen, wenn die .htaccess-Datei zu groß ist.

Wir arbeiten seit 20 Jahren mit WordPress und bieten diverse Dienst­leistungen rund um das System an. Kontaktiere uns für weitere Informationen oder für ein Angebot.

Verwandte Beiträge:

23 Kommentare

  1. Und wäre es nicht einfacher die IP in die WordPress-Blacklist einzutragen? Wegen den von dir genannten Gründen? Habe aber nie ausprobiert 😉

    1. Hallo Sergej,

      ich habe es zwar nie getestet, aber ich denke das sollte funktionieren. Ich möchte die Spamversuche aber so früh wie möglich abfangen und am frühesten geht das imho wenn man es über den Webserver macht.

  2. Richtig, aber wie du schon selbst sagst, du belastest damit auch jeden Request (Bilder etc.). Würdest du es in WP eintragen, hast du die Prüfung nur bei PHP/WP. Nur so als Idee 😉

    1. @Sergej,

      momentan sind lediglich 3 IP-Adressen und ein IP-Bereich gesperrt, dass hält sich noch im Rahmen. Wären es mehr Adressen, dann würde ich entweder mit der Blakcklist von WP arbeiten oder einfach das Anti Spam Bee von diesem S. Müller anweisen, Kommentare aus bestimmten Ländern zu blocken. 🙂

  3. Was bewirkt diese Sperrung im Detail? Dass derjenige nicht mehr kommentieren kann und trotzdem Zugang zur Seite hat oder bekommt er dann einen generellen 404-not found Error für die komplette Seite?

    Und wie bekomme ich die IP desjenigen heraus?

  4. ok, danke, was mir nach wie vor nicht klar ist – wie schon gesagt -, was passiert dann mit diesen Usern: können sie die Seite gar nicht mehr aufrufen, erhalten sie einen 404 Error oder wie muss man das verstehen?
    Sorry, ist halt eine Newbie-Frage.

  5. Klingt irgendwie auf Anhieb nach “work more get less done”…
    Spam auf IP Adressen analysieren (Zeitaufwand), den Spam löschen (nochmal Zeitaufwand) die Adressen dann in die htaccess schreiben (ein drittes Mal Zeitaufwand). Nachdem der Spammer dann einen neuen dial in gemacht hat, geht es von vorn los… Da ist Kommentarmoderation vermutlich noch schneller.

    Aber vielleicht könnte da ein kleines Plugin helfen: Beim Klick auf “Spam” in der Moderationsnsicht wird die IP-Adresse in eine Tabelle übernommen. Das Script testet die Tabelle auf mehrfaches auftreten von IP adressen und schreibt die dann in die htaccess… Naja, aber wer möchte schon die htaccess für den PHP-User beschreibbar haben !?!

    1. @Hinnerk,

      Klingt irgendwie auf Anhieb nach “work more get less done”…
      Spam auf IP Adressen analysieren (Zeitaufwand), den Spam löschen (nochmal Zeitaufwand) die Adressen dann in die htaccess schreiben (ein drittes Mal Zeitaufwand). Nachdem der Spammer dann einen neuen dial in gemacht hat, geht es von vorn los… Da ist Kommentarmoderation vermutlich noch schneller.

      Nö 🙂 … nach dem ich gestern zwei IPs und den Bereich gesperrt habe war Ruhe. Vorher kamen je 4-5 Spamversuche von den 3 gleichen IPs. Das wiederholt sich alle so 4 Wochen. Dann sperre ich 2-3 IPs für paar Tage und dann habe ich Ruhe. Anschließend entferne ich die IPs aus der .htaccess. Ich habe das mal testweise laufen lassen und wenn man die IP nach dem 3.-4. Versuch nicht sperrt, dann trudeln im Laufe des Tages mal gut 3-4 Dutzend Spamversuche (landen eh alle in der Moderation) von der gleichen IP rein. Da lohnt es sich schon einzelne IPs zu sperren.

      Jetzt dafür, in Anbetracht der .htaccess und der WP-Blacklist, noch ein zusätzliches Skript zu installieren, halte ich für überdimensioniert.

  6. @Vlad
    Ich wollte in AB eine Blacklist für IPs einbauen, aber irgendwie konnte ich mich dazu nicht überreden, da WP die Liste eh führt.

    Jepp, solange sich die Anzahl der Regel in der htaccess in Grenzen hält, ist alles Bestens 😉

  7. Ist es nicht sinnvoller den Code als erstes in die .htaccess zu packen?
    Das URL-Rewriting könnte man sich in diesem Fall sparen.

    Ich finde allerdings leider keine Infos im Netz dazu, ob der Apache, sofern er von einer gesperrten IP GET-Befehle bekommt, sofort ein 403er sendet, oder die .htaccess weiter bearbeitet. In dem Fall wäre es egal, wo der Code steht.

    Vielleicht kann hier jemand Licht ins Dunkle bringen.

  8. Hi! Ich trage auffällige UAs zusammen für die “Bad-Bot-Liste” und bin so auf denen Blogeintrag hier gestoßen. Ich wollte die Nutzung der IP-Bannliste, entstanden durch Bot-Trap und Stopforumspam, ein wenig bekannter machen. Kampf den Spammern!

  9. Ich weiß nicht mehr was ich falsch mache. Ich habe eine .htaccess erstellt, folgendes eingefügt:
    order allow,deny
    deny from 198.15.xxx.xxx
    deny from 217.170.xxx.xx
    allow from all
    auch meine IP Adresse um es auszuprobieren und klapts nicht. Wenn ich einfüge:
    order allow,deny
    deny from all
    dann funktioniert und wir die Site nich eingezeigt. Sind aber alle Zugänge gesperrt. Was mache ich falsch?

  10. Ich hoffe mal, du hast die .xxx.xxx am Ende nicht stehen lassen. Wenn du den gesamten Bereich 198.15.0.0 bis 198.15.255.255 sperren willst, dann schreibe nur “deny 195.15”. Das sollte dann funktionieren.

  11. Hallo Richard,
    lass mal zum Schluss das allow from all weg.

    Also nur:

    order deny,allow
    deny from 198.15
    deny from 217.170

    So wären alle, wie der Vorredner schon gepostet hat, gesperrt (also ganzer Bereich) – oder halt die exakte IP Adresse.

  12. Danke für die Antworten. Natürlich .xxx.xxx am Ende habe ich nicht eingegeben sondern volle IP Adressen.
    Dein Vorschlag Shoto hat leider auch nicht funktioniert. Ich habe auf eine Site gelesen dass, das am Server liegen kann. OK ich habe andere Lösung gefunden. Die Böse Jungs werden auf eine andere Site weiter geleitet mit:
    RewriteEngine on
    RewriteCond %{REMOTE_ADDR} ^(1xx.15.117.xxx) [OR]
    RewriteCond %{REMOTE_ADDR} ^(2xx.170.192.xx) [OR]
    RewriteCond %{REMOTE_ADDR} ^(xx8.98.100.xxx)
    RewriteRule .* http://www.xxxxxxxx.com [R=301,L]

  13. Hallo!

    Ich wollte mal fragen, wie lange belässt du eine IP Adresse auf der .htaccess? Spätestens wenn man ganze Bereiche sperrt, stellt sich ja diese Frage…

Kommentare sind geschlossen.