CrowdSec sort sa v.1.0 : Guide d'installation

par Korben -

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.

![](https://korben.info/app/uploads/2020/11/korben20200417144706-14-1024x687.jpg)
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.

On va d'abord installer les dépendances :
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.

![](https://korben.info/app/uploads/2020/11/korben20200417144706-25-1-1024x594.jpg)
![](https://korben.info/app/uploads/2020/11/korben20200417144706-27-1-1024x601.jpg)
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.
![](https://korben.info/app/uploads/2020/11/korben20200417144706-28-1024x464.jpg)
À 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
![](https://korben.info/app/uploads/2020/11/korben20200417144706-10-1024x776.jpg)
Cela vous affichera un tableau contenant de nombreuses informations comme le nombre d'attaques dans les différentes collections (modules)
  • 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à !

![](https://korben.info/app/uploads/2020/11/cscli-metabase-1.gif)
### 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.

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
![](https://korben.info/app/uploads/2020/11/korben20200417144706-11-1024x114.jpg)
### 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

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

Image par défaut pour l'article

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

Image par défaut pour l'article

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
![](https://korben.info/app/uploads/2020/11/korben20200417144706-27-1024x154.png)
Puis lancez le service du 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
![](https://korben.info/app/uploads/2020/11/korben20200417144706-30-1024x260.png)
Ensuite pour consulter la liste des bouncers connectés à l'API local, faites :
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   
![](https://korben.info/app/uploads/2020/11/korben20200417144706-34.jpg)
Pour installer une nouvelle configuration, vous pouvez le faire en ligne de commande. Par exemple, si je veux installer le scénario ssh-bf **[présent sur le hub](https://hub.crowdsec.net/) :**
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
![](https://korben.info/app/uploads/2020/11/korben20200417144706-33-1-1024x248.jpg)
Et pour obtenir le détail d'un scénario en particulier :
cscli scenarios inspect crowdsecurity/ssh-bf
![](https://korben.info/app/uploads/2020/11/korben20200417144706-20-1024x923.jpg)
Pour mettre à jour un scénario :
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

Image par défaut pour l'article

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é ?
Contenu partenaire
Logo de l'école de Cybersécurité Guardia
Tracking Matomo Guardia

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).

Cliquez ici pour en savoir plus