Wie man Cyberangriffe mit CrowdSec abwehrt!

Die steigende Anzahl von Cyberattacken auf meine online erreichbaren Systeme hat mich dazu bewogen, meine Sicherheitsstrategie zum Ende des Jahres auf den Prüfstand zu stellen. Dabei ist mir aufgefallen, dass Fail2Ban inzwischen nicht mehr auf dem neuesten Stand der Technik ist. Auf meiner Suche nach einer effektiveren und immer noch kostenfreien Lösung stieß ich auf CrowdSec.

Im Gegensatz zu Fail2Ban, das ausschließlich Logdateien auf Anomalien untersucht, blockiert CrowdSec Angreifer zusätzlich anhand zentral gepflegter IP-Blocklisten. Das Tool bietet außerdem Module für alle gängigen Webserver oder darauf laufende Software wie WordPress oder Nextcloud an. Besonders faszinierend ist dabei die Vielfalt der Blocking-Methoden.

Neben der Firewall-Blockade können auch Captchas angezeigt oder eine 403-Fehlermeldung ausgegeben werden. Ein praktisches Web-Dashboard ermöglicht zudem die zentrale Überwachung der eigenen Infrastruktur. Nachdem ich CrowdSec installiert und getestet habe, kann ich eins bereits vorwegnehmen: Fail2Ban nutze ich erstmal nicht mehr. Warum? Das verrate ich dir im Folgenden.

Was ist CrowdSec genau?

Das Tool ist in der Programmiersprache Go verfasst und wird stetig beliebter. Ein maßgeblicher Aspekt hierbei ist, dass CrowdSec laut eigener Aussage den Bestimmungen der Datenschutz-Grundverordnung (DSGVO) entspricht. Das gilt übrigens auch, wenn man die Angriffsprotokolle mit der Community teilt, damit die gemeinschaftlich genutzte IP-Blockliste noch besser wird.

Übertragen werden in so einem Fall lediglich 3 Parameter: der Zeitstempel, die betroffene IP-Adresse sowie die verletzte Richtlinie. Zusätzlich zum allgemeinen Schutz vor bekannten Angreifern werden hier auch Attacken in Echtzeit erkannt und letztendlich blockiert. Möglich macht das die kontinuierliche Überwachung der verschiedensten Logdateien.

Die CrowdSec Security Engine verfügt dabei über eine breite Palette an Modulen für alle gängigen Webserver und den darauf laufenden Endanwendungen wie WordPress oder Nextcloud. Allerdings gibt es auch zahlreiche andere Services und Applikationen, die mit dem Open-Source-Intrusion-Prevention-System bestmöglich geschützt werden können.

Besonders gut gefällt mir dabei, dass man die Software jederzeit an die eigenen Bedürfnisse anpassen kann. So erhält man einen wirksamen Schutz gegen Brute-Force-Attacken, HTTP-Angriffe, Portscans, L7-DDoS, Website-Scalping wie auch Scraping. Dank der zentral gepflegten IP-Blockliste werden viele Angreifer deinen Server aber erst gar nicht erreichen.

Damit die Security Engine auf so vielen Systemen wie möglich eingesetzt werden kann, ist sie kompatibel mit iptables sowie nftables. Außerdem kann sie direkt mit den Application Firewalls von Cloudflare oder AWS kommunizieren. Das Gleiche gilt übrigens auch für viele direkt installierte Web Application Firewalls. Sogar in einer OPNsense lässt sich das Tool als Plugin binnen weniger Minuten einbinden.

Zum Abschluss noch eine übersichtliche Zusammenfassung aller Punkte:

  • Geeignete Betriebssysteme: Linux, FreeBSD, Windows sowie OpenWRT.
  • Kompatible Services: Ingress, Nginx, Apache, Caddy, Traefik, MySQL, MariaDB, PostgreSQL, vsftpd, proftpd, pureftpd…
  • Nutzbare Container Engines: Docker & Kubernetes
  • Unterstütze Plattformen: Cloudflare, Fastly & AWS
  • Supportete Applikationen: Nextcloud, WordPress, AdguradHome…

Wie funktioniert CrowdSec?

Um sämtlichen Nutzen aus diesem Artikel ziehen zu können, ist es unerlässlich, das Funktionsprinzip von CrowdSec und die damit verbundenen Begriffe zu kennen. Andernfalls wird das maßgeschneiderte Konfigurieren der Security Engine zur Qual. Bezeichnungen wie Collections, Parser oder Scenarios sind nämlich alles andere als intuitiv.

Für den Anfang reichen uns aber erstmal die 3 Hauptkomponenten:

  • CrowdSec-Agent: Analysiert Protokollinformationen und trifft Entscheidungen basierend auf vordefinierten Regeln und Verhaltensmustern.
  • Lokale API: Nimmt die Entscheidungen entgegen und ermöglicht die Umsetzung verschiedener Gegenmaßnahmen wie das Blockieren von IP-Adressen in der Firewall oder das Anzeigen von Captchas.
  • Bouncer: Führt die von der lokalen API empfangenen Anweisungen aus.

Ergänzend zu dem oben beschriebenen Ablauf erfolgt eine direkte Blockierung von IP-Adressen anhand von allgemeinen oder spezialisierten Blocklisten. Dieses Vorgehen bietet eine zusätzliche Schutzschicht, indem bekannte schädliche IP-Adressen proaktiv blockiert werden. Sobald man aber etwas tiefer in die Materie eintaucht, stolpert man noch über andere Begriffe:

  • Collections: Hierbei handelt es sich um fertig zusammengestellte Pakete aus Parsern, Scenarios und Whitelists für bestimmte Services oder Endanwendungen.
  • Parser: Diese Module sind verantwortlich für das Analysieren von Logdateien. Sie ermöglichen es CrowdSec damit, bestimmte Protokolldaten zu verstehen und korrekt zu interpretieren.
  • Whitelists: Anhand dieser Listen werden Logeinträge von bestimmten IP-Adressen einfach ignoriert. Dies schont zum Beispiel Ressourcen.
  • Scenarios: Hinter dieser Begrifflichkeit verbergen sich vordefinierte Abläufe oder Regeln, die festlegen, wie auf erkannte Verhaltensweisen oder Bedrohungen reagiert werden soll.
  • Profiles: Sie ermöglichen das Festlegen, wie lange IP-Adressen geblockt werden sollen oder welche Blocking-Methode überhaupt angewandt werden soll. Benachrichtigungseinstellungen lassen sich hier ebenfalls konfigurieren.

Zusammenfassend lässt sich sagen, dass CrowdSec eine Sicherheitslösung ist, die sich auf die proaktive Erkennung und Abwehr von Cyberbedrohungen konzentriert. Die Grundlage dafür stellen die Protokollüberwachung und damit einhergehende Verhaltenserkennung dar. Auf der Grundlage von vordefinierten Regeln werden Entscheidungen getroffen, die Angreifer aussperren.

Besonders praktisch ist hierbei das hauseigene Web-Dashboard. Es bietet eine klar strukturierte Oberfläche, mit der du den Status deiner individuellen Instanzen leicht überwachen und verwalten kannst. Diese Dienstleistung ist kostenfrei und ermöglicht die Verwaltung einer unbegrenzten Anzahl von Geräten, die zudem durch Tags kategorisiert werden können.

Wie verdient CrowdSec Geld?

Die Firma verfolgt das Ziel, eine weltweite IP-Reputationsplattform in Kombination mit einer KI-basierten Security Engine aufzubauen. CrowdSec bietet kostenpflichtige Zugänge zur Cloud-API und der gemeinsamen IP-Reputationsdatenbank an. Teilnehmer, die aktiv Informationen zur Datenbank beitragen, sind von den Gebühren befreit.

Es werden natürlich auch klassische Premium-Tarife angeboten, die zusätzliche Services beinhalten. Da wären zum Beispiel spezielle Tools für Data-Mining oder Machine Learning sowie erweiterte Analysen von Cold Logs. Es ist jedoch zu beachten, dass der Einsatz von Data-Mining und Machine Learning möglicherweise aufgrund der DSGVO in Europa Einschränkungen unterliegt.

Trotz der kommerziellen Pläne bleibt CrowdSec ein Open-Source-Tool unter der freien MIT-Lizenz. Dadurch wird sichergestellt, dass die Entwicklergemeinschaft das Tool weiterhin verwenden und anpassen kann. Der Vorteil einer unterstützenden Firma liegt darin, dass die Entwicklung aktiv bleibt und Nutzer regelmäßig von zeitnahen Updates profitieren können.

Wie installiert man CrowdSec?

In weniger als fünf Minuten ist es möglich, Linux-Server auf Basis von Red Hat oder Debian mithilfe von CrowdSec zu sichern. Normalerweise erstelle ich meine Tutorials für Rocky Linux 9. Heute möchte ich jedoch einen Nginx-Webserver auf einem Ubuntu 22.04 System absichern. Dabei sollen die Linux-, SSH- und Nginx-Logs auf Anomalien überwacht werden.

Die zur Installation benötigten Pakete findet man leider nicht in den Standard-Paketquellen. Daher muss man erstmal das Repository von CrowdSec in Ubuntu einbinden. Zum Glück braucht man dafür nur das folgende Skript auszuführen:

curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh | sudo bash

Um vor der Installation sicherzugehen, dass die offizielle Paketquelle korrekt im System eingebunden ist, kannst du diese 2 Befehle nutzen:

apt update && apt-cache policy 

Nun kann es auch schon an die Installation des CrowdSec-Agents gehen. Gemacht wird das mit dem Advanced Package Tool:

apt install crowdsec -y

CrowdSec nutzt eine lokale SQLite-Datenbank zur Verwaltung der Konfigurationsdaten und lokalen Blacklisten. Nach der Installation erhält man allerdings eine unschöne Warnmeldung im Terminal. Diese lässt sich recht leicht beseitigen, indem man den Write Ahead Logging Modus für die Datenbank aktiviert. Dies führt außerdem zu einer verbesserten Performance.

vim /etc/crowdsec/config.yaml

db_config:
log_level: info
type: sqlite
db_path: /var/lib/crowdsec/data/crowdsec.db
use_wal: true

Jetzt fehlt noch die Softwarekomponente für das Blockieren von IP-Adressen – der CrowdSec-Bouncer. Bevor dieser jedoch installiert wird, richte ich zunächst eine lokale Firewall ein. Für Debian- oder Ubuntu-Systeme greife ich gerne auf die Uncomplicated Firewall (UFW) zurück. Diese nutzt unter der Haube Iptables, genauso wie der später installierte Bouncer.

Das Vorgehen ist recht unkompliziert. Zuerst aktiviere ich das UFW-Logging, öffne die SSH- und HTTP/S-Ports und schalte anschließend die Firewall scharf. Falls du vor der Aktivierung prüfen möchtest, ob auf dem System weitere Services erreichbar sind, kannst du dies ganz einfach mittels netstat oder seinem Nachfolger ss tun. Im Folgenden findest du alle benötigten Befehle:

# UFW installieren:
apt install ufw -y

# Logging aktivieren:
ufw logging on

# Port 22/TCP, 80/TCP & 443/TCP öffnen:
ufw allow SSH
ufw allow http
ufw allow https

# Prüfen, ob alle Regeln übernommen wurden:
ufw status verbose

# Kontrollieren, ob es noch weitere Services gibt:
ss -tulpen | grep -E '0\.0\.0\.0:[0-9]+' 

# Firewall scharf schalten:
ufw enable

Aktuell ist der Server noch nicht durch CrowdSec geschützt. Obwohl alle nicht benötigten Ports geschlossen sind und die Logs überwacht werden, erfolgt noch keine Blockierung von Angreifern. Hierfür wird noch der passende Bouncer benötigt, und zwar einer mit Iptables-Unterstützung. Die Installation ist recht simpel und gelingt ganz bequem über das Paketmanagement:

apt install crowdsec-firewall-bouncer-iptables -y

An diesem Punkt angekommen, braucht der CrowdSec-Dienst nur noch gestartet und in den Autostart gelegt zu werden. Dies ermöglicht der folgende Befehl:

systemctl enable --now crowdsec.service

Eine Sicherheits-Engine wie CrowdSec sollte stets auf dem neuesten Stand der Dinge sein. Aufgrund dessen sollte man regelmäßig die neuesten Informationen zu Bedrohungen, Scenarios und Collections einspielen. Am einfachsten gelingt dies mit einem täglich laufenden Cronjob. Eingerichtet wird dieser für den Superuser root mithilfe des unten befindlichen Kommandos:

echo "0 2 * * * /usr/bin/cscli hub update && /usr/bin/cscli hub upgrade > /dev/null 2>&1" >> /var/spool/cron/crontabs/root 

Wie kann man die Funktionalität testen?

CrowdSec ist nun auf dem Server aktiv und erfüllt seine Funktion. Allerdings bin ich jemand, der gerne alles im Detail betrachtet. Ich möchte genau wissen, welche Collections derzeit aktiv sind, welche Scenarios angewendet werden und welche Parser zum Einsatz kommen. Diese Informationen kann ich entweder einzeln abrufen oder die Gesamtübersicht des Hubs nutzen:

cscli collections list
cscli scenarios list 
cscli parser list

cscli hub list

Alle installierten Bouncer kann man sich ebenfalls ausgeben lassen:

cscli bouncer list

Nun kommen wir zur Entscheidungsliste, dem Herzstück des Systems. Hierin sind alle aktuell blockierten IP-Adressen aufgeführt. Standardmäßig werden diese für 4 Stunden gesperrt:

cscli decision list

Das bedeutet jedoch auch, dass darin keine IP-Adressen aufgeführt sind, die in der Vergangenheit negativ aufgefallen sind. Um diese einzusehen, muss man sich die CrowdSec Alerts ausgeben lassen:

cscli alert list

Nach einer frischen Installation gibt es oft noch keine blockierten Angreifer. Man kann sich jedoch anzeigen lassen, welche Logdateien bereits vollständig geparst worden sind und welche noch von CrowdSec durchsucht werden müssen:

cscli metrics

Wie kann CrowdSec fein abgestimmt werden?

Viele Tutorials nehmen sich oft nicht die Zeit, CrowdSec sorgfältig zu konfigurieren. Meist werden unnötige Collections nicht entfernt, und die korrekten Logdateien für vorhandene Virtual Hosts werden nicht angegeben. Auf meinem Webserver läuft beispielsweise kein Apache2, daher ist es auch nicht notwendig, die entsprechende Collection installiert zu lassen:

cscli collections remove crowdsecurity/apache2
systemctl restart crowdsec.service

Des Weiteren habe ich für die installierte Nextcloud dedizierte Logdateien erstellt. CrowdSec ist jedoch nicht darüber informiert und kann diese daher nicht analysieren. Daher füge ich die Pfade noch in der Konfigurationsdatei hinzu:

vim /etc/crowdsec/acquis.yaml

filenames:
  - /var/log/nginx/nextcloud.access.log
  - /var/log/nginx/nextcloud.error.log
  - /var/log/nginx/error.log
  - /var/log/nginx/access.log

systemctl restart crowdsec

Des Weiteren bin ich äußerst neugierig darauf, wie meine beiden Logdateien geparst werden. CrowdSec bietet sogar eine integrierte Funktion, die dir den Parsing-Prozess für jede einzelne Zeile des Logs detailliert erklärt:

cscli explain --file /var/log/nginx/nextcloud.error.log --type nginx

Von Fabian Wüst

Er ist leidenschaftlicher Open-Source-Benutzer und ein begeisterter Technologie-Enthusiast. Als kreativer Kopf hinter Homelabtopia bringt Fabian hier seine umfangreiche Erfahrung als Linux-Admin ein. Um sicherzustellen, dass du aus seinen Beiträgen den größtmöglichen Nutzen ziehen kannst, führt er ausgiebige Tests durch und errichtet dafür immense Setups.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert