Table of Contents
Dat klopt volledig. Het draaien van CrowdSec in een Docker-container is de standaardmethode voor deze setup en werkt uitstekend samen met Nginx Proxy Manager (NPM) en andere Docker-containers.Het belangrijkste principe is dat CrowdSec als een “bouncer” fungeert die de logs van je andere containers (vooral NPM) leest, beslissingen neemt over verdachte IP-adressen, en vervolgens instructies geeft aan de firewall (of de bouncer-plugin in NPM) om die blokkeren.Hier is een stap-voor-stap plan om dit in te richten op je Ubuntu server.
Stap 1: De benodigde componenten
Je hebt drie hoofdonderdelen nodig in je Docker-omgeving:
CrowdSec Agent: De container die logs analyseert en beslissingen neemt. CrowdSec Bouncer (voor Nginx): Een plugin of container die de blokkades daadwerkelijk doorvoert in Nginx Proxy Manager. Log-drivers: Zorg dat je Nginx Proxy Manager logs naar een plek schrijft die CrowdSec kan lezen (meestal via een gedeelde volume).
Stap 2: De docker-compose.yml voor CrowdSec
Maak een nieuwe map aan, bijvoorbeeld /opt/crowdsec, en maak daarin een docker-compose.yml. Belangrijk: Je moet zorgen dat de logs van NPM beschikbaar zijn voor CrowdSec. De makkelijkste manier is om de logmap van NPM te mounten in de CrowdSec container. Hier is een voorbeeldconfiguratie. Pas de paden (volumes) aan naar jouw specifieke structuur.
version: '3.8' services: crowdsec: image: crowdsecurity/crowdsec:latest container_name: crowdsec environment: - COLLECTIONS=crowdsecurity/nginx crowdsecurity/linux - GID=1000 # Pas dit aan naar de GID van je gebruiker als nodig - UID=1000 # Pas dit aan naar de UID van je gebruiker als nodig volumes: # De belangrijkste stap: Mount de logs van NPM naar binnen # Controleer waar NPM zijn logs schrijft (vaak /var/log/nginx of een custom path) - ./logs:/var/log/nginx:ro # Persistente data voor de database en configuratie - crowdsec_data:/var/lib/crowdsec/data/ - crowdsec_config:/etc/crowdsec/ # Optioneel: Mount de firewall config als je de host firewall wilt gebruiken # - /lib/modules:/lib/modules:ro # - /sys/fs/cgroup:/sys/fs/cgroup:ro cap_add: - NET_ADMIN # Nodig als CrowdSec de firewall (iptables/nftables) direct mag aansturen restart: unless-stopped #Optioneel: Als je de standalone bouncer wilt gebruiken i.p.v. de NPM plugin #Dit is vaak niet nodig als je de NPM plugin gebruikt, maar handig voor andere containers crowdsec-bouncer: image: crowdsecurity/crowdsec-bouncer-traefik:latest # Of nginx, afhankelijk van je setup # Meestal niet nodig als je de ingebouwde bouncer in NPM gebruikt depends_on: - crowdsec restart: unless-stopped volumes: crowdsec_data: crowdsec_config:
Cruciaal punt over de logs: Nginx Proxy Manager schrijft standaard logs naar /var/log/npm/access.log en /var/log/npm/error.log binnen de NPM container. Je hebt twee opties om deze toegankelijk te maken voor CrowdSec:
Optie A (Aanbevolen): Configureer NPM om logs naar een gedeelde host-map te schrijven (via volumes in de NPM compose file). Optie B: Gebruik docker logs piping (minder stabiel voor productie) of mount de Docker socket (niet aanbevolen voor security).
De beste praktijk is Optie A. Pas je docker-compose.yml van Nginx Proxy Manager aan zodat logs naar een host-map worden geschreven, bijvoorbeeld:
In je NPM compose file volumes: ./npm-data:/data ./npm-logs:/var/log/npm <-- Zorg dat dit bestaat en toegankelijk is
En in de CrowdSec compose file mount je dan ./npm-logs naar /var/log/nginx (of pas de collectie aan in CrowdSec).
Stap 3: Installatie en Configuratie van de Bouncer in NPM
CrowdSec heeft een specifieke integratie voor Nginx Proxy Manager. Je hoeft geen aparte bouncer-container te draaien als je de CrowdSec Bouncer voor NPM gebruikt.
Verbind met je CrowdSec Account: Start eerst de CrowdSec container:
cd /opt/crowdsec docker compose up -d
Ga naar de terminal van de container om je te registreren:
docker exec -it crowdsec cscli machines add nginx-bouncer --auto docker exec -it crowdsec cscli bouncers add nginx-bouncer
Dit geeft je een API Key. Sla deze op.
Installeer de Bouncer in Nginx Proxy Manager:
Ga naar de webinterface van Nginx Proxy Manager. Ga naar Settings → Advanced (of soms onder een apart tabblad “CrowdSec” als de plugin al geïnstalleerd is, maar vaak moet je de plugin eerst toevoegen). Let op: Soms moet je de bouncer-plugin handmatig installeren via de Docker image van NPM als deze niet standaard zit. Er is een community image jc21/nginx-proxy-manager die ondersteuning heeft, maar vaak wordt de bouncer als een aparte service gezien die via de API communiceert.
De moderne methode (via de officiële bouncer plugin): Er is een specifieke Docker image voor de bouncer die werkt met NPM, of je gebruikt de crowdsecurity/nginx-bouncer. Echter, de meest robuuste methode voor NPM is het gebruik van de CrowdSec Bouncer voor Nginx die als een sidecar of externe service werkt, OF het gebruik van de ingebouwde functionaliteit als je NPM recent genoeg is. Alternatieve, zeer populaire methode: Gebruik de crowdsecurity/nginx-bouncer container die communiceert met de CrowdSec agent en de firewall op de host aanstuurt (via iptables/nftables), wat effectief alle verkeer blokkeert voordat het NPM bereikt. Dit is vaak veiliger dan alleen NPM te blokkeren. Methode: Host Firewall Blokkade (Aanbevolen) Als CrowdSec de host-firewall aanstuurt, hoef je niets in NPM te configureren behalve de logs te delen. Voeg in je CrowdSec docker-compose.yml de volgende capabilities toe (zoals hierboven in Stap 2) en installeer de juiste collectie:
docker exec -it crowdsec cscli collections install crowdsecurity/firewall
Zorg dat de cap_add: - NET_ADMIN er staat. CrowdSec zal nu automatisch verdachte IP's blokkeren op het niveau van de server (iptables/nftables). Dit is effectiever omdat het verkeer al wordt geblokkeerd voordat het de NPM container bereikt.
Stap 4: Verificatie
Logs controleren: Kijk of CrowdSec logs leest:
docker logs crowdsec | grep -i "parsed"
Testen: Probeer vanaf een ander IP (bijv. je telefoon op mobiel internet) meerdere keren foutieve inlogpogingen te doen op een van je services. Kijk daarna in de CrowdSec logs:
docker exec -it crowdsec cscli decisions list
Je zou je IP-adres moeten zien staan met een actie ban.
Samenvatting van de werking
NPM schrijft logs naar een gedeelde map. CrowdSec leest die logs, herkent patronen (bijv. brute force). CrowdSec besluit dat een IP verdacht is. CrowdSec voegt een regel toe aan de host firewall (iptables/nftables) via de NET_ADMIN capability. Alle verkeer van dat IP wordt nu direct door de kernel geblokkeerd, nog voordat het NPM bereikt.
Dit is de meest efficiënte en veilige manier om dit op te zetten. Je hoeft geen extra plugins in NPM te installeren als je de host-firewall methode gebruikt.
