Imaginé par les Français Philippe Humeau, ex-fondateur d’un hébergeur haute sécurité et par Thibault Koechlin, pentesteur, et DevSecOps, CrowdSec en 2019 est un outil 100% open source qui combine 2 idées très connues des administrateurs de serveurs.
La première idée c’est d’être capable de bannir automatiquement une IP se connectant sur votre serveur, un peu à la manière d’un Fail2ban. Et la seconde idée c’est de proposer une base de données de ces IPs à la communauté des utilisateurs CrowdSec, un peu comme le fait AbuseIPDB, afin de faire circuler l’info rapidement et que chacun puisse être protégé à son tour.
C’est donc un savant arbitrage entre le comportement d’une adresse IP sur votre serveur et sa réputation qui permet de déterminer s’il s’agit d’une IP légitime ou de celle d’un attaquant. Un peu comme si vous arriviez devant une boite de nuit où vous n’avez jamais mis les pieds et que le videur connaissait déjà votre réputation.
Cela vous permet de détecter tous les types d’attaques et d’y répondre de manière proportionnée à n’importe quel niveau de votre infrastructure (du CDN jusqu’au niveau de l’applicatif)
Développé en Go, cet outil open source s’inspire de la philosophie de Fail2ban, et utilise des modèles Grok et la syntaxe de YAML pour analyser les logs de votre serveur. Une fois l’IP malicieuse interceptée, CrowdSec est capable de remédier aux menaces à l’aide de différents bouncers (block, 403, Captchas, etc.) et les @IP bloquées sont ensuite partagées entre tous les utilisateurs afin d’améliorer encore un peu plus la sécurité de chacun.
Et bien votre serveur produit des logs et différentes sources de données (cloud trails, données en provenance de vos applicatifs…etc.) contenant les adresses IP des machines qui accèdent à ce service.
Un service CrowdSec, hyper simple à mettre en place sur votre machine, se charge alors d’observer tout ça en temps réel ou de manière rétro-active pour une post-analyse sur des logs froids.
Puis, à l’aide de parseurs (Parsers) que vous pouvez mettre en place assez facilement soit en les écrivant vous-même soit en allant les télécharger sur le site de CrowdSec, le comportement de chaque adresse IP relevée dans les logs est analysé.
L’agent CrowdSec normalise (en utilisant du schéma GROK) et enrichit alors cette adresse IP avec des informations complémentaires comme le pays d’origine de l’IP, son AS d’origine, la plage à laquelle elle appartient, puis recherche dans la base de données communautaire de CrowdSec si cette IP a déjà été remarquée sur un autre serveur. Évidemment, si la réponse est oui, elle est bloquée.
Si c’est une nouvelle adresse IP au comportement malveillant, différents scénarios de remédiations peuvent lui être proposés : demander un captcha, dropper un paquet, bloquer l’accès à une zone du site, exiger une double authentification, ou finir sur un blocage pur et simple. Par contre, j’ai eu beau lire la documentation, il n’y a pas la possibilité de lancer une attaque de drones équipés de missiles sur la localisation de l’IP.
Une fois l’adresse IP identifiée, celle-ci est accompagnée d’un timestamp et de son scénario puis exportée vers la base de données de CrowdSec.
⚠️ Par défaut, CrowdSec ne bloque pas les IPs détectées alors si vous voulez les bloquer, il faudra vous rendre sur le hub et installer le blocker de votre choix (%(#ff0000)[Bouncers]).
On trouve des Bouncers pour WordPress, Cloudflare, Nginx ou pour des Firewalls comme iptables ou nftables.
Une fois encore, c’est vous qui déterminez les règles à appliquer en fonction des situations et des points d’entrée, et CrowdSec est ainsi capable de détecter des attaques traditionnelles comme un bruteforce ou un scan web / ports jusqu’à des attaques beaucoup plus travaillées et ciblées, impliquant par exemple l’utilisation de failles 0day, et cela sur l’ensemble des services présents sur la machine (application, DNS, mail, serveur web…etc.). Tant pis pour les petits malins ! 🙂
Vous l’aurez compris, c’est hyper granulaire comme approche et si l’adresse IP en question se révèle appartenir à des méchants pas beaux, elle est ensuite partagée avec l’ensemble de la communauté bienveillante de CrowdSec via leur base de données d’IP.
Concernant l’aspect communautaire de partage d’IP, c’est plutôt bien réfléchi puisque les IPs sont évaluées par CrowdSec d’une part et des scores de confiance sont progressivement attribués aux machines utilisant CrowdSec. Cela permet d’éviter tout empoisonnement de la base par des spammeurs et de limiter les faux positifs.
CrowdSec est développé en Go et peut s’installer sur un serveur cloud ou traditionnel, être déployé dans un conteneur ou utilisé via son API.
Les appels à la liste d’IPs communautaire se font en effet via une API, ce qui permet de l’utiliser également sur des machines avec peu de CPU/RAM comme des objets connectés. Ainsi, un objet connecté, même peu puissant pourrait profiter simplement du système de réputation d’IPs de CrowdSec sans avoir à faire de sacrifice sur les performances. De quoi faire survivre votre installation domotique et éviter de vous retrouver dans une maison qui se comporte étrangement en mode l’Exorciste.
À titre d’exemple, CrowdSec a permis d’éviter à un de ses utilisateurs, et donc par anticipation à l’ensemble de sa communauté, une attaque de botnet composée de plus de 7 000 machines zombies, en moins d’une minute, ou encore une vaste tentative d’escroquerie sur un site d’e-commerce avec des cartes bancaires volées réalisée à partir de plus de 3 000 adresses IP différentes
Concernant sa licence, CrowdSec est sous licence open source MIT depuis mai 2020. Il est donc libre d’utilisation et peut être déployé sous système Unix / Linux et bientôt sous Windows et maCOS.
La base de données communautaire reste accessible librement pour tous les utilisateurs de CrowdSec qui contribuent à celle-ci et la société se finance en proposant cette base à d’autres sociétés qui justement n’y contribuent pas et qui voudraient l’intégrer directement dans leurs workflows avec des fonctionnalités supplémentaires de pool privés pour les consensus sur les IP, de self monitoring ou encore pour de la surveillance plus large (flotte de serveurs).
Avec l’arrivée de la version 1.0 de CrowdSec, l’architecture a évolué avec l’arrivée d’un service API Local REST.
Ainsi tous les composants de CrowdSec (daemon, client et bouncers) peuvent communiquer entre eux via une API REST, plutôt que de lire/écrire directement dans la base de données.
Seul le service API Local interagit avec la base de données (SQLite, PostgreSQL ou MySQL) et cela présente plusieurs avantages notamment au niveau des bouncers qui peuvent maintenant fonctionner en parfaitement indépendance, utilisant l’API et non plus des accès directs à la base de données. Ainsi, les futurs changements dans le schéma de base de données n’auront plus d’impacts sur les bouncers.
Ce changement permet aussi de mettre en place des configurations distribuées sur plusieurs machines de manière totalement transparente. On peut imaginer une machine faisant tourner l’API locale, différents agents CrowdSec analysant les logs sur plusieurs machines et des bouncers également sur d’autres machines.
Cela apporte une bonne modularité au système CrowdSec et une certaine pérennité dans la suite du projet et des déploiements chez ses utilisateurs.
⚠️ Ce tutoriel a été effectué sous Debian11 ⚠️
On installe les dépendances :
sudo apt-get install bash gettext whiptail curl wget
On télécharge CrowdSec et on lance le script de configuration :
curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh | sudo bash
sudo apt install crowdsec
Par défaut, Crowdsec monitore les services existants qu’il repère mais on peux lancer le script de configuration interactif pour personnaliser les scénarios, collections & parsers :
/usr/share/crowdsec/wizard.sh -c
On reload Crowdsec pour prendre en compte la nouvelle configuration:
systemctl reload crowdsec
À la fin de la procédure, CrowdSec est donc en place, notamment avec le daemon « crowdsec » qui est donc capable de lire, parser, enrichir et appliquer les nouvelles règles heuristiques à votre système.
L’outil CrowdSec se compose de trois éléments principaux :
⚠️ Par défaut, CrowdSec ne bloque pas les @IPs détectées alors si vous voulez les bloquer, il faudra vous rendre sur le hub et installer le blocker de votre choix (bouncers).
https://hub.crowdsec.net/browse/#bouncers
On trouve des bouncers pour WordPress, Cloudflare, Nginx ou pour des Firewalls comme iptables ou nftables.
Je vais vous monter comment installer celui d’IP tables et de Nginx.
Soit :
https://hub.crowdsec.net/author/crowdsecurity/bouncers/cs-firewall-bouncer
On installe le firewall iptables si ce n’est pas déjà fait :
sudo apt install iptables
Puis on installe le bouncer correspondant:
sudo apt install crowdsec-firewall-bouncer-iptables
Le fichier de config se trouve ici:
nano /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml
mode: iptables
pid_dir: /var/run/
update_frequency: 10s
daemonize: true
log_mode: file
log_dir: /var/log/
log_level: info
api_url: http://localhost:8080/
api_key: a1b9e6708b87f480edabbedaff90e929
disable_ipv6: false
deny_action: DROP
deny_log: false
#to change log prefix
#deny_log_prefix: "crowdsec: "
#if present, insert rule in those chains
iptables_chains:
- INPUT
# - FORWARD
# - DOCKER-USER
⚠️
INFORMATION: L’URL de l’API est http://localhost:8080 et la clé est générée automatiquement. Si besoin pour raisons X ou Y, vous pouvez générer une clé API toute neuve, avec la commande suivante :
cscli bouncers add LE-NOM-DE-VOTRE-BOUNCER
Puis relancez le service du bouncer :
systemctl start crowdsec-firewall-bouncer
⚠️
Les logs sont présent ici:
/var/log/crowdsec-firewall-bouncer.log
On reload Crowsecd et on lance le Bouncer :
sudo systemctl reload crowdsec
sudo systemctl start crowdsec-firewall-bouncer
sudo systemctl status crowdsec-firewall-bouncer
https://hub.crowdsec.net/author/crowdsecurity/bouncers/cs-nginx-bouncer
On récupère les dépendances nécessaires et on installe le bouncer:
sudo apt install nginx lua5.1 libnginx-mod-http-lua luarocks gettext-base lua-cjson
sudo apt install crowdsec-nginx-bouncer
On reload Crowdsec puis on redémarre nginx:
systemctl restart nginx
sudo systemctl reload crowdsec
Pour interagir avec le demon Crowdsec, utilisez les commandes :
systemctl start crowdsec
systemctl stop crowdsec
systemctl restart crowdsec
systemctl status crowdsec
systemctl reload crowdsec
systemctl start crowdsec-firewall-bouncer.service
systemctl stop crowdsec-firewall-bouncer.service
systemctl restart crowdsec-firewall-bouncer.service
systemctl status crowdsec-firewall-bouncer.service
systemctl reload crowdsec-firewall-bouncer.service
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.
À 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)
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
-------------------------------------------------------------------------------------------------------------
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
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
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 |
+---------------+-----------+--------------+--------+---------+
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
root@nodebb:/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
-------------------------------------------------------------------------------------------------------------
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
$ 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
$ 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 |
+-------------------+-------+--------+----------+
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
---------------------------------------------------------------------------------------------------------------------------
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
$ 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
$ 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 |
+---------------+-----------+--------------+--------+---------+
Pour visualiser vos règles, rien de plus simple. Faites :
cscli decisions list
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.
cscli decisions add --ip 1.2.3.4 --duration 24h
cscli decisions add --ip 1.2.3.4 --duration 24h --type captcha
cscli decisions add --range 1.2.3.0/24
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
cscli decisions delete -r 1.2.3.0/24
cscli decisions delete --type captcha
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.
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
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.
⚡ %(#ff0000)[A savoir qu’il est possible de le faire pour ZSH. Plus d’informations] ICI.
La configuration se passe dans des fichiers YAML. Ainsi, il est possible d’écrire vos propres fichiers de configuration de type :
Ainsi vous pourrez faire fonctionner CrowdSec avec tous vos services et votre propre code, avec toutes leurs particularités.
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
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.