[Sécurité] Installer Crowdsec: un genre de fail2ban avec une liste de blocage mutualisée
-
Interagir avec CrowdSec
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
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 -------------------------------------------------------------------------------------------------------------
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.
SOURCES & LIENS UTILISÉS
-
TRES intéressant, merci.
Si j’ai bien suivi ça gère l’ipV6, et c’est bien.
Je n’aime pas trop l’idée de la liste noire, car ça termine toujours en service payant et en emmerdement pour des serveurs “légitimes” (Qui n’a pas été blacklisté sur Spamhaus ou autre…).
Mais si c’est géré façon “blockchain” pourquoi pas.ça existe depuis longtemps ? C’est stable ?
-
CrowdSec a été fondé en décembre 2019.
La dernière version est la v1.1.1 release il y a 30 jours.C’est stable et beaucoup moins gourmand en ressource que Fail2ban par exemple.
C’est simple, sur mon dédié, une fois bien config, je ne m’en occupes presque plus ^^Après presque un an d’utilisation, je suis conquis
LEVÉES DE FOND
Depuis le 5 mai 2021, une nouvelle levée de fonds de 4 millions d’euros a été faite. Le tour de table a été mené par le fonds d’investissement Breega.
Il s’agit de la deuxième levée de fonds pour CrowdSec. La première, d’un montant de 1,5 million d’euros, a eu lieu en novembre 2020 et a été menée par Reflexion Capital.
Ces nouveaux fonds vont être dédiés au déploiement et à l’enrichissement de la solution de cybersécurité proposée par cette jeune pousse et à de nouveaux recrutements. L’équipe devrait s’étoffer de plusieurs dizaines de personnes d’ici 18 mois.
DES OFFRES COMMERCIALES LANCÉES EN 2021
L’outil est actuellement gratuit et est disponible dans plus de 90 pays, dont la France. Il a permis de signaler plusieurs centaines de milliers d’adresses IP comme étant dangereuses. Dans le courant de l’année 2021, la société lancera des offres commerciales. Elle est actuellement en discussion avec “de grands clients, hébergeurs, cloud makers et sociétés privées”.
-
-
très intéressant merci
-
-
Je ne connaissais pas du tout, merci pour ce tuto (et tous les autres !).
-
@violence
Merci pour les précisions.
Effectivement fail2ban laisse “parfois” à désirer (Charge serveur, plantage, etc.).
J’en ai un peu marre de d’être contraint de le surveiller en permanence… -
-
-
Hello,
Bon c’est installé sur une de mes machines, pour voir.
Content que l’IPv6 soit pris en charge.
Content que ce soit assez léger
Je trouve la liste collaborative intéressante aussi.
Bref je suis plutôt satisfait pour le moment. reste à tester un peu plus longtemps avant de déployer à plus grande échelle…Je viens de voir qu’il y a un paquet dans Bulleseye, ça termine de me convaincre…
# apt-cache policy crowdsec crowdsec: Installé : (aucun) Candidat : 1.0.9-2+b4 Table de version : 1.0.9-2+b4 500 500 http://deb.debian.org/debian bullseye/main amd64 Packages
-
Pas de problème niveau IPtables ou IP6tables avec Docker ?
-
Je n’ai pas docker installé sur cette machine.
Mais à priori non puisque le dashboard de Crowdsec est proposé par défaut dans Docker. -
-
Hello,
Merci pour l’info, vais regarder ça.
Et en plus, si c’est moins gourmand que fail2ban … -
@Violence merci pour le tuto, super bien expliqué
@ze-lol pas de souci pour la partie blacklist. On a tous vécu l’effet spamhaus en effet. Venant du hosting, on a conçu le logiciel pour éviter cela et par exemple, toute IP qui a été nettoyée est automatiquement débannie après 72h (car on ne recoit plus de signalement). On peut aussi se débannir soi même. Le soft est et restera gratuit, ce que l’on fera payer ces des fonctionnalités pour les grands comptes (gestion de group policies, de templates, fonctionnalités pour savoir si tu es sous attaque ou si tu attaques quelqu’un, forensic, etc.)on a une FAQ (https://crowdsec.net/faq/) qui répond à la plupart des questions et vous êtes les bienvenus sur notre Gitter.
-
-
Aerya Seeder Geek Gamer Torrent user GNU-Linux User Useneta répondu à Philippe le dernière édition par
Bonjour @philippe bienvenue
Merci de ton retour. Tu es bien Philippe H. ? -
-
Top, merci de passer par ici. C’est bien d’être encore accessible!
Effectivement mon inquiétude sur la liste “noire” est l’effet Spamhaus, mais le projet est porté par l’open source et la collaboration, donc je suis poussé à la confiance…
Cela fais un moment (Pas loin de 10 ans, rapport à l’IPv6…) que je m’inquiète pour trouver une alternative viable à fail2ban (Bon soft, mais en mal d’évolution) et j’ai accueillis CrowdSec avec enthousiasme!
Bravo, continuez!
-
-
-
@violence on a pas mal de choses que vous aller adorer qui arrivent.
Une console en ligne pour voir les stats de vos machines de façon consolidée.On travaille aussi sur des scénarios pour bloquer les robots de scrapping & de scalping (qui bloquent les stocks en les achetants et qui organise la pénurie pour revendre sur eBay).
De nouveaux portages pour Windows & BSD sont en route, pas mal de nouveaux scénarios et parsers sont aussi en route. Egalement un plugin pour Chrome (pour juste marquer une IP dans une page et avoir de l’info en live) et on va relâcher pas mal d’IP en plus par rapport à maintenant.
Passez sur le Gitter à l’occasion.