Déployer CrowdSec avec Docker¶
CrowdSec est une solution open source de détection comportementale qui analyse les journaux et différents événements afin d'identifier des comportements malveillants.
Contrairement à un simple système de blocage basé sur des listes d'adresses IP, CrowdSec s'appuie sur des scénarios de détection pour identifier différents types d'attaques, puis produit des décisions qui peuvent être exploitées par des bouncers afin d'appliquer une remédiation, par exemple en bloquant une adresse IP.
Dans cette partie, nous allons uniquement voir comment déployer CrowdSec afin de l'intégrer à Nginx Control.
Pour une installation complète de CrowdSec avec la configuration des bouncers et la mise en place de la remédiation, vous trouverez plusieurs ressources complémentaires à la fin de cette page.
Déployer CrowdSec¶
Dans un dossier dédié à CrowdSec, par exemple /containers/crowdsec, créer le fichier compose.yml suivant :
services:
crowdsec:
image: crowdsecurity/crowdsec:latest
restart: always
user: root
environment:
COLLECTIONS: "crowdsecurity/nginx crowdsecurity/sshd crowdsecurity/wordpress crowdsecurity/base-http-scenarios crowdsecurity/http-cve crowdsecurity/http-dos"
GID: "${GID-1000}"
volumes:
- /var/log:/var/log
- /containers/nginx/nginx/logs:/var/log/nginx
- ./crowdsec/db:/var/lib/crowdsec/data/
- ./crowdsec/config:/etc/crowdsec/
networks:
crowdsec_network:
ipv4_address: 10.199.0.5
networks:
crowdsec_network:
ipam:
driver: default
config:
- subnet: 10.199.0.0/24
À noter : cet exemple monte directement le répertoire de logs de Nginx Control dans le conteneur CrowdSec. Adaptez le chemin
/containers/nginx/nginx/logsà votre installation.
Démarrer ensuite CrowdSec :
docker compose up -d
Vérifier que le conteneur est correctement démarré :
docker compose ps
Configurer l'analyse des logs Nginx¶
Nous allons maintenant indiquer à CrowdSec qu'il doit analyser les journaux Nginx.
Dans le répertoire :
./crowdsec/config/acquis.d/
créer le fichier :
nginx.yaml
Par exemple :
nano ./crowdsec/config/acquis.d/nginx.yaml
Ajouter le contenu suivant :
filenames:
- /var/log/nginx/*.log
labels:
type: nginx
Le chemin /var/log/nginx/*.log correspond au chemin vu depuis le conteneur CrowdSec.
Le montage Docker défini précédemment permet de faire correspondre ce chemin aux journaux générés par Nginx Control sur l'hôte.
Redémarrer ensuite CrowdSec afin de prendre en compte la nouvelle configuration :
docker compose restart crowdsec
Vérifier le fonctionnement¶
Pour vérifier que CrowdSec analyse bien les journaux, utiliser la commande :
docker compose exec crowdsec cscli metrics
Cette commande permet notamment de vérifier que les fichiers de logs sont bien pris en compte et que les événements sont analysés par CrowdSec.
Si les journaux Nginx sont correctement détectés, ils apparaissent dans les métriques de CrowdSec.
Intégration avec Nginx Control¶
À ce stade, CrowdSec est capable d'analyser les journaux générés par Nginx Control.
Cette configuration constitue la partie détection.
Elle permet notamment à Nginx Control de s'appuyer sur CrowdSec pour obtenir des informations sur les adresses IP ayant fait l'objet de décisions ou de détections.
Pour mettre en place le blocage automatique des adresses IP, il faut ensuite configurer un bouncer adapté à votre architecture.
CrowdSec et Nginx Control sont complémentaires : Nginx Control fournit l'administration et la visibilité autour de Nginx, tandis que CrowdSec apporte son moteur de détection comportementale et, avec un bouncer, la capacité de mettre en œuvre une remédiation automatique.
Ressources complémentaires¶
Si vous souhaitez aller plus loin dans la mise en place de CrowdSec, voici plusieurs articles disponibles sur RDR-IT :