Eigentlich war der Neustart von athemis.de in gewisser Weise ein Abfallprodukt. Eigentlich wollte ich "nur" die Konfiguration meines Webservers auf den neusten Stand bringen. Dabei habe ich mir auch etwas intensiver als sonst die Logdateien angesehen. Insbesondere per tail -f fällt einem dann unter Umständen schnell auf, dass es etliche Anfragen z.B. auf die Kommentar- oder Registrierungsfunktion einer Drupalinstallation gibt. Das ist nicht weiter dramatisch, werden doch die Anfragen in der Regel durch das CAPTCHA abgefangen. Trotzdem verursachen sie Last auf dem Server, denn die PHP-Skripte und Datenbankanfrage wollen bearbeitet werden.
Da erscheint es sinnvoll, solche Anfragen direkt auf der Ebene des Webservers zu blocken, da ich auf meinem VPS keinen nennenswerten Zugang auf die Firewallkonfiguration habe (zumindest nicht in einer Form, dass man die Regeln vernünftig automatisiert anpassen kann).
In nginx lassen sich aber dankenswerter Weise eigene Regeln definieren, nach denen bestimmte Bereiche von IP-Adressen abgewiesen werden können. Fehlt nur noch eine regelmäßig aktualisierte Liste bekannter Adressbereiche, die zu Spamnetzwerken gehören und ein Skript, dass aus einer solchen Liste die Blockierregeln für nginx erstellt und per Cron-Job regelmäßig ausgeführt werden kann.
Beginnen wir mit der ersten Aufgabe: die Liste zu finden. Eine solche liefert zum Beispiel Spamhaus mit seiner DROP (Don't Route Or Peer) List.
Die Suche nach einem passenden Skript gestaltete sich da schon etwas schwieriger. Letztlich habe ich zwar eins gefunden, aber gerade bei einem Skript, das auf dem Server laufen soll, würde ich ganz gerne eine vernünftige Fehlerbehandlung einbauen oder auch zumindest eine rudimentäre Logdatei schreiben. Also musste ein eigenes Skript her, in Python realisiert (was keinen besonderen Grund hat, außer dass ich in Python fitter bin, als im Bash-Syntax). Ein Nebeneffekt ist, dass das Skript relativ leicht um zusätzliche Quellen außer der DROP List erweitert werden kann.
Das Skript setze ich seit gestern auf dem Server ein, und die von ihm erstellten Blockregeln haben schon etliche Anfragen gestoppt. Insofern ist es vielleicht auch von allgemeinem Interesse. Zu finden ist das Skript auf github.com.
Neuen Kommentar schreiben