Nginx mit automatisch aktualisierter IP-Blacklist

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.

Tags: 

Kommentare

good article

Cartier Pasha

Air Jordans 6 retro

able.No matter what sports activity you are trying to participate in, you will find a range of Nike Men Shoes that is specifically designed for that particular Air Jordan 12 Shoes sport. It Air Jordan 12 Sneaker can be said quite nonchalantly that your athletic Cheap Jordan 12 Shoes performance Air Jordan 14 will be Air Jordan 13 Air Jordan 12 Retro enhanced to some Retro Jordan 13 degree by these shoes. Nike Men Shoes ca…

Nike Free

lso head to factory outlets since they Nike Free 5.0 usually offer a Nike Free Billig discount of around 20% -50% Nike Free 4.0 on many Nike Free DK items. It is normally Nike Free Run Sko difficult to get guys footwear for huge feet. One ought to stop trying to buy cheap mens footwear at usual shoe Nike Free Run 3.0 2 shops. They Nike Free 3.0 mostly only have footwear till size eleven to Nike Free Run 3.0 Mænd fourteen. One…

Neuen Kommentar schreiben

Gefiltertes HTML

  • Internet- und E-Mail-Adressen werden automatisch umgewandelt.
  • HTML - Zeilenumbrüche und Absätze werden automatisch erzeugt.
  • Zulässige HTML-Tags: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • E-Mail-Adressen werden mit reCAPTCHA Mailhide verborgen.
  • Typographic refinements will be added.

Plain text

  • E-Mail-Adressen werden mit reCAPTCHA Mailhide verborgen.
  • Keine HTML-Tags erlaubt.
  • Internet- und E-Mail-Adressen werden automatisch umgewandelt.
  • HTML - Zeilenumbrüche und Absätze werden automatisch erzeugt.
  • Typographic refinements will be added.
CAPTCHA
Diese Frage hat den Zweck zu testen, ob Sie ein menschlicher Benutzer sind und automatisiertem Spam vorzubeugen.