Sur mon serveur Yunohost, j’ai décidé d’installer CrowdSec comme sécurité supplémentaire. L’objectif était d’abord de profiter d’une liste d’IP crowdsourcée pour protéger un peu plus le serveur, et en plus de profiter des capacités de CrowdSec en analyse d’attaque.
On m’a demandé comment l’installer, et vu que la documentation est un bazar sans nom, j’en fais cet article.
Je précise que j’installe le blocage pare-feu, mais pas le blocage WAF. Le WAF, c’est l’analyse des requêtes web (au niveau du reverse proxy, nginx sur Yunohost). Apparemment, il permet d’analyser et repérer beaucoup plus finement les attaques, notamment celles basées sur des vulnérabilités de vos applis web.
Tout d’abord, j’ai suivi les consignes sur cette page pour l’installation. Je n’ai pas utilisé le script auto, mais j’ai fait l’installation manuelle des dépôts pour Debian. On peut sauter les premières étapes, Yunohost installe déjà les outils nécessaires pour l’ajout de dépôts vu qu’il utilise des dépôts tiers.
(Je suis passé en root pour faire tout ça, sinon n’oubliez pas d’utiliser sudo)
Il faut commencer à l’ajout de la clé GPG (remplacer les actions suivantes par celle de la page de doc si elles sont plus à jour) :
curl -fsSL https://packagecloud.io/crowdsec/crowdsec/gpgkey | gpg --dearmor > /etc/apt/keyrings/crowdsec_crowdsec-archive-keyring.gpg
nano /etc/apt/sources.list.d/crowdsec_crowdsec.list
---------------------------------------------------
deb [signed-by=/etc/apt/keyrings/crowdsec_crowdsec-archive-keyring.gpg] https://packagecloud.io/crowdsec/crowdsec/any any main
deb-src [signed-by=/etc/apt/keyrings/crowdsec_crowdsec-archive-keyring.gpg] https://packagecloud.io/crowdsec/crowdsec/any any main
Ensuite, on va recharger la liste des paquets, et installer les paquets nécessaires :
apt update
apt install crowdsec crowdsec-firewall-bouncer-nftables
Je ne comprends pas pourquoi la doc propose encore iptables par défaut, alors que tout le monde est passé à nftables.
La suite se passe dans le dossier de configuration de crowdsec :
cd /etc/crowdsec
sudo -l
Je vous invite à regarder les permissions sur les fichiers. Vous verrez qu’une bonne partie est configurée pour que seul l’utilisateur root puisse lire les fichiers, et c’est important pour qu’aucun utilisateur n’ait accès à des tokens d’accès.
On va créer le fichier config.yaml.local qui permet de surcharger des valeurs de config.yaml. Il sera peut-être déjà créé avec une valeur à propos de db_config.
nano config.yaml.local
-----------------------
# Cette partie était créée à l’installation
# Optimization for sqlite, see README.Debian:
db_config:
use_wal: true
# Cette partie, je l’ai rajoutée
# Default port is already used, changing:
api:
server:
listen_uri: 127.0.0.1:8081
Ici, je change le port d’écoute du moteur d’analyse de CrowdSec. J’avais besoin de le faire parce que j’avais déjà un service qui écoutait sur ce port (je ne sais plus lequel… peut-être Prosody). Je vous conseille de le changer, pour éviter d’avoir un soucis si jamais vous installez le même service même plus tard. Pensez à changer les droits de ce fichier si besoin.
Maintenant, on va passer à l’enregistrement du service de blocage au niveau du pare-feu :
cscli bouncers add firewall
---------------------------
API key for 'firewall':
ZgmOJ3wmp8Nv2G+CEB6w1I6DZgeS6460gGuQe0VTkbw
Please keep this key since you will not be able to retrieve it!
cscli est la commande qui permet de manipuler le moteur de CrowdSec. Elle donne plein d’infos sur les commandes disponibles. Cette commande enregistre un bouncer dans le moteur de CrowdSec, et là je l’ai nommé firewall. Elle sort un token qui permet au bouncer de s’authentifier auprès du moteur. On enregistre maintenant cette information pour le bouncer :
nano bouncers/crowdsec-firewall-bouncer.yaml.local
--------------------------------------------------
api_url: http://127.0.0.1:8081/
api_key: ZgmOJ3wmp8Nv2G+CEB6w1I6DZgeS6460gGuQe0VTkbw
Comme vous pouvez le constater, on en profite également pour indiquer au bouncer que l’on a changé le port d’accès au moteur. Bien sûr, remplacer la valeur de la clé par celle que la commande vous a sortie. On peut maintenant relancer :
systemctl restart crowdsec
systemctl restart crowdsec-firewall-bouncer
# Si tout se passe bien :
systemctl enable crowdsec-firewall-bouncer
Je vous conseille de réaliser les tests de la documentation pour vérifier que tout fonctionne.
Maintenant, on va ajouter deux whitelist :
cscli allowlists create utilisateurs -d 'IP résidentielles des utilisateurs'
cscli allowlists create yunohost -d 'IP de YunoHost'
Elles ne sont pas obligatoires, je vous les recommande juste. La deuxième, notamment, me permet d’éviter que les IP de YunoHost ne soient bannies pendant le diagnostic (ce qui casse le diagnostic). Vous pouvez donner les noms que vous souhaitez à la place de utilisateurs et yunohost, ainsi que le commentaire dans l’option -d.
Ensuite, on ajoute les IP :
cscli allowlists add yunohost 80.67.164.12
cscli allowlists add yunohost 2001:910:1400:115::12
cscli allowlists add utilisateurs votre IP -d 'IP de machin'
Et voilà !
Maintenant, si vous le souhaitez, vous pouvez connecter votre CrowdSec à la Console CrowdSec. Cela permet de gérer certaines fonctionnalités depuis le web ou de recevoir un petit récap mail chaque semaine. La fonction la plus intéressante, c’est rajouter des blocklists d’IP.
Il y a plein de fonctions premium, aussi, dont je ne peux pas vous parler, comme je reste sur du gratuit.
Dernière chose, CrowdSec configure automatique la lecture d’un certain nombre de logs. Si vous voulez vérifier qu’il en a configuré le plus possible automatiquement, vous pouvez lancer cette commande :
cscli setup
Laisser un commentaire