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