Ensuite, pour utiliser CrowdSec, tout se passe via leur client :
cscli
Comme vous pouvez le voir, les commandes du client CrowdSec sont nombreuses:
cscli is the main command to interact with your crowdsec service, scenarios & db.
It is meant to allow you to manage bans, parsers/scenarios/etc, api and generally manage you crowdsec setup.
Usage:
cscli [command]
Available Commands:
alerts Manage alerts
bouncers Manage bouncers [requires local API]
capi Manage interaction with Central API (CAPI)
collections Manage collections from hub
completion Generate completion script
config Allows to view current config
console Manage interaction with Crowdsec console (https://app.crowdsec.net)
dashboard Manage your metabase dashboard container [requires local API]
decisions Manage decisions
help Help about any command
hub Manage Hub
lapi Manage interaction with Local API (LAPI)
machines Manage local API machines [requires local API]
metrics Display crowdsec prometheus metrics.
parsers Install/Remove/Upgrade/Inspect parser(s) from hub
postoverflows Install/Remove/Upgrade/Inspect postoverflow(s) from hub
scenarios Install/Remove/Upgrade/Inspect scenario(s) from hub
simulation Manage simulation status of scenarios
version Display version and exit.
Flags:
-c, --config string path to crowdsec config file (default "/etc/crowdsec/config.yaml")
-o, --output string Output format : human, json, raw.
--debug Set logging to debug.
--info Set logging to info.
--warning Set logging to warning.
--error Set logging to error.
--trace Set logging to trace.
-h, --help help for cscli
Use "cscli [command] --help" for more information about a command.
Observer l’activité
À l’aide de la commande cscli, vous pouvez afficher les métriques récoltées par l’outil.
cscli metrics

Cela vous affichera un tableau contenant de nombreuses informations comme le nombre d’attaques dans les différentes collections (modules)
Lister les Collections
Les Collections sont un ensemble de Parsers et de scenarios préconfigurés pour vous facilitez la vie.
Les collections disponibles sont ici: https://hub.crowdsec.net/browse/#collections
On peux les lister comme ceci:
$ sudo cscli collections list
-------------------------------------------------------------------------------------------------------------
NAME 📦 STATUS VERSION LOCAL PATH
-------------------------------------------------------------------------------------------------------------
crowdsecurity/nginx ✔️ enabled 0.1 /etc/crowdsec/collections/nginx.yaml
crowdsecurity/base-http-scenarios ✔️ enabled 0.1 /etc/crowdsec/collections/base-http-scenarios.yaml
crowdsecurity/sshd ✔️ enabled 0.1 /etc/crowdsec/collections/sshd.yaml
crowdsecurity/linux ✔️ enabled 0.2 /etc/crowdsec/collections/linux.yaml
-------------------------------------------------------------------------------------------------------------
Installer une Collection
Exemple ici avec la collection whitelist-good-actors:
cscli collections install crowdsecurity/whitelist-good-actors
INFO[05-08-2021 03:24:32 PM] crowdsecurity/seo-bots-whitelist : OK
INFO[05-08-2021 03:24:32 PM] downloading data 'https://raw.githubusercontent.com/crowdsecurity/sec-lists/master/whitelists/benign_bots/search_engine_crawlers/rdns_seo_bots.txt' in '/var/lib/crowdsec/data/rdns_seo_bots.txt'
INFO[05-08-2021 03:24:32 PM] downloading data 'https://raw.githubusercontent.com/crowdsecurity/sec-lists/master/whitelists/benign_bots/search_engine_crawlers/rnds_seo_bots.regex' in '/var/lib/crowdsec/data/rdns_seo_bots.regex'
INFO[05-08-2021 03:24:32 PM] downloading data 'https://raw.githubusercontent.com/crowdsecurity/sec-lists/master/whitelists/benign_bots/search_engine_crawlers/ip_seo_bots.txt' in '/var/lib/crowdsec/data/ip_seo_bots.txt'
INFO[05-08-2021 03:24:32 PM] /etc/crowdsec/postoverflows/s01-whitelist doesn't exist, create
INFO[05-08-2021 03:24:32 PM] Enabled postoverflows : crowdsecurity/seo-bots-whitelist
INFO[05-08-2021 03:24:33 PM] crowdsecurity/cdn-whitelist : OK
INFO[05-08-2021 03:24:33 PM] downloading data 'https://www.cloudflare.com/ips-v4' in '/var/lib/crowdsec/data/cloudflare_ips.txt'
INFO[05-08-2021 03:24:33 PM] Enabled postoverflows : crowdsecurity/cdn-whitelist
INFO[05-08-2021 03:24:33 PM] crowdsecurity/rdns : OK
INFO[05-08-2021 03:24:33 PM] /etc/crowdsec/postoverflows/s00-enrich doesn't exist, create
INFO[05-08-2021 03:24:33 PM] Enabled postoverflows : crowdsecurity/rdns
INFO[05-08-2021 03:24:33 PM] crowdsecurity/whitelist-good-actors : OK
INFO[05-08-2021 03:24:33 PM] Enabled collections : crowdsecurity/whitelist-good-actors
INFO[05-08-2021 03:24:33 PM] Enabled crowdsecurity/whitelist-good-actors
INFO[05-08-2021 03:24:33 PM] Run 'sudo systemctl reload crowdsec' for the new configuration to be effective.
On reload Crowdsec:
systemctl reload crowdsec
Upgrade d’une collection Installée
cscli hub update
cscli collections upgrade crowdsecurity/sshd
$ sudo cscli collections upgrade crowdsecurity/sshd
INFO[0000] crowdsecurity/sshd : up-to-date
WARN[0000] crowdsecurity/sshd-logs : overwrite
WARN[0000] crowdsecurity/ssh-bf : overwrite
WARN[0000] crowdsecurity/sshd : overwrite
INFO[0000] 📦 crowdsecurity/sshd : updated
INFO[0000] Upgraded 1 items
INFO[0000] Run 'systemctl reload crowdsec' for the new configuration to be effective.
$ systemctl reload crowdsec
On reload Crowdsec:
systemctl reload crowdsec
Monitoring d’une collection Installée
sudo cscli collections inspect crowdsecurity/sshd
$ sudo cscli collections inspect crowdsecurity/sshd
type: collections
name: crowdsecurity/sshd
filename: sshd.yaml
description: 'sshd support : parser and brute-force detection'
author: crowdsecurity
belongs_to_collections:
- crowdsecurity/linux
- crowdsecurity/linux
remote_path: collections/crowdsecurity/sshd.yaml
version: "0.1"
local_path: /etc/crowdsec/collections/sshd.yaml
localversion: "0.1"
localhash: 21159aeb87529efcf1a5033f720413d5321a6451bab679a999f7f01a7aa972b3
installed: true
downloaded: true
uptodate: true
tainted: false
local: false
parsers:
- crowdsecurity/sshd-logs
scenarios:
- crowdsecurity/ssh-bf
Current metrics :
- (Scenario) crowdsecurity/ssh-bf:
+---------------+-----------+--------------+--------+---------+
| CURRENT COUNT | OVERFLOWS | INSTANCIATED | POURED | EXPIRED |
+---------------+-----------+--------------+--------+---------+
| 0 | 1 | 2 | 10 | 1 |
+---------------+-----------+--------------+--------+---------+
Lister les parsers
Les Parsers sont des analyseurs (essentiellement de logs) correspondants à une application ou un service.
Les Parsers disponibles sont ici: https://hub.crowdsec.net/browse/#configurations
On peux les lister comme ceci:
sudo cscli parsers list
[email protected]:/home/nodebb/nodebb# sudo cscli parsers list
-------------------------------------------------------------------------------------------------------------
NAME 📦 STATUS VERSION LOCAL PATH
-------------------------------------------------------------------------------------------------------------
crowdsecurity/whitelists ✔️ enabled 0.2 /etc/crowdsec/parsers/s02-enrich/whitelists.yaml
crowdsecurity/syslog-logs ✔️ enabled 0.1 /etc/crowdsec/parsers/s00-raw/syslog-logs.yaml
crowdsecurity/pgsql-logs ✔️ enabled 0.4 /etc/crowdsec/parsers/s01-parse/pgsql-logs.yaml
crowdsecurity/vsftpd-logs ✔️ enabled 0.1 /etc/crowdsec/parsers/s01-parse/vsftpd-logs.yaml
crowdsecurity/dateparse-enrich ✔️ enabled 0.1 /etc/crowdsec/parsers/s02-enrich/dateparse-enrich.yaml
crowdsecurity/modsecurity ✔️ enabled 0.1 /etc/crowdsec/parsers/s01-parse/modsecurity.yaml
crowdsecurity/http-logs ✔️ enabled 0.6 /etc/crowdsec/parsers/s02-enrich/http-logs.yaml
crowdsecurity/nginx-logs ✔️ enabled 0.6 /etc/crowdsec/parsers/s01-parse/nginx-logs.yaml
crowdsecurity/sshd-logs ✔️ enabled 0.7 /etc/crowdsec/parsers/s01-parse/sshd-logs.yaml
crowdsecurity/geoip-enrich ✔️ enabled 0.2 /etc/crowdsec/parsers/s02-enrich/geoip-enrich.yaml
crowdsecurity/iptables-logs ✔️ enabled 0.2 /etc/crowdsec/parsers/s01-parse/iptables-logs.yaml
-------------------------------------------------------------------------------------------------------------
Installer un Parser
Exemple ici avec le Parser iptables-logs:
$ sudo cscli parsers install crowdsecurity/iptables-logs
INFO[0000] crowdsecurity/iptables-logs : OK
INFO[0000] Enabled parsers : crowdsecurity/iptables-logs
INFO[0000] Enabled crowdsecurity/iptables-logs
INFO[0000] Run 'systemctl reload crowdsec' for the new configuration to be effective.
On reload Crowdsec:
systemctl reload crowdsec
Upgrade d’un Parser Installé
$ sudo cscli parsers upgrade crowdsecurity/sshd-logs
INFO[0000] crowdsecurity/sshd : up-to-date
WARN[0000] crowdsecurity/sshd-logs : overwrite
WARN[0000] crowdsecurity/ssh-bf : overwrite
WARN[0000] crowdsecurity/sshd : overwrite
INFO[0000] 📦 crowdsecurity/sshd : updated
INFO[0000] Upgraded 1 items
INFO[0000] Run 'systemctl reload crowdsec' for the new configuration to be effective.
On reload Crowdsec:
systemctl reload crowdsec
Monitoring d’un Parser installé
$ sudo cscli parsers inspect crowdsecurity/sshd-logs
type: parsers
stage: s01-parse
name: crowdsecurity/sshd-logs
filename: sshd-logs.yaml
description: Parse openSSH logs
author: crowdsecurity
belongs_to_collections:
- crowdsecurity/sshd
remote_path: parsers/s01-parse/crowdsecurity/sshd-logs.yaml
version: "0.1"
local_path: /etc/crowdsec/parsers/s01-parse/sshd-logs.yaml
localversion: "0.1"
localhash: ecd40cb8cd95e2bad398824ab67b479362cdbf0e1598b8833e2f537ae3ce2f93
installed: true
downloaded: true
uptodate: true
tainted: false
local: false
Current metrics :
- (Parser) crowdsecurity/sshd-logs:
+-------------------+-------+--------+----------+
| PARSERS | HITS | PARSED | UNPARSED |
+-------------------+-------+--------+----------+
| /var/log/auth.log | 94138 | 42404 | 51734 |
+-------------------+-------+--------+----------+
Lister les scénarios
Les Scénarios sont un ensemble de Parsers et d’actions préconfigurées.
Les scénarios disponibles sont ici: https://hub.crowdsec.net/browse/#configurations
On peux les lister comme ceci:
$ sudo cscli scenarios list
---------------------------------------------------------------------------------------------------------------------------
NAME 📦 STATUS VERSION LOCAL PATH
---------------------------------------------------------------------------------------------------------------------------
crowdsecurity/ssh-bf ✔️ enabled 0.1 /etc/crowdsec/scenarios/ssh-bf.yaml
crowdsecurity/http-bf-wordpress_bf ✔️ enabled 0.1 /etc/crowdsec/scenarios/http-bf-wordpress_bf.yaml
crowdsecurity/http-crawl-non_statics ✔️ enabled 0.2 /etc/crowdsec/scenarios/http-crawl-non_statics.yaml
crowdsecurity/http-probing ✔️ enabled 0.1 /etc/crowdsec/scenarios/http-probing.yaml
crowdsecurity/http-sensitive-files ✔️ enabled 0.2 /etc/crowdsec/scenarios/http-sensitive-files.yaml
crowdsecurity/http-bad-user-agent ✔️ enabled 0.2 /etc/crowdsec/scenarios/http-bad-user-agent.yaml
crowdsecurity/http-path-traversal-probing ✔️ enabled 0.2 /etc/crowdsec/scenarios/http-path-traversal-probing.yaml
crowdsecurity/http-sqli-probing ✔️ enabled 0.2 /etc/crowdsec/scenarios/http-sqli-probing.yaml
crowdsecurity/http-backdoors-attempts ✔️ enabled 0.2 /etc/crowdsec/scenarios/http-backdoors-attempts.yaml
crowdsecurity/http-xss-probing ✔️ enabled 0.2 /etc/crowdsec/scenarios/http-xss-probing.yaml
---------------------------------------------------------------------------------------------------------------------------
Installer un scénario
Exemple ici avec le Scénario http-bf-wordpress_bf:
$ sudo cscli scenarios install crowdsecurity/http-bf-wordpress_bf
INFO[0000] crowdsecurity/http-bf-wordpress_bf : OK
INFO[0000] Enabled scenarios : crowdsecurity/http-bf-wordpress_bf
INFO[0000] Enabled crowdsecurity/http-bf-wordpress_bf
INFO[0000] Run 'systemctl reload crowdsec' for the new configuration to be effective.
$ systemctl reload crowdsec
On reload Crowdsec:
systemctl reload crowdsec
Upgrade d’un scénario installé
$ sudo cscli scenarios upgrade crowdsecurity/ssh-bf
INFO[0000] crowdsecurity/ssh-bf : up-to-date
WARN[0000] crowdsecurity/ssh-bf : overwrite
INFO[0000] 📦 crowdsecurity/ssh-bf : updated
INFO[0000] Upgraded 1 items
INFO[0000] Run 'systemctl reload crowdsec' for the new configuration to be effective.
On reload Crowdsec:
systemctl reload crowdsec
Monitoring d’un scénario installé
$ sudo cscli scenarios inspect crowdsecurity/ssh-bf
type: scenarios
name: crowdsecurity/ssh-bf
filename: ssh-bf.yaml
description: Detect ssh bruteforce
author: crowdsecurity
references:
- http://wikipedia.com/ssh-bf-is-bad
belongs_to_collections:
- crowdsecurity/sshd
remote_path: scenarios/crowdsecurity/ssh-bf.yaml
version: "0.1"
local_path: /etc/crowdsec/scenarios/ssh-bf.yaml
localversion: "0.1"
localhash: 4441dcff07020f6690d998b7101e642359ba405c2abb83565bbbdcee36de280f
installed: true
downloaded: true
uptodate: true
tainted: false
local: false
Current metrics :
- (Scenario) crowdsecurity/ssh-bf:
+---------------+-----------+--------------+--------+---------+
| CURRENT COUNT | OVERFLOWS | INSTANCIATED | POURED | EXPIRED |
+---------------+-----------+--------------+--------+---------+
| 14 | 5700 | 7987 | 42572 | 2273 |
+---------------+-----------+--------------+--------+---------+
Lister les régles de blocage
Pour visualiser vos règles, rien de plus simple. Faites :
cscli decisions list
Bannir une @IP
Avec le client CrowdSec, vous pouvez avec la commande « ban », ajouter ou supprimer manuellement des IPs à bloquer. Et la commande « ban list » vous permet de lister les IPs bloquées sur votre système.
Ajouter un ban manuellement pendant 24 heures
cscli decisions add --ip 1.2.3.4 --duration 24h
Ajouter un ban sur une ip et réclamer un captcha / un ban / un throttle :
cscli decisions add --ip 1.2.3.4 --duration 24h --type captcha
Ajouter un ban sur une rangée complète d’IPs :
cscli decisions add --range 1.2.3.0/24
Retirer un blocage
Vous pouvez bien sûr défaire vos blocages manuels. Si vous voulez supprimer le ban de l’IP 1.2.3.4 :
cscli decisions delete -i 1.2.3.4
Supprimer le ban de la rangée 1.2.3.0/24 :
cscli decisions delete -r 1.2.3.0/24
Ou pour supprimer toutes les règles de bannissement exigeant un captcha :
cscli decisions delete --type captcha
Mettre à jour l’ensemble de vos scénarios, parseurs, collections et postoverflows via le hub :
cscli hub update
Bref, vous avez compris le principe. En procédant de cette manière, CrowdSec ne se contente pas de détecter les attaques en utilisant vos logs, et il peut également déclencher diverses actions une fois que quelque chose est détecté, comme par exemple.
- Bloquer les IPs dans Cloudflare
- Exécuter vos propres scripts
- Établir un blocage dans netfilter / iptables
- Refuser l’accès d’une IP à Nginx
- Bloquer un accès à votre WordPress
- …etc.
Gérer les alertes
Les alertes peuvent également être listées comme ceci :
$ sudo cscli alerts list
+----+---------------------+---------------------+---------+----+-----------+--------------------------------+
| ID | VALUE | REASON | COUNTRY | AS | DECISIONS | CREATED AT |
+----+---------------------+---------------------+---------+----+-----------+--------------------------------+
| 4 | Community blocklist | update : +56/-0 IPs | | | ban:56 | 2021-08-05 16:23:53.315479136 |
| | | | | | | +0200 +0200 |
| 3 | Community blocklist | update : +56/-0 IPs | | | ban:56 | 2021-08-05 14:23:53.049796959 |
| | | | | | | +0200 +0200 |
| 2 | Community blocklist | update : +70/-0 IPs | | | ban:70 | 2021-08-05 12:23:52.158975664 |
| | | | | | | +0200 +0200 |
| 1 | Community blocklist | update : +70/-0 IPs | | | ban:70 | 2021-08-05 12:05:31.785604698 |
| | | | | | | +0200 +0200 |
+----+---------------------+---------------------+---------+----+-----------+--------------------------------+
Pour obtenir plus de détails sur une alerte en particulier, il faut utiliser la commande suivante en remplaçant le X par l’ID de l’alerte :
cscli alerts inspect X
Et pour supprimer une alerte :
cscli alerts delete X
Activer l’auto-complétion
Il est possible d’activer l**'auto-complétion** pour le bash (interpréteur de commandes) de la commande cscli.
Pour se faire:
cscli completion bash | sudo tee /etc/bash_completion.d/cscli $ source ~/.bashrc
On se déconnecte du prompt et on se reconnecte pour activer l’auto-complétion.
A savoir qu’il est possible de le faire pour ZSH. Plus d’informations ICI.
La configuration
La configuration se passe dans des fichiers YAML. Ainsi, il est possible d’écrire vos propres fichiers de configuration de type :
- Acquisition: Permet de définir les fichiers de log à surveiller
- Parseurs: Permet d’écrire un parseur spécifique
- Scénarios: Permets d’écrire un nouveau scénario selon vos besoins
- Listes blanches: Les listes blanches fonctionnent comme des parseurs qui rejettent les événements que vous ne voulez pas traiter.
Ainsi vous pourrez faire fonctionner CrowdSec avec tous vos services et votre propre code, avec toutes leurs particularités.
Sauvegarder la configuration
Une fois que CrowdSec est fonctionnel et configuré, je vous invite vraiment à sauvegarder la config (api, parseurs, scénarios…etc) avec la commande suivante :
cscli config backup save ./DOSSIER
Restaurer la configuration
cscli config backup restore ./DOSSIER
Vous l’aurez compris, CrowdSec est un outil très puissant et également très souple pour s’adapter à tous les besoins. Je vous invite à regarder le site officiel pour plus de détails.