Linux Security

Nginx mit CrowdSec absichern – Reverse Proxys und Webserver effektiv schützen

Schützen Sie Ihren Nginx-Webserver oder Reverse Proxy mit CrowdSec vor Brute-Force-Angriffen, Scannern und Bots. Lernen Sie die Einrichtung und Optimierung Schritt für Schritt kennen.

4 min Lesezeit
Grafik: Nginx mit CrowdSec sicher absichern

CrowdSec für Nginx richtig einsetzen

Nginx gehört heute zu den beliebtesten Webservern und Reverse Proxys. Ob als klassischer Webserver, vor Docker-Anwendungen, Nextcloud, Immich oder anderen Self-Hosting-Diensten – Nginx verarbeitet häufig den gesamten eingehenden Datenverkehr eines Servers. Damit wird er zwangsläufig auch zum ersten Ziel automatisierter Angriffe.

Scanner suchen nach bekannten Schwachstellen, Bots testen Login-Seiten und Angreifer versuchen über Webanwendungen Zugriff auf das System zu erhalten. CrowdSec kann diese Aktivitäten anhand der Nginx-Logdateien erkennen und – in Kombination mit einem Bouncer – automatisch Gegenmaßnahmen einleiten.

In diesem Teil der Serie richten wir CrowdSec für Nginx ein, betrachten typische Angriffsmuster und zeigen, wie sich auch Reverse-Proxy-Umgebungen zuverlässig absichern lassen.


Voraussetzungen

Für diesen Beitrag setzen wir Folgendes voraus:

  • Debian 13
  • Nginx installiert und funktionsfähig
  • CrowdSec installiert
  • Root-Rechte oder sudo-Berechtigung
  • Zugriff auf die Nginx-Konfiguration

Ob Nginx läuft, prüfen Sie mit:

sudo systemctl status nginx

Die Ausgabe sollte den Status active (running) anzeigen.


Nginx-Logdateien

CrowdSec arbeitet auf Basis der Logdateien des Webservers.

Standardmäßig verwendet Nginx unter Debian folgende Dateien:

Access-Log

/var/log/nginx/access.log

Error-Log

/var/log/nginx/error.log

Prüfen Sie zunächst, ob Zugriffe protokolliert werden.

sudo tail -f /var/log/nginx/access.log

Öffnen Sie anschließend Ihre Website im Browser.

Neue Logeinträge sollten sofort erscheinen.


Nginx-Collection installieren

Für Nginx stellt CrowdSec eine vorkonfigurierte Collection bereit.

Installation:

sudo cscli collections install crowdsecurity/nginx

Anschließend wird CrowdSec neu gestartet.

sudo systemctl restart crowdsec

Installation überprüfen

Installierte Collections anzeigen:

sudo cscli collections list

Die Ausgabe sollte unter anderem enthalten:

crowdsecurity/nginx

Auch die installierten Parser können überprüft werden.

sudo cscli parsers list

Nginx als Reverse Proxy

Besonders häufig wird Nginx heute als Reverse Proxy eingesetzt.

Typische Anwendungen sind:

  • Nextcloud
  • Immich
  • Beszel
  • Grafana
  • Gitea
  • Vaultwarden
  • Jellyfin
  • Docker-Container
  • Kubernetes-Ingress

In diesen Szenarien empfängt Nginx sämtliche HTTP- oder HTTPS-Anfragen und leitet sie an interne Dienste weiter.

Dadurch eignet sich CrowdSec hervorragend als zentrale Schutzinstanz vor allen dahinterliegenden Anwendungen.


Reverse Proxy richtig konfigurieren

Bei Reverse Proxys ist es wichtig, dass CrowdSec die echte Client-IP-Adresse auswertet.

Verwendet Nginx ausschließlich die IP des vorgeschalteten Load Balancers oder Proxys, können Angriffe nicht korrekt erkannt werden.

Typischerweise wird hierfür real_ip genutzt.

Beispiel:

set_real_ip_from 192.168.1.0/24;
real_ip_header X-Forwarded-For;
real_ip_recursive on;

Passen Sie das Netzwerk an Ihre Umgebung an und vertrauen Sie ausschließlich bekannten Proxys.


Welche Angriffe erkennt CrowdSec?

Die Nginx-Collection erkennt bereits zahlreiche Angriffsmuster.

Dazu gehören unter anderem:

  • Brute-Force-Angriffe
  • Webscanner
  • SQL-Injection
  • Directory Traversal
  • Path Traversal
  • Bad User Agents
  • Bots
  • API-Scanner
  • WordPress-Angriffe
  • bekannte Exploit-Versuche

Neue Szenarien werden regelmäßig über den CrowdSec Hub bereitgestellt.


Brute-Force-Angriffe

Ein Bot versucht wiederholt eine Anmeldung.

Beispiele:

  • /login
  • /admin
  • /wp-login.php
  • /user/login

CrowdSec erkennt:

  • gleiche IP-Adresse
  • viele Anfragen
  • kurzer Zeitraum
  • wiederholte Fehler

Decision

Bouncer

Firewall oder Reverse Proxy blockiert den Zugriff.


Scanner erkennen

Automatisierte Scanner suchen gezielt nach bekannten Dateien und Verzeichnissen.

Typische Beispiele:

/phpmyadmin
/.env
/vendor
/server-status
/wp-admin
/cgi-bin/

Mehrere solcher Zugriffe innerhalb kurzer Zeit sprechen eindeutig für einen Scanner.


Bots erkennen

Nicht jeder Bot ist schädlich.

CrowdSec unterscheidet unter anderem zwischen:

Erwünschte Bots

  • Googlebot
  • Bingbot
  • DuckDuckBot

Verdächtige Bots

  • Exploit-Scanner
  • Login-Bots
  • API-Scanner
  • Scraper
  • Credential-Stuffing-Bots

Dadurch werden Suchmaschinen in der Regel nicht blockiert.


WordPress-Angriffe

Auch wenn WordPress hinter einem Reverse Proxy betrieben wird, erkennt CrowdSec typische Angriffsmuster.

Beispiele:

/wp-login.php
/xmlrpc.php
/wp-admin
/wp-content/plugins/
/wp-content/themes/

Die entsprechenden Szenarien sind bereits Bestandteil der Collection.


Testangriffe durchführen

Nach der Installation sollte die Konfiguration überprüft werden.

Öffnen Sie beispielsweise folgende URLs im Browser:

http://server/.env
http://server/phpmyadmin
http://server/wp-admin

Alternativ:

curl http://server/.env

oder

curl http://server/wp-login.php

Führen Sie Tests ausschließlich gegen eigene Systeme durch.


Alerts auswerten

Erkannte Vorfälle anzeigen:

sudo cscli alerts list

Beispiel:

ID      SCENARIO                   SOURCE
1458    http-sensitive-files       203.0.113.15

Details:

sudo cscli alerts inspect 1458

Hier sehen Sie:

  • IP-Adresse
  • Szenario
  • Zeitpunkt
  • Anzahl der Ereignisse
  • betroffene Anwendung

Decisions überprüfen

Erzeugte Sperren:

sudo cscli decisions list

Ist zusätzlich ein Firewall- oder Nginx-Bouncer installiert, wird der Angreifer automatisch blockiert.


Logdateien überwachen

Während der Tests empfiehlt sich die Live-Auswertung.

Nginx:

sudo tail -f /var/log/nginx/access.log

CrowdSec:

sudo journalctl -u crowdsec -f

Dadurch lässt sich unmittelbar nachvollziehen, wann ein Angriff erkannt wird.


Metriken prüfen

Ob CrowdSec die Nginx-Logs verarbeitet:

sudo cscli metrics

Hier erscheinen unter anderem:

  • gelesene Logeinträge
  • Parser
  • Szenarien
  • Alerts
  • Decisions

Optimierungen

Für produktive Umgebungen empfiehlt sich Folgendes:

Hub regelmäßig aktualisieren

sudo cscli hub update
sudo cscli hub upgrade

Firewall-Bouncer verwenden

Eine Sperre direkt auf Firewall-Ebene verhindert unnötige Last auf dem Webserver.


Trusted Proxies korrekt konfigurieren

Gerade bei Reverse-Proxys ist die korrekte Client-IP entscheidend.


Logrotation prüfen

Achten Sie darauf, dass CrowdSec nach einer Logrotation weiterhin die aktuellen Dateien überwacht.


Alerts regelmäßig kontrollieren

Nicht jede ungewöhnliche Anfrage ist automatisch ein Angriff.

Regelmäßige Kontrollen helfen dabei, Fehlalarme frühzeitig zu erkennen.


Typische Fehler

Keine Alerts

Kontrollieren:

sudo cscli metrics

Werden überhaupt Nginx-Logs verarbeitet?


Falsche Client-IP

Prüfen Sie die real_ip-Konfiguration von Nginx.


Keine Logeinträge

sudo tail -f /var/log/nginx/access.log

Collection fehlt

sudo cscli collections list


Mit der Nginx-Collection lässt sich CrowdSec schnell und unkompliziert für moderne Webserver und Reverse-Proxys einrichten. Die integrierten Parser und Szenarien erkennen typische Bedrohungen wie Brute-Force-Angriffe, Webscanner, Bots oder WordPress-spezifische Angriffe anhand der Nginx-Logdateien und können diese – in Verbindung mit einem Bouncer – automatisch blockieren.

Besonders in Umgebungen mit Reverse Proxys ist eine korrekte Konfiguration der Client-IP entscheidend, damit CrowdSec Angriffe zuverlässig dem tatsächlichen Ursprung zuordnen kann. Mit regelmäßigen Updates der Hub-Komponenten und einer kontinuierlichen Überwachung von Alerts und Metriken bleibt Ihr Nginx-Server langfristig gegen aktuelle Bedrohungen geschützt.

Im nächsten Teil der Serie kümmern wir uns um den Schutz von SSH. Sie erfahren, wie CrowdSec Brute-Force-Angriffe auf den SSH-Dienst erkennt, Passwort-Spraying identifiziert und Ihren Server mit automatischen Sperren wirkungsvoll absichert.