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:
- Da versuchte noch immer jemand sich zu registrieren, bzw. ein Bullshit User aufzurufen
- 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 …