[Sécurité] Installer Crowdsec: un genre de fail2ban avec une liste de blocage mutualisée
-
Le tutoriel d’installation est disponible sur le wiki en suivant le lien ci-dessous :
https://wiki.planete-warez.net/fr/informatique/sécurité/crowdsec
C’est quoi Crowdsec ?
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.
Alors comment ça fonctionne ?
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 (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).
L’arrivée de l’API Local
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.
Installation
️ Ce tutoriel a été effectué sous Debian10 ️
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 :
- Le service CrowdSec, qui est le service persistant (daemon) qui effectue toute la surveillance des journaux, suit les attaques, etc.
- L’outil de ligne de commande, qui est l’interface CLI permettant d’interagir avec le service pour régler la configuration, bannir des IPs, obtenir des stats…etc
- Et les bouncers, qui sont les intégrations avec d’autres outils qui permettent d’effectuer des actions comme bloquer une IP chez Cloudflare ou au niveau de votre service SSH.
Mise en place des bouncers
️ 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 :- cs-firewall-bouncer qui va me permettre de « connecter » CrowdSec avec iptable
- cs-nginx-bouncer qui va interagir avec nginx. Les adresses IP nouvelles/inconnues sont vérifiées par rapport à l’API crowdsec, et si la demande doit être bloquée, une 403 est renvoyée à l’utilisateur et mise en cache.
crowdsec-firewall-bouncer (iptables)
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
- mode: cpeut être iptables, nftables , ipset ou pf
- update_frequency: contrôle la fréquence à laquelle le bouncer va interroger l’API locale
- api_url & api_key: contrôler les paramètres de l’API locale.
- iptables_chains: Permet (en mode iptables) de contrôler dans quelle chaîne les règles vont être insérées. (s’il est vide, le videur ne conservera que les listes d’ipset)
- disable_ipv6: Définir sur true pour désactiver ipv6
- deny_action: Définir quelle action utiliser pour refuser, DROP ou REJECT
- deny_log: Définir sur true pour ajouter une instruction de journal à la règle de pare-feu
- deny_log_prefix: si la journalisation est activée, permet de définir le préfixe du journal, par défaut "crowdsec
️
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
cs-nginx-bouncer (nginx)
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
Lancer CrowdSec et le bouncer firewall cs-firewall-bouncer
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
-
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!
-
-