TrackBack SPAM Bots abwehren
Mittlerweile geht es auch bei mir los, dass regelmäßig Bots SPAM TrackBacks hinterlassen. Dass diese SPAM online geht, kann man bei Serendipity ziemlich leicht verhindern, indem man das Spam Plugin geeignet einstellt. Bei mir werden TrackBacks auf Artikel mit einem bestimmten Alter nur noch moderiert zugelassen. Mein hartnäckigster SPAM Bot versucht es immer wieder mit dem Eintrag 1, der dann definitiv alt genug ist.
Nervig ist dabei allerdings, dass man diese Kommentare noch moderieren muss. Sie erscheinen weiterhin in der Administrationsoberfläche der Kommentare und man muss sie manuell löschen. Dabei hatte ich schon oft die Befürchtung, aus Versehen auch normale und erwünschte Trackbacks gelöscht zu haben.
Wie es viel eleganter geht, beschreibt Isotopp recht ausführlich. Er manipiliert die .htaccess Datei des Serververzeichnisses sehr clever, so dass erkannte Spammer erst gar nicht die comment.php aufrufen können, die für den Eintrag eines TrackBacks zuständing ist. Dadurch gelangen die SPAM TrackBacks gar nicht erst in die Datenbank.
Mir war bisher bekannt, dass man einzelne IP Adressen von der ganzen Site oder von einzelnen Dateien mittels der <Files> Direktive in der .htacces Datei ausschließen kann. Mit dieser Methode kann man bereits sehr erfolgreich Spammer Requests verhindern. Der Nachteil ist dabei, dass man neu gefundene IPs immer nachtragen muss, was recht mühsam werden kann. Da ist die Methode von Isotopp schon deutlich cleverer: Bots werden anhand der User Agent Angabe identifiziert. Nach Überprüfen meiner Logdateien stelle ich auch fest, dass Spammer Bots gerne die IP Adresse wechseln, aber eher selten den Namen, den sie als User Agent mitliefern.
Isotopp beschreibt bei sich einen Bot, der sich mit "TrackBack/1.02" meldet. Diesen habe ich auch in meinen Logfiles, zusätzlich noch zwei weitere, die sich als "TrackBack Checker" und einfach ohne Namen melden. Isotopps Methode nimmt nun diese Namen und benutzt sie in einer <FilesMatch> Anweisung:
<FilesMatch "comment\.php">
SetEnvIfNoCase User_Agent TrackBack spammer=yes
deny from env=spammer
</FilesMatch>
FilesMatch interpretiert im Gegensatz zu Files den Ausdruck für den Filenamen immer als regulären Ausdruck, deshalb muss man hier den Punkt escapen. Man könnte in dem Fall aber auch problemlos die Files Direktive benutzen. Die Anweisung SetEnvIfNoCase (die mir neu war) setzt eine beliebige Variable, wenn eine bestimmte Eigenschaft zutrifft. Isotopps Code bedeutet also: "Wenn der User Agent das Wort 'TrackBack' enthält, dann setze die Variable spammer auf yes. Die nächste Zeile bewirkt dann, dass der aktuelle Request abgewiesen wird, wenn vorher die Variable spammer gesetzt wurde, wobei es laut Isotopp unerheblich ist, welchen Wert diese Variable bekommen hat. Sie muss einfach nur gesetzt worden sein.
Geniale Idee! Damit kann man nun - unabhängig davon von wem oder wo sie gerade eingesetzt werden - alle SPAM Bots ausschalten, die die Software namens "TrackBack/1.02" und spätere Versionen benutzen. Auch mein "TrackBack Checker" sollte so außen vor bleiben. Meinen Dauer-SpamBot, der sich immer ohne User Agent Angabe meldet, traue ich mich noch nicht auf diese Weise auszuschalten, da werde ich wohl vorerst auf das Aussperren per IP Adresse zurück greifen.
Die Methode ist auch deshalb so charmant, weil man hier beliebige Server Variablen abtesten kann und sie bei beliebiger Blog Software funktioniert.. Bei anderer Software muss man nur den Namen der Datei austauschen, die gesperrt werden soll.
Eine weitere Beschreibung zu diesem Thema gibt es auch im Artikel "Böser Bot, guter Bot" von Jan Schmager, der dann mehr auf SetEnvIf eingegeht, bzw. die Alternative BrowserMatch. Nebenbei: Um SetEnvIf und BrowserMatch benutzen zu können, muss der Apache Server das Modul mod_setenvif geladen haben.
Nach dem Lesen beider Artikel sieht mein Teil in der .htaccess, der für die Botabwehr zuständig ist, nun also wie folgt aus:
# BEGIN ANTI SPAM
<Files comment.php>
# knappe 403 Error-Message
ErrorDocument 403 "403 Forbidden
# Bots, deren Namen mit TrackBack beginnen, markieren
BrowserMatch ^TrackBack is_trackback_spammer
# Bots, die keinen Namen angeben, markieren
BrowserMatch ^$ is_trackback_spammer
# Aussperren
Order Allow,Deny
Allow from all
deny from env=is_trackback_spammer
</Files>
# END ANTI SPAM
Dann habe ich einfach mal ein paar Tage abgewartet und danach die Logfile überprüft. Beide Bots mit User Agent Angaben ("TrackBack/1.02" und "TrackBack checker") haben inzwischen mal vorbei geschaut:
"POST /comment.php?type=trackback&entry_id=22 HTTP/1.0" 403 13 "-" "TrackBack checker"
"POST /comment.php?type=trackback&entry_id=12 HTTP/1.0" 403 13 "-" "TrackBack/1.02"
Sie haben also einen 403 erhalten, und in meiner Adminoberfläche ist tatsächlich kein Trackback um diese Uhrzeit eingetroffen. Klappt!
Jetzt kam nur noch der Bot ohne User Agent Angabe durch, den habe ich nach diesem Erfolg nun auch mal ausgesperrt. Die Regel dafür ist dann "BrowserMatch ^$ is_trackback_spammer". In einem regulärem Ausdruck bedeutet das ^ Zeilenanfang und $ Zeilenende, in diesem Fall also Anfang bzw. Ende der User Agent Angabe. Der Ausdruck ^$ identifiziert also alle User Agents, die zwischen Anfang und Ende nichts haben, sprich: Die keinen User Agent liefern. Wieder einen Tag gewartet und meine Logfiles kontrolliert:
"POST /comment.php?type=trackback&entry_id=1 HTTP/1.1" 403 25 "-" "-"
Auch der fleißigste Bot bei mir bekommt nun ein 403! Seit dem ich diese beiden BrowserMatches in meiner .htaccess enthalten habe, habe ich nicht einen einzigen SPAM TrackBack mehr erhalten! Somit kann man sich nun auch das Verbieten über IP Adressen Listen sparen. Super Erfolg! Ich bin zuerst übrigens auf das "-" reingefallen und dachte, er sendet ein "-" als User Agent. Im Logfile beschreibt das aber einfach eine leere Angabe.
Schön wäre es natürlich noch, wenn diese Technik gleich in das AntiSpam Spam Plugin von Serendipity eingebaut wäre, damit man nicht immer direkt an der .htaccess Datei editieren muss, was man wohl sicher nur den wenigsten Blogbesitzern zumuten kann. Serendipity bearbeitet diese Datei ja sowieso schon. Hmm... Mal darüber nachdenken.. ![]()
Danke Isotopp für diese Idee! ![]()
Als nächstes mache ich mir evtl. mal Gedanken zu den Bots, die hier zwar nicht als SPAMmer auftreten, aber trotzdem unnötig Bandbreite verursachen. Davon entdecke ich in letzter Zeit immer öfters Einträge in meinen Logfiles...
Comments
Display comments as Linear | Threaded
Robert Lender on :
Danke für den Beitrag. Ich werde ihn 1. in Kürze im fragmentarischen...S9y Manual verlinken und 2. mir erlauben ebenfalls einen Beitrag zu schreiben (nicht so ausführlich, so viel weiß ich nicht) und natürlich ebenfalls auf deinen Artikel veweisen.
Grischa on :
Hi Robert. Klar, gerne!
Und nebenbei: Ich habe immer noch keinen SPAM Trackback erhalten, ohne irgendein Akismet oder ähnliches aktiviert zu haben. Scheint also wirklich eine sehr effektive Methode zu sein, die das Blog auch nicht all zu sehr mit Traffic belastet.
Robert Lender on :
Ich werde das ganze jetzt auch live probieren. Wäre fein, wenn du mit Garvin und Co darüber reden könntest ob dieser Mechanismus Teil der Spamabwehr von S9y werden könnte.
Grischa on :
Ja. Wie geschrieben: Ich bin schon am Grübeln darüber, wie man das am sinnvollsten integriert.
Werde mal mit Garvin quatschen, was er davon hält, der hat immer ein ziemlich gutes Gespür dafür, was Probleme bereiten könnte, und was man gut einbauen kann.
Wie es im Prinzip implementiert werden müsste, ist mir eigentlich schon klar..
Robert Lender on :
Danke, hoffe das Beste.
Martina on :
Ich hatte heute Garvin eine PN zu dem Problem geschrieben. Mal sehen, was und wie er antwortet. Ich weiß nämlich, dass ein Tag zuvor einem schweizer Bekannten (auf einem anderen Hoster) genau das selbe wie mir passiert ist. Mehr dazu auf Bedarf drüben bei Robert, sonst haben wir zuviel Cross-Postings..
Martina on :
Super! Nun landen alle auf der 403!!! ich danke dir für den letzten Hinweis bei mir.
Grischa on :
Sehr gern geschehen.
Ich muss wohl am besten mal die .htacces oben um die Zeile erweitern, die ich unten nur beschreibe. Sonst wird das offenbar immer übersehen.
Martina on :
Grischa, die htaccess funktioniert einwandfrei, nur scheint es die Spammer inzwischen zu ärgern, denn sie beschossen meinen Blog gestern nacht mit einem Dauerfeuer... im Schnitt mit 39 Trackback-Requests pro Sekunde (!!!!!!!!!), der Höhepunkt der Welle war zwischen 01:00 und 13:00 Uhr gestern.
Immer von einer IP ausgehend, die es logischerweise eigentlich gar nicht gibt.. Dieser Idiot bekam immer die 303 zu sehen, aber dies schien ihn zu ärgern, weshalb er seine "Bemühungen" verstärkte.
Die Italiener schauen inzwischen nicht mehr vorbei, die sind als Range komplett ausgesperrt.
Meine Logs kann ich zur Zeit aufgrund dieser massigen Einträge nicht mehr auswerten....
Martina on :
ich meine natürlich "403" und nicht "303"
Peter on :
Vielen Dank Grischa. Dies hilft mir hoffentlich den eingehenden Trackback-Spam der letzten Tage zu minimieren. Müsste dann nur noch mein Problem der ausgehenden beheben, da das serendipity_event_trackback plugin bei mir irgendwie nicht funktiniert und die Kommunikation mit WP einfach nicht will. Hättest Du dazu evtl. noch einen Tipp?
Grischa on :
Hi Peter,
kann es sein, dass Du eine ältere Version von S9Y fährst? Ich hatte mal einiges an der Kommunikation zwischen WP und S9Y verbessert, meines Wissens funktioniert das inzwischen.
Hatte hier auch mehrere Artikel dazu geschrieben, musst mal suchen..
Peter on :
Hallo Grischa,
vielen Dank für deine Antwort. Du hast richtig vermutet, fahre aktuell noch 1.1. Werde dann mal updaten. Mal schaun, ob es daran liegt...
btw: Wollte mal alle S9y Artikel bei dir durchblättern, aber nach Seite 2 erhalte ich eine Fehlermeldung. Die Seite ist nicht aufzurufen:
http://blog.brockha.us/index.php?/plugin/tag/Serendipity/P3.html
Grischa on :
An der Seitenproblematik beim Tag Plugin hat sich wohl zwischendurch was getan. Hatte ich lange nicht mehr getestet, gerade erst wieder: Klappt inzwischen!
Grischa on :
Zu dem Seitenproblem: Mist, da scheint aktuell ein Problem im Tag Plugin vorhanden zu sein. :-/ Habe leider gerade keine Zeit, mich darum zu kümmern.
Zur s9y Version: Ja, wenn Du 1.1 hast, dann ist da noch gar nichts gemacht. Da ging ja nicht mal Pingback (die bevorzugte Methode für WP). Wenn Du auf die aktuelle 1.3 gewechselt hast, dann sollten alle Probleme mit Trackbacks auf WP behoben sein.
Uwe on :
Hi Grischa,
wenn ich das so lese, hast du es ähnlich aufgebaut wie http://www.spider-trap.de/
Dieses kleine Tool hat einen ähnlichen Ansatz und sperrt selbst gefakte MSN- oder Yahoo-Bots.
Es sperrt alle Bots, die sich nicht an die Standard for Robot Exclusion halten und auf das in der robots.txt gesperrte Verzeichnis zugreifen und in die Falle tappen.
Ob die Methode auch auf Trackbacks anwendbar ist, kann ich nicht beurteilen. Vielleicht kann man sich aber mit den Codern zusammentun und voneinander profitieren!?
Ciao,
Uwe
Sven on :
Klasse.Super! Nun landen alle auf der 403!!! Die Hinweise sind der letzte Schrei. Danke
Klaus on :
Ich lese hier sehr viele Anregungen und auch Vorschläge. Kennt auch jemand eine Möglichkeit die man beim Burning Board einsetzen/einbauen kann?