Crowdsec – Installation & Configuration

Crowdsec est un outil de sécurité Open Source permettant d’ajouter une couche de sécurité à vos serveurs Linux en détectant les attaques réseaux et de bannir les adresses IP. Une sorte de Fail2ban, en mieux car celui-ci propose notamment une banlist participative, ainsi chaque utilisateur de crowdsec communique les IPs détectées comme malicieuses et permet aux autres utilisateurs de les bloquer préventivement par la suite.

Voici le programme de cet article :

  • Installation de Crowdsec
  • Bouncer : Explications, installation & configuration
  • Parsers, Scenarios, Collections : Explications
  • Installation du dashboard
  • Débloquer/Whitelister une IP
  • Commandes intéressantes
  • Liens complémentaires

A noter que dans cet article Crowdsec a été installé et configuré sur un serveur Ubuntu 21.04.

Crowdsec version 1.2.

Installation de Crowdsec

L’installation de Crowdsec est plutôt simple (ce qui en fait aussi une force)

  1. Il est nécessaire d’ajouter le dépôt à votre distribution afin d’installer les packages :
sudo curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh | sudo bash

2. Update de la liste des paquets :

sudo apt update

3. Installer Crowdsec :

sudo apt install crowdsec

Crowdsec vas détecter automatiquement les programmes qu’il peut prendre en compte (nginx, sshd, apache2…)

L’installation de Crowdsec est terminée mais celui-ci ne pourra pas bannir d’IPs sans bouncer.

Bouncer : Explications, installation & configuration

Crowdsec vas prendre des décisions mais il est nécessaire d’avoir un bouncer pour prendre en compte ces décisions.

Dans notre exemple nous allons utiliser le traditionnel IPTables combiné à Crowdsec, et pour cela nous allons déployer le bouncer crowdsec-firewall-bouncer qui est compatible avec IPTables (entre autre)

Celui-ci est disponible ici : https://hub.crowdsec.net/author/crowdsecurity/bouncers/cs-firewall-bouncer

Ce bouncer est installable depuis le repository que nous avons configuré pour l’installation initiale de Crowdsec.

  1. Nous pouvons donc installer le bouncer avec la commande suivante :
sudo apt install crowdsec-firewall-bouncer-iptables

Celui-ci sera configuré automatiquement.

2. Consulter les logs pour vérifier que le bouncer a bien effectué les actions nécessaires :

cat /var/log/crowdsec-firewall-bouncer.log

Le bouncer ajoute la banlist “crowdsec-blacklist” à IPtables avec pour décision de drop si une IP présente dans cette blacklist se présente en entrée.

3. Vérifier la présence d’une IP détectée par Crowdsec dans la blacklist :

sudo cscli decisions list

via la commande sudo cscli decisions list nous pouvons afficher les détection de crowdsec et la décision prise

sudo ipset list crowdsec-blacklists | grep IP

La seconde commande : sudo ipset list crowdsec-blacklists | grep IP permet de vérifier dans la blacklist “IPTables crowdsec-blacklists” la présence de l’IP.

4. Vérification de la liste des bouncers configurés :

sudo cscli bouncers list

5. Vérification dans IPTables :

sudo iptables -L
Nous visualisons bien la présence de la blacklist crowdsec dans la configuration de notre iptables en DROP.

Notre installation Crowdsec bloque maintenant les IPs malicieuses.

Parsers, Scenarios, Collections : Explications

Parsers

Le parser est un fichier de configuration en YAML qui décrit comment une log doit être interprétée

Il existe des parsers pour différents type de logs (Apache, nginx…). Il est possible de créer son propre parsers au cas où il n’existe pas de parser pour notre besoin, pour consulter la liste des parsers

cscli parsers list

Scenarios

Les scénarios sont également des fichiers YAML qui permettent de détecter un comportement spécifique, le plus souvent nous cherchons à identifier une attaque.

Exemple concret, l’utilisation d’un scénario proposé par Crowdsec pour contrer les tentatives d’attaque de la très connue vulnérabilité Log4J (https://crowdsec.net/blog/detect-block-log4j-exploitation-attempts/)

Collections

Une collection est un ensemble de parsers, scenarios, postoverflow qui forment un package pour un besoin donné (Ex : Apache2, asterisk, cpanel..)

Installation du Dashboard

Crowdsec propose un dashboard pour visualiser l’activité, celui-ci se base sur docker/metabase.

Si vous n’avez pas Docker, il est nécessaire de l’installer avant.

Déploiement de Docker en quelques commandes sur Ubuntu :

sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
sudo apt update
sudo apt-get install docker-ce docker-ce-cli containerd.io

Docker est normalement maintenant installé et nous pouvons procéder au déploiement du dashboard Crowdsec. Vous avez une erreur au déploiement du dashboard si Docker n’est pas installé de toute façon.

A noté qu’il y a des options pour le déploiement, par défaut comme vous pouvez le voir ci-dessous, le dashboard écouteras sur localhost (127.0.0.1) avec le port 3000

Flags:
-d, –dir string Shared directory with metabase container.
-f, –force Force setup : override existing files.
-h, –help help for setup
-l, –listen string Listen address of container (default “127.0.0.1”)
–password string metabase password
-p, –port string Listen port of container (default “3000”)
-y, –yes force yes

Déploiement du dashboard :

sudo cscli dashboard setup -l IP -f

Vous obtiendrez l’url, le compte et le mot de passe pour vous y connecté en fin d’installation.

Vous pouvez supprimer et déployer le dashboard comme bon vous semble, pour mon cas j’ai supprimé le dashboard pour le recréer avec une IP autre que celle localhost.

La commande suivante permet de supprimer le dashboard :

sudo cscli dashboard remove -f
Aperçu du dashboard déployé

Débloquer/Whitelister une IP

En cas de faux-positif impactant votre service, vous pouvez utiliser la commande suivante afin de retirer une décision

cscli decisions delete -i IP

Une whistlist est déjà créée par défaut que vous pouvez alimenter : /etc/crowdsec/parsers/s02-enrich/whitelists.yaml

name: crowdsecurity/whitelists
description: "Whitelist events from private ipv4 addresses"
whitelist:
  reason: "private ipv4/ipv6 ip/ranges"
  ip:
    - "127.0.0.1"
    - "::1"
  cidr:
    - "192.168.0.0/16"
    - "10.0.0.0/8"
    - "172.16.0.0/12"
  # expression:
  #   - "'foo.com' in evt.Meta.source_ip.reverse"

Il est possible de créer un fichier de white list dans /etc/crowdsec/parsers/s02-enrich

vi /etc/crowdsec/parsers/s02-enrich/mywhitelists.yaml

C’est toujours en YAML :

name: crowdsecurity/whitelists
description: "My Whitelist"
whitelist:
  reason: "my ip ranges"
  ip:
    - "IPAwhitelist"

Puis on recharge Crowdsec

sudo sytemctl reload crowdsec

Commandes intéressantes

Visualiser la liste des décisions :

sudo cscli decisions list

Lister / mettre à jour les parsers, scenarios depuis le hub Crowdsec :

sudo cscli hub list

Lister les bouncers configurés :

sudo cscli bouncers list

Visualiser les metrics :

sudo cscli metrics

Afficher les scénarios :

cscli scenarios list

Afficher la liste des parsers :

cscli parsers list

Sauvegarder la configuration (A effectuer régulièrement..) :

cscli config backup save ./folder

Restaurer la configuration :

cscli config backup restore ./folder

Liens complémentaires

Le Hub Crowdsec afin d’y trouver de nombreuses ressources (Collections, Configurations, Bouncers…) : https://hub.crowdsec.net/

La documentation officielle (qui est très bien faite!) : https://docs.crowdsec.net/

Le GitHub Crowdsec : https://github.com/crowdsecurity/crowdsec