Home nervende Web Crawler
Post
Cancel

nervende Web Crawler

Ich vernachlässige seit Monaten meine eigenen Services.
Das liegt durchaus auch daran, dass ich weniger Zeit finde mich mit denen mal wieder sinnvoll zu befassen.
Funktionierende Beziehungen sind sehr ausfüllend.

Vor einigen Tagen habe ich bei meinem selbst gehosteten git Server eine ziemlich dumme Lücke geschlossen.
Ich hatte einfach das selbst registrieren aktiviert gelassen. (Dafür könnte ich mir durchaus auch mal selber eine runterhauen.) Nach dem ich die 2 Dutzend User aus der Datenbank gelöscht hatte, warf ich einen Blick in die Logs und da fielen mir 2 Dinge sehr unangenehm auf:

  1. Da versuchte noch immer jemand sich zu registrieren, bzw. ein Bullshit User aufzurufen
  2. Wiederkehrende Zugriffe auf Repositories. Sehr langsam, aber immer von einen bestimmten IP Kreis.

Da ich die Registrierung am Service bereits abgeschaltet hatte, wollte ich die Zugriffe möglichst früh blockieren.
Daher erstellte ich mir einen fail2ban Filter, der mir die Arbeit reduzierte.

Woher kommt der Dreck?

Bei den ständig wiederkehrenden Zugriffen wollte ich ersteinmal wissen, woher die IPs kamen.
Eine große Anzahl der verdächtige IPs kamen aus diesem Bereich: 57.141.0.0/24.
IPinfo sagt mir, dass der gesamte Block zu Faceb**k gehört. Was suchen die auf meinem git Server!?
Das war mir schon sehr suspekt.
Daneben gab es auch nocht ein paar sehr seltsame User-Agents:

  • paoalto
  • censys
  • MJ12bot

Alles Zugriffe, die ich nicht haben wollte!

Kanone rausgeholt - Geo-Blocking freigeschaltet

In einem meiner letzten großen Projekte haben wir uns einmal mit Geo Blocking beschäftigen müssen.
Das Wissen kam mir jetzt zu gute und ich versuchte das mit der heißen Nadel in meinen Webserver zu integrieren.
Ersteinmal um zu sehen, woher die Zugriffe jetzt grob kamen.

Nachdem ich den manuellen Part fertig hatte, wollte ich das wenigsten so sauber bekommen, dass ich das auch mit Updates versorgen kann. Und natürlich automatisiert, damit ich das nicht immer wieder manuell hin zimmern muss.
Herausgekommen ist (mal wieder) eine Ansible Rolle: ansible-geoip. In dem Zuge habe ich auch meine nginx Rolle aktualisiert, damit ich den geoip Part dort sauber integrieren kann.

Und schon bekam ich Informationen, woher all die suspekten Zugriffe kamen.
Und genau so schnell waren auch Blocker auf Basis dieser Informationen eingerichtet.
Momentan blockiere ich mit einem Filter auf geoip_country_code … bin aber wirklich kurz davor das auf geoip_city_continent_code auszudehnen.

(Entsprechende Beispielkonfigurationen findet man in den molecule Tests der Ansible Rollen.)

Ja, man könnte geo-blocking als “Wir ballern mit einer große Kanone auf Spatzen” bezeichnen … aber wenn Bots anfangen die robots.txt auszulesen um anschließend - von der gleichen IP aus - den Content meiner Seiten abzuziehen, obwohl ich ein disallow hinterlegt habe, genehmige ich mir auch diese Kanone.

Fazit

Der Traffic ist seit der Aktion um 95% reduziert worden.
Ziet, das auch auch die anderen Server auszurollen!

Spart irgendwie auch Strom …

This post is licensed under CC BY 4.0 by the author.