Referrer-Spam blocken mit Apache und mod_rewrite
Immer wieder werden Webserver mit Referrer-Spam Anfragen zugeballert, die wegen wechselnder IPs aber nicht so ohne weiteres in der Firewall geblockt werden können.
Der eigentliche Sinn eines solchen Angriffs besteht darin, in Referrer-Statistiken möglichst weit nach oben zu klettern. Und wozu das? Das primärer Ziel ist die Anzeige des Referrers als Link, z.B. auf Seiten, welche die Top-Referrer anzeigen, entweder um das Suchmaschinen-Ranking zu steigern, oder ganz banal, um Menschen auf die Seiten des Angreifers zu locken, damit diese dort irgendwelchen Kram kaufen. Nunja. Ein weiteres Ziel des Angreifers ist möglicherweise auch, dass jemand, der auf den Link des Referrers klickt, sich auf den Zielseiten Schadprogramme, XSS Hacks (spannend wenn der User Admin-Rechte hat) oder ähnliche mehr oder weniger kreative Bösartigkeiten einfängt. Daher ist auch beim Anschauen von Webserver-Stats (Webalizer o.ä.) Vorsicht geboten! Nicht einfach überall drauf klicken! Nur so als Hinweis ;-) Richtig fies, wenn auch vom Angreifer meist unbeabsichtigt, wird so ein Angriff dann, wenn jede dieser Anfragen von einer komplexen, Resourcen hungrigen Web-Applikation (einem CMS,Blog o.ä. ) beantwortet werden muss und dadurch die Performance des gesamten Systems in den Keller geht. Dann wird aus einem simplen Referrer-Spam-Angriff schnell eine DOS-Attacke. Web-Spam-Filter innerhalb der Applikationen, wie sie inzwischen z.B. die meisten Blogs bieten, helfen hier leider gar nichts. Bis solche Filter aktiv werden, ist die meiste Rechenarbeit der Applikation schon passiert. Filter innerhalb einer Applikation helfen nur dem Moderator die Kommentare und Trackbacks sauber zu halten. Es muss also geblockt werden BEVOR die Anfragen bis zur Applikation durchkommen. Eine einfache aber wirkungsvolle, wenn auch manuelle und daher mühsame Variante ist es, Filter mit RewriteRules zu setzen. "Referrer-Spam blocken mit Apache und mod_rewrite" vollständig lesen
Autor: Jens Giessmann
in Apache
am
Donnerstag, 14. Juni 2007
um
21:07
Kommentare (4) | Trackback (1) Spam-Blocker im Apache mit SetEnvIfNoCase (Fake:WordPress/2.1-alpha3)
Zur Zeit werde ich hier mal wieder mit nervigen Fake-Trackbacks zugeballert.
Klar, die kann man moderieren, und dann löschen, nervt trotzdem. Was tun? Blocken anhand der IPs ist meist nicht möglich, die wechselt in der Regel ständig. Wenn man die Fakes/den Spam aber zum Beispiel anhand des selben (Fake) User-Agent festmachen kann, ist es recht einfach möglich diese im Apache zu blocken. Natürlich nur, wenn man Zugriff auf die Apache-Conf hat oder zumindest .htaccess Dateien anlegen darf. Wenn nicht -> Provider wechseln ;-) Hier ein aktuelles Beispiel: Fake-Trackbacks mit dem immer gleichen User-Agent "-- WordPress/2.1-alpha3". Prima, damit werden nicht wirklich viele "liebe User" unterwegs sein. Eine entspr. Regel in der Apache-Conf sieht dann wie folgt aus: CODE: SetEnvIfNoCase User-Agent "-- WordPress/2\.1-alpha3" spammer=1 Order allow,deny Deny from env=spammer Allow from all Mit der direktive SetEnvIfNoCase wird der User-Agent mit der RegEx verglichen und im Erfolgsfall die ENV-Variable spammer auf 1 gesetzt. Dann bekommen alle Anfragen die als "spammer" geflagged sind, nur noch ein HTTP 403 Status Code (Forbidden). Man kann solch ein Regelwerk beliebig erweitern und neue Merkmale hinzufügen. Klar kann es sein, das man mit solchen Filter-Regeln auch False-Positives erzeugt, eine Prüfung auf User-Agent Mozilla wäre sicher keine gute Idee ;-) Da man solche Regeln in <Directory>, <Location> und <Files> Blöcken definieren kann, muss man ja auch nicht immer die kompletten Seiten sperren. Das Blog-Verzeichnis oder die URL zum Trackback-Eintrag reicht ja. Falls sich wer hier auf handcode.de zu Unrecht "ausgeschlossen" fühlt, soll sich bitte direkt bei mir melden. RewriteRules für temporäre Tests
Da ich das selber immer mal wieder brauche, hier mal eine Kurz-Doku dazu:
Aufgabe:
Lösung: RewriteRules mit einer Bedingung auf die Client-IP CODE: RewriteEngine On # Die Baustellen-Seite selber einfach ausliefern RewriteRule ^/baustelle.html - [L] # Alles was NICHT aus dem eigenen Netz (192.0.2.*) kommt.... RewriteCond %{REMOTE_ADDR} !^192\.0\.2\..* # ... umleiten auf die Baustellenseite RewriteRule ^.* http://www.example.org/baustelle.html [L,R]
Autor: Jens Giessmann
in Apache
am
Mittwoch, 28. Februar 2007
um
12:38
Kommentare (0) | Trackbacks (0) Tags für diesen Artikel: apache, programming
« vorherige Seite
(Seite 3 von 3, insgesamt 13 Einträge)
|
blog powered by Serendipity