CrowdSec sort sa v.1.0 : Guide d'installation
en partenariat avec Crowdsec
Il y a quelques semaines, je vous présentais CrowdSec, un service à déployer sur votre serveur qui permet de détecter et bloquer les adresses IP dangereuses en les mutualisant entre tous les utilisateurs de CrowdSec.
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 que la release de la v.1.0 vient tout juste d’arriver, et en attendant le package Debian très prochainement, je vous invite ici à comprendre comment l’outil fonctionne ainsi que ses nouvelles fonctionnalités
L’arrivée de l’API Local
Avec l’arrivée de la v 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. Vous pouvez télécharger cette version ici.
Installation de CrowdSec
Aujourd’hui, je propose un tuto pour mettre en place CrowdSec sur votre propre serveur (virtualisé ou non). Je ferai ça sous mon serveur Ubuntu 64bits, mais c’est jouable aussi sous Debian et RedHat.
sudo apt-get install bash gettext whiptail curl wget
Puis on va télécharger CrowdSec et lancer le script d’installation :
curl -s https://api.github.com/repos/crowdsecurity/crowdsec/releases/latest | grep browser_download_url| cut -d '"' -f 4 | wget -i -
Puis
tar xvzf crowdsec-release.tgz
cd crowdsec-v*
sudo ./wizard.sh -i
Vous pouvez également si vous le souhaitez passer directement par le dépôt Git et récupérer la dernière release du projet puis la décompresser.
Et lancez l’assistant comme ceci :
sudo ./wizard.sh -i
Un assistant en curl va alors débuter. Il détecte les services en cours qui génèrent des logs et vous demande de sélectionner ceux dont vous ne voulez pas surveiller les logs.
Pour ma part, il a trouvé les logs Nginx, SSH et ceux du système Linux que j’utilise.
Crowdsec vous proposera ensuite de choisir les [collections](https://hub.crowdsec.net/browse/#collections) que vous voulez installer. Les collections, c'est un groupe de parseurs et de scénarios pré-définis propres à vos outils. Je sélectionne donc la collection Linux et la collection Nginx.À 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.
Lancer CrowdSec
Pour démarrer le démon CrowdSec, utilisez la commande :
systemctl start crowdsec
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.
Usage:
cscli [command]
Available Commands:
alerts Manage alerts
bouncers Manage bouncers
capi Manage interraction with Central API (CAPI)
collections Manage collections from hub
config Allows to view current config
dashboard Manage your metabase dashboard container
decisions Manage decisions
help Help about any command
hub Manage Hub
lapi Manage interraction with Local API (LAPI)
machines Manage local API machines
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
Observer l’activité
À l’aide de la commande cscli, vous pouvez afficher les métriques récoltées par l’outil.
cscli metrics
- http-backdoors-attempts
- http-bad-user-agent
- http-crawl-non_statics
- http-path-traversal-probing
- http-probing
- http-sensitive-files
- http-xss-probing
- ssh-bf
- ssh-bf-user-enum
Activer l’interface web
Crowdsec propose une interface web Metabase qui vous permettra de visualiser l’ensemble des IPs analysées et les scénarios appliqués. Pour lancer cette interface, vous devrez installer Docker comme ceci :
apt install docker.io
Puis initialiser le dashboard avec la commande :
cscli dashboard setup
Vous aurez alors en retour un point d’accès avec un port (http://IP:3000) ainsi qu’un login et un mot de passe. Connectez-vous à l’interface web, entrez le login et le mot de passe et voilà !
### Bannir une IPAvec 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 list
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
Lister les régles de blocage
Pour visualiser vos règles, rien de plus simple. Faites :
cscli decisions list
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
Mise en place d’un bouncer
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.
Mon choix s’est porté donc porté sur cs-firewall-bouncer qui va me permettre de “connecter” CrowdSec avec iptables. Je vais donc l’installer comme ceci :
apt install iptables
Puis je vais donc télécharger le Bouncer Firewall de CrowdSec. Pour cela je récupère l’archive ici. Et pour l’installer :
tar xzvf cs-firewall-bouncer.tgz
sudo ./install.sh
Avant de lancer le service, pensez bien à éditer le fichier de configuration suivant pour y ajouter l’URL de l’API et la clé qui lui correspond. Pensez également à bien préciser le mode choisi : iptables ou nftables.
nano /etc/crowdsec/cs-firewall-bouncer/cs-firewall-bouncer.yaml
L’URL de l’API est http://localhost:8080 et pour générer une clé API toute neuve, entrez la commande suivante :
cscli bouncers add LE-NOM-DE-VOTRE-BOUNCER
systemctl start cs-firewall-bouncer
Et pour vérifier la status de votre bouncer utilisez le paramètre “status” comme ceci :
systemctl status cs-firewall-bouncer
cscli bouncers list
Installer des scénarios, des parseurs, des collections…etc
Vous pouvez également visualiser les scénarios / parseurs en place, en installer de nouveaux, les supprimer ou les mettre à jour.
cscli parsers|scenarios|collections|postoverflows
cscli scenarios install crowdsecurity/ssh-bf
N’oubliez pas de relancer CrowdSec :
systemctl reload crowdsec
Vous pouvez ensuite visualiser les scénarii en place :
cscli scenarios list
cscli scenarios inspect crowdsecurity/ssh-bf
cscli scenarios upgrade crowdsecurity/ssh-bf
Enfin, pour supprimer un scénario :
cscli scenarios remove crowdsecurity/ssh-bf
N’oubliez pas de relancer CrowdSec :
systemctl reload crowdsec
Comment tout mettre à jour ?
Pour mettre à jour l’ensemble de vos scénarios, parseurs, collections et postoverflows via le hub, utilisez la commande :
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 :
cscli alerts list
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
Pour plus de détails, je vous invite à consulter la documentation technique de CrowdSec.
La configuration
Comme je vous le disais, 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
Et pour restaurer la config :
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 ici pour plus de détails.
Que faire après le bac quand on est passionné de cybersécurité ?
Entièrement dédiée à la cybersécurité, l'école Guardia est accessible soit directement après le bac (post-bac), soit après un bac+2 ou bac+3. En rejoignant l'école Guardia, vous deviendrez développeur informatique option cybersécurité (Bac+3) ou expert en cybersécurité (Bac+5).