Fight against Spam — Die dunkle Bedrohung

spam_viagra
Foto: Simon Willison | CC-Lizenz

Nach unserem Relaunch ist es mal wieder an der Zeit, unsere Fight-against-Spam-Reihe fortzusetzen. Aufgrund unterschiedlicher Maßnahmen haben wir auf F!XMBR die Spam-Problematik sehr gut im Griff. Als Plugin haben wir NoSpamNX im Einsatz. Das Plugin setzt auf eine andere Lösung, wie die bekannten Alternativen: NoSpamNX ordnet den Kommentarfeldern (Name, E-Mail und URL) vom Standard abweichende IDs zu. Es gibt ein verstecktes zusätzliches Feld, welches die ID Author bekommen hat. Wenn nun also ein Bot die Felder ausfüllt, wird er den Namen ins Feld mit der ID Author (für ihn ist dieses Feld sichtbar) eintragen – und schon wird der Kommentar als Spam abgewiesen.

Wir haben bei NoSpamNX die Option Prüfe HTTP Referer: Wenn aktiviert, prüft NoSpamNX ob der Referer eines Kommentares mit deiner Blog-URL übereinstimmt aktiviert. Das hat zur Folge, dass manchmal auch normale Kommentatoren abgewiesen werden. Wenn zm Beispiel im Firefox das Addon RefControl installiert wurde, lehnt NoSpamNX den Kommentar ab. Bitte dort F!XMBR entsprechend eintragen. Wir haben es von Anfang abgelehnt die bekannteren Tools einzusetzen, da diese in der Regel beim heimischen Server nachfragen, ob die Informationen des Kommentars Spam beinhalten. Es muss wirklich nicht sein, dass die Daten und Kommentare unserer Besucher durch die Weltgeschichte geschickt werden.

Im Prinzip kann man drei unterschiedliche Sorten von Spam unterscheiden:

  1. Menschlicher Spam
  2. Bots (automatisierter Spam)
  3. Sonstiger Spam

1.) Menschlicher Spam

Menschliche Spammer lassen sich naturgemäß ganz schlecht bekämpfen, weil sie augenscheinliche Maßnahmen locker umgehen können, so bleiben uns nur restriktive Maßnahmen im WordPress-Backend. Unter Einstellungen – Diskussion haben wir folgende Einstellungen vorgenommen:

Bevor ein Kommentar erscheint,
[x] muss jeder Kommentar von einem Administrator überprüft werden.

Diese Einstellung ist insbesondere dem Umstand geschuldet, dass auch Kommentatoren aufschlagen, die rechtswidrige Kommentare absetzen – per Copy & Paste auf anderen Blogs abgemahnte Kommentare hier veröffentlichen wollen. Nun könnte man dem mit der Blacklist entgegen wirken, das wurde dann aber zu unübersichtlich – und mit einer Menge Arbeit war es auch verbunden. Natürlich stört das den Diskussionsfluss – doch wer ernsthaft an einem Thema interessiert ist, wird sich nicht davon aufhalten lassen, wenn ein Kommentar mal zwei Stunden auf die Freischaltung wartet.

2.) Bots (automatisierter Spam)

Das Hauptaugenmerk liegt selbstverständlich auf den Bots, die das Netz abgrasen, die Blogs dieser Welt crawlen – dies geschieht automatisiert, millionenfach pro Tag. Wenn zum Beispiel Techcrunch oder anderen großen US-Blogs angepingt werden, wird der betreffende Artikel in der Folge massenhaft attackiert. Unterscheiden kann man den automatisierten Spam wie folgt:

  1. Kommentar-Spam
  2. Trackback-Spam

a.) Kommentar-Spam

Automatisierten Spam per Bot fangen wir hier auf F!XMBR wie oben schon beschrieben mit NoSpamNX ab. Der menschliche Besucher merkt von dieser Maßnahme rein gar nichts. Er kann wie gewohnt kommentieren, kann sicher sein, dass sein Kommentar nicht durch die Weltgeschichte geschickt wird, muss keine Rechenaufgabe lösen oder gar ein Captcha entziffern. Eine bessere Lösung gibt es derzeit meines Wissens nicht.

b.) Trackback-Spam

Wir haben mehrere Maßnahmen ergriffen, die sehr gut wirken. Bots greifen beispielsweise die wp-trackback.php im WordPress-Root-Verzeichnis direkt an. Das kann man leicht unterbinden:

b.1.) Wir benennen die wp-trackback.php um

Natürlich kann dies nicht einfach so gemacht werden, hier sind Eingriffe im Code notwendig. Öffne die /wp-includes/template-loader.php und suche (Zeile 17) nach:

include( ABSPATH . ‘wp-trackback.php’ );

Ersetze es mit:

include(ABSPATH . ‘wp-trackback_neu.php’);

Öffne die /wp-includes/comment-template.php und suche (Zeile 672) nach:

$tb_url = get_option(‘siteurl’) . ‘/wp-trackback.php?p=’ . $id;

Ersetze es mit:

$tb_url = get_option(‘siteurl’) . ‘/wp-trackback_neu.php?p=’ . $id;

Jetzt kann die wp-trackback.php im Root-Verzeichnis in wp-trackback_neu.php umbenannt werden.

b.2.) Das direkte Ansteuern der wp-trackback.php per .htaccess unterbinden

Dazu reicht folgender Eintrag in der .htaccess–Datei:

RewriteEngine On
RewriteRule ^wp-trackback\.php.*$ – [F,L]

mod_rewrite muss natürlich auf dem Server aktiviert sein, ebenso müssen wir Zugriff auf die .htaccess haben. Das ist nicht bei allen Webpaketen der Fall. Zusätzlich sind bei uns 2 Plugins im Einsatz: Moderate Pingbacks & Moderate Trackbacks. Auch mit diesen Plugins haben wir sehr gute Erfahrungen gemacht.

Eine weitere Form des Trackback-Spams:

Die Bots crawlen die Artikel-URLs, hängen bekannte Formen der Trackback-Permalinkstruktur an und dann heißt es Feuer frei. Sind diese Bots erstmal losgelassen, und haben uns entdeckt, herrscht keine Ruhe mehr. Unser E-Mail-Client meldet dann im Minuten-Takt neue Kommentare zum Freischalten. Und diese letzte Form ist durchaus die erfolgreichste Methode der Spammer. Ich habe lange überlegt, einfach den Permalink der Trackback-URL zu ändern, ich konnte mir nicht großartig vorstellen, dass es etwas bewirkt. Doch die Bots sind wirklich so dumm, einfach nur schlecht programmiert. Es wirkt, die Bots bleiben außen vor. Es lässt sich ganz einfach lösen:

Suche in der /wp-includes/comment-template.php (Zeile 713) nach:

user_trailingslashit(‘trackback’, ‘single_trackback’);

Ersetze es mit:

user_trailingslashit(‘track_neu’, ‘single_trackback’);

Suche in der /wp-includes/rewrite.php (Zeile 1281) nach:

$trackbackregex = ‘trackback/?$’;

Ersetze es mit:

$trackbackregex = ‘track_neu/?$’;

Nun noch im ACP unter Einstellungen – Permalinks und einfach auf Permalink-Struktur aktualisieren. Schon ist die neue Permalinkstruktur aktiv, Bots bleiben außen vor. Kleinere Nachteile sollen natürlich nicht verschwiegen werden:

  • Manche Leute verlinken die Trackback-URL anstatt sie nur anzupingen. Bei Änderung der URL führen manche Links ins Leere. Das kann man nicht ändern. Die Leute müssen damit leben, dass ihre Links ins Leere laufen.
  • Es muss bei jedem WordPress-Update neu eingepflegt werden, zumindest die Änderungen in der comment-template.php und der rewrite.php. Zudem kann es passieren, dass, wenn Fehler geschehen, Trackbacks und Pingbacks gar nicht mehr funktionieren. Das sollte man auch auf jeden Fall nach der Änderung kontrollieren. Lasst Euch einfach von einem befreundeten Blog ein Pingback und ein Trackback schicken.

Damit haben Crawler keine Möglichkeit mehr, die Trackback-URL auszuspähen, es sei denn, sie stoßen irgendwann durch eine Verlinkung drauf. Das war es dann auch schon zum Trackback-Spam. Natürlich kann man zusätzlich noch bekannte Spam-Server per .htaccess und deny from aussperren – doch Trackback-Spammer bleiben nun außen vor.

3. Sonstiger Spam

Unter sonstigen Spam haben wir einsortiert:

  1. Referer-Spam
  2. Spam bekannter Server
  3. Kontaktformular-Spam
  4. Sonstiges

a.) Referer-Spam

Werden wir von Spam-Seiten verlinkt, das soll es auch geben, um die bekannten Plugins zu umgehen, setzen wir folgenden Eintag in die .htaccess:

RewriteEngine On
RewriteCond %{HTTP_REFERER} ^.*seite1.de.*$ [OR]
RewriteCond %{HTTP_REFERER} ^.*seite2.de.*$ [OR]
RewriteCond %{HTTP_REFERER} ^.*seite3.de.*$ [OR]
RewriteCond %{HTTP_REFERER} ^.*seite4.de.*$ [OR]
[…]
RewriteRule .* – [F]

Natürlich kann es vorkommen, dass rechte Deppen wie PI oder andere Honks auch in dieser Liste landen. Das hat zur Folge, dass F!XMBR von den betreffenden Seiten nicht mehr aufgerufen werden kann. Ist mehr für unser Gemüt und hat nur sekundär mit Spam zutun.

b.) Spam bekannter Server

Um einschlägig bekannte Seiten (siehe auch a) gänzlich auszusperren hilft folgender Eintrag, es kommen vom jeweiligen Server dann auch keine Trackbacks mehr an, egal welche Domain von dem betreffenden Server verwaltet wird:

Order Deny,Allow
deny from 213.xxx.xxx.xxx
deny from 195.xxx.xxx.xxx
deny from 82.xxx.xxx.xxx
deny from 66.xxx.xxx.xxx
[…]

Man kann also auch gegen diese Art Spam viel tun. Doch gerade bei den ganzen amerikanischen und asiatischen Seiten ist auch viel Kreativität gefordert. Ich hatte die Nase voll: Jeglicher Referer, die Zeichenfolge poker enthält, landet nun auf der 403. Sonst kann es irgendwann vorkommen, dass das Ganze zur Lebensaufgabe wird. Das ist dann schon sehr restriktiv und kann auch mal normale Seiten treffen. 😉

c.) Kontaktformular-Spam

Der normale User bekommt es nicht mit, aber auch die auf den Blogs sehr oft eingesetzten Kontaktformulare werden ebenso angesteuert, und dann trudeln die Mails mit nice site oder so ähnlich ein. Doch auch hier gibt es Abhilfe. Wir setzen seit dem Redesign das Plugin Contact Form 7 ein. Wer uns nun eine Nachricht zukommen lassen will, muss eine kleine Rechenaufgabe lösen – per Hand und schon schauen Bots in die Röhre. Ob diese Lösung ausreicht, wird die Zukunft zeigen. Leider funktionierte die alte Lösung nicht mehr.

d.) Sonstiges

Es gibt immer wieder Seiten, die leben vom Contentdiebstahl. Als Beispiel seien hier die NPH-Proxies genannt. Ich empfehle da auch immer, das Forum von Abakus im Auge zu behalten – wenn man mal das ganze Marketing– und SEO-Gequatsche außer Acht lässt, und nur die Informationen mitnimmt. Eine ellenlange Liste mit NPH-Proxies schaut zum Beispiel wie folgt aus:

# NPH-Proxy’s
RewriteCond %{HTTP_HOST} !^www\.fixmbr\.de$
RewriteRule ^(.*)$ http:// www fixmbr.de/$1 [L,R=301]
RewriteCond %{REMOTE_ADDR} ^24\.169\.129\.239$ [OR]
RewriteCond %{REMOTE_ADDR} ^38\.100\.31\.31$ [OR]
RewriteCond %{REMOTE_ADDR} ^62\.75\.222\.63$ [OR]
[…]

Das war es auch schon. Sehr viel Text, und doch sinnvolle Maßnahmen. F!XMBR ist mittlerweile nicht ganz unbekannt – und Ziel mancher Angriffe. Wir setzen kein großes, überkandideltes Anti-Spam-Tool ein und haben die Spam-Problematik trotzdem im Griff. Das ist schon ein großer Erfolg. Ich hoffe nicht, dass wir irgendwann mal sagen müssen, wir geben auf, Spam Karma wurde gerade installiert. Doch bis dahin ist noch ein ganz langer Weg und wir haben noch viele Pfeile im Köcher. 😉

, , , , , , ,

11 Antworten zu “Fight against Spam — Die dunkle Bedrohung”

  1. kubi sagt:

    Danke für die Erwähnung 😉 Mit ist aufgefallen, dass ihr auch WPtouch benutzt. NoSpamNX ist zwar mit WPtouch kompatibel, allerdings nur wenn das Default-CSS von NoSpamNX benutzt wird, ansonsten werden die versteckten Felder angezeigt. Ich vermute mal, ihr benutzt ein eigenes CSS um die Felder zu verstecken.

  2. Chris sagt:

    Japp, wir nutzen ein eigenes CSS. Nun kenne ich selbst das Mobile-Theme nicht, iPxxx-Verweigerer, wir schauen mal… :)

  3. Chris sagt:

    iPod

    Lass mich raten, da kann man wohl wenig gegen tun, außer ein anderes Mobile-Theme einzusetzen… 😉

  4. kubi sagt:

    Doch, doch, da kann man was gegen tun :-)

    Die CSS-Anweisungen aus dem eigenen CSS um die Felder zu verstecken werden im MobileTheme ja logischerweise nicht geladen, deshalb sind dort die Felder sichtbar. Das wird also in jedem MobileTheme passieren. Ihr könnt also entweder

    1. Standard NoSpamNX CSS verwenden (wird auch im MobileTheme geladen)

    ODER

    2. CSS Anweisungen in das CSS des mobile Theme einbauen

    Ich schau mal, vielleicht bekomme ich heute noch ein Update hin, wie sich das auch anders lösen lässt 😉

  5. Chris sagt:

    Alles klar, dann weiß ich bescheid, danke. Habe das mal übertragen. :)

  6. allo sagt:

    Wieso gibt es eigentlich keine brauchbaren Bayesischen Spamfilter-Plugins?

    Für den eigenen Blog werde ich demnächst wohl versuchen soetwas zu integrieren, wenn ich die Datenbank erst einmal mit genug SPAM gefüllt habe, dass der Filter es auch tut.

  7. Oliver sagt:

    Server-Last mitunter? Außerdem sind derartige statistische Verfahren wohl eher für Mails adäquat, dort kann man recht gut noch mit Whitelists und Blacklists arbeiten. Aber auf einem Blog? Vielleicht funktioniert das irgendwie auf einem recht kleinen Blog.

  8. allo sagt:

    Das meiste wird man ja schon mit einem «bitte freilassen» Feld los, leider scheinen die Bots das aber zumindest bei Frameworks inzwischen durchaus zu kennen. Ich denke ich werd mal probieren sowas einzubinden, natürlich auch keinen fetten spamassassin …

  9. Hannes sagt:

    muss sagen das ich, zumindest was kommentare angeht, mit good old askimet auf verschiedenen projekten gut fahre

  10. onli sagt:

    Gibt es doch.

    Das Plugin jetzt ist für Serendipity statt für WordPress, aber das heißt nicht, dass es nicht übertragbar wäre.

  11. Oliver sagt:

    Mag sein, wir gleichen jedoch nicht gerne Daten von hier Kommentierenden mit Servern außerhalb unserer Kontrolle ab.

RSS-Feed abonnieren