Sortie de CrowdSec 1.0 : tutoriel d’utilisation

21
15
déc.
2020
Sécurité

Le mois dernier, nous vous présentions CrowdSec, un logiciel de sécurité gratuit et open source déployable sur votre serveur, qui permet de détecter et bloquer les adresses IP malveillantes et de les partager avec toute la communauté d’utilisateurs.

Alors que la release de la v.1.0 est désormais disponible, et en attendant le paquet Debian qui arrivera très bientôt, nous vous invitons à découvrir les nouvelles fonctionnalités de la solution.

Sommaire

La petite nouvelle : l’API locale

L’architecture de CrowdSec 1.0 a évolué avec l’arrivée d’un service API local REST. 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 concernant les bouncers qui peuvent maintenant fonctionner en indépendance totale, 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.

Le schéma de la base de données

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 journaux sur plusieurs machines et des bouncers également sur d’autres machines.

Cela apporte une meilleure modularité au système CrowdSec et une certaine pérennité à la suite du projet et des déploiements chez ses utilisateurs.

Installer CrowdSec

Ce tutoriel est pour mettre en place CrowdSec sur votre propre serveur (virtualisé ou non), en l’occurrence ici un Ubuntu 64 bits, mais c’est également réalisable sous Debian et Red Hat.

On installe d’abord les dépendances avec la commande :

sudo apt-get installa bash gettext whiptail curl wget

Ensuite on va télécharger CrowdSec et lancer le script d’installation :

curl - https://api.github.com/repos/crowdsecurity/crowdsec

tar xvzf crowdsec-release.tgz
cd crowdsec-v*
sudo ./wizard.sh -i

Une autre option est de passer par le dépôt GitHub et récupérer la dernière version publiée du projet puis la décompresser.

L’assistant se démarre via la commande 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 jaurnaux et vous demande de sélectionner ceux dont vous ne voulez pas surveiller l’activité.

Dans ce cas, il a trouvé les journaux de Nginx, SSH et ceux du système GNU/Linux utilisé.

Services détectés
Journaux détectés

Il vous sera ensuite proposé de choisir les collections que vous souhaitez installer. Les collections sont des analyseurs et scénarios prédéfinis propres à vos outils. Ici, on sélectionne donc la collection Linux et la collection Nginx.

Sélection des collections

À la fin de la procédure, CrowdSec est donc en place, notamment avec le démon « CrowdSec » qui est donc capable de lire, analyser, enrichir et appliquer les nouvelles règles heuristiques à votre système.

L’outil CrowdSec se compose de trois éléments principaux :

  • le service CrowdSec (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 configurer, bannir des adresses IP, générer des statistiques, etc. ;
  • les bouncers, qui sont les intégrations avec d’autres outils qui permettent d’effectuer des actions comme bloquer une adresse IP chez Cloudflare ou au niveau de votre service SSH.

Utiliser CrowdSec

Lancer CrowdSec

Pour démarrer le démon CrowdSec, utilisez la commande :

systemctl start crowdsec

Interagir avec CrowdSec

Pour utiliser CrowdSec, tout se passe via cette commande :

cscli

Les commandes du client CrowdSec sont nombreuses, en voici une liste ci-dessous :

  • utilisation :
    • cscli [commande]
  • commandes disponibles :
    • alerts: Manage alerts
    • bouncers: Manage bouncers
    • capi: Manage interaction 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: Hep about any command
    • hub: Manage Hub
    • lapi: Manage interaction 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 metrics, vous pouvez afficher les métriques récoltées par l’outil.

Les métriques récoltées par Crowdsec

Cela 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 utilise une interface web Metabase qui vous permettra de visualiser l’ensemble des adresses IP analysées et les scénarios appliqués. Pour lancer cette interface, vous devrez installer Docker avec la commande :

apt install docker.io

Puis initialiser le dashboard avec la commande :

cscli dashnoard setup

Vous aurez alors en retour un point d’accès avec un port (http://IP:3000) ainsi qu’un nom d’utilisateur et un mot de passe. Connectez‑vous à l’interface Web puis entrez le nom d’utilisateur et le mot de passe.

Animation montrant l’interface Web

Bannir une adresse IP

Avec le client CrowdSec, vous pouvez avec la commande ban, ajouter ou supprimer manuellement des adresses IP à bloquer. Et la commande ban list vous permet de lister les adresses IP bloquées sur votre système.

cscli decisions list

Ajouter un bannissement manuellement pendant 24 heures :

cscli decisions add --ip 1.2.3.4 --duration 24h

Ajouter un bannissement sur une adresse IP et réclamer un CAPTCHA, un bannissement ou une limitation :

cscli decisions add --ip 1.2.3.4 --duration 24h --type

Ajouter un bannissement sur une tranche complète d’adresses IP :

cscli decisions add --range 1.2.3.0/24

Lister et retirer des règles de blocage

Lister les règles de blocage

Pour visualiser vos règles :

cscli decisions list

cscli decisions list

Retirer un blocage

Vous pouvez défaire vos blocages manuels. Si vous voulez supprimer le bannissement de l’adresse IP 1.2.3.4 :

cscli decisions delete -i 1.2.3.4

Supprimer le bannissement du sous‑réseau 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

Installation d’un bouncer

Par défaut, CrowdSec ne bloque pas les adresses IP détectées. Pour ce faire, il faudra vous rendre sur le Hub et installer le bouncer de votre choix (un bloqueur si vous préférez). On trouve des bouncers pour WordPress, Cloudflare, Nginx ou pour des pare‑feux comme Netfilter (iptables) ou nftables. Ici le test se fera sur cs-firewall-bouncer qui va nous permettre de « connecter » CrowdSec avec iptables. On l’installe avec la commande :

apt install iptables

Puis on télécharge le bouncer Firewall de CrowdSec via l’archive ici. Et pour l’installer :

tar xvzf cs-firewall-bouncer.tgz
sudo ./install.sh

Installation du bouncer

Avant de lancer le service, pensez à bien éditer le fichier de configuration suivant pour y ajouter l’URL de l’API et la clef qui lui correspond. Pensez également à bien préciser le mode choisi : iptables ou nftables.

nano/etc/crowdsec/cs-firawall-bouncer/cs-bouncer.yaml

Fichier de configuration

L’adresse de l’API est http://localhost:8080 et pour générer une clef d’API toute neuve, entrez la commande suivante :

cscli bouncers add LE-NOM-DE-VOTRE-BOUNCER

Commande cscli bouncers

Puis lancez le bouncer :

systemctl starts cs-firewall-bouncer

Et pour vérifier le statut de votre bouncer utilisez le paramètre « status » :

systemctl status cs-firewall-bouncer

systemctl status cs-firewall-bouncer

Puis, pour consulter la liste des bouncers connectés à l’API locale :

cscli bouncers list

Installer des collections, scénarios et analyseurs

Vous pouvez également visualiser les scénarios et analyseurs (parsers) en place, en installer de nouveaux, les supprimer ou les mettre à jour.

Commande :

cscli parsers|scenarios|collections|postoverflows

Collection

Pour installer une nouvelle configuration, vous pouvez le faire en ligne de commande. Par exemple, pour installer le scénario ssh-bf présent sur le Hub :

cscli scenarios install crowdsecurity/ssh-bf

Il faut ensuite relancer CrowdSec :

systemctl reload crowdsec

Vous pouvez ensuite visualiser les scénarios en place :

cscli scenarios list

cscli scenarios list

Et pour obtenir le détail d’un scénario :

cscli scenarios inspect crowdsecurity/ssh-bf

Liste des scénarios

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

Mise à jour

Pour mettre à jour l’ensemble de vos scénarios, analyseurs, collections et postoverflows via le Hub, utilisez la commande :

cscli hub update

En procédant ainsi, CrowdSec ne se contente pas de détecter les attaques en utilisant vos journaux, mais peut également déclencher une palette d’actions une fois que quelque chose est détecté, comme :

  • bloquer les adresses IP dans Cloudflare ;
  • exécuter vos propres scripts ;
  • établir un blocage dans netfilter ou iptables ;
  • refuser l’accès d’une IP à Nginx ;
  • bloquer un accès à votre WordPress ;
  • et d’autres.

Gestion des alertes

Les alertes peuvent également être listées comme ceci :

cscli alerts list

Lister les alertes

Pour obtenir plus de détails sur une alerte en particulier, il faut utiliser la commande suivante en remplaçant le X par l’identifiant de l’alerte :

cscli alerts inspect X

Et pour supprimer une alerte :

cscli alerts delete X

Pour plus de détails, se reporter à la documentation technique de CrowdSec.

Aller plus loin

  • # crowdsec derrière un parfeu

    Posté par  (site web personnel) . Évalué à 2.

    bonjour

    je suis en train de tester le logiciel (depuis la version 0.3.5) et j'ai une question sans réponse : dans le monde de l'entreprise, il y a souvent un firewall (ciso, palo, fortinet …) en frontal d'internet.
    Quels sont les ports et le IP à ouvrir pour permettre au logiciel crowdsec de dialoguer avec vos serveurs ?

  • # Les images des commandes ça ne se lit pas avec les mains, ni avec les oreilles

    Posté par  (site web personnel, Mastodon) . Évalué à 10.

    Juste une précision, qui pourra servir à d’autres.

    Quand on fait un tutoriel, il vaut mieux écrire les commandes plutôt que de faire des captures d’écran (dont certaines sont tronquées, de surcroît). De cette façon, non seulement, on peut les copier-coller, mais elles sont accessibles des personnes qui ne peuvent pas lire avec leurs yeux.

    Bonus : ça allège la page et ça demande moins de travail.

    Ici, la modération a rajouté toutes les commandes en texte et, personnellement, j’aurais aussi bien volontiers viré les images inutiles (qui n’avaient pas de titre non plus) mais bon.

    Et si on tient vraiment, vraiment à mettre des images, leur donner en titre le nom des commandes peut être une solution d’accessibilité.

    « Tak ne veut pas quʼon pense à lui, il veut quʼon pense », Terry Pratchett, Déraillé.

    • [^] # Re: Les images des commandes ça ne se lit pas avec les mains, ni avec les oreilles

      Posté par  . Évalué à 7. Dernière modification le 15 décembre 2020 à 16:50.

      Pourtant, 1226 pixels de large pour afficher 22 caractères, c’est bien le minimum pour justifier de taper ces commandes sur un écran 4K ! Accessoirement ça pète la CSS de LinuxFr sur mon écran trop petit, mais je suppose que c’est parce-que CrowdSec ne s’adresse pas à moi. Dans les vraies entreprises qui ont besoin de vraie sécurité, on ne radine pas sur les pixels !

    • [^] # Re: Les images des commandes ça ne se lit pas avec les mains, ni avec les oreilles

      Posté par  (site web personnel) . Évalué à 6.

      j’aurais aussi bien volontiers viré les images inutiles

      Je ne comprend pas du tout l'utilité pour l'auteur original de faire des images.
      Ni pourquoi la modération ne les a alors pas viré après avoir fait le texte. Parce que c'est vraiment bien inutile pour 100% des gens…

      • [^] # Re: Les images des commandes ça ne se lit pas avec les mains, ni avec les oreilles

        Posté par  (site web personnel, Mastodon) . Évalué à 5.

        C'est le genre de choses pour lesquelles il faut un consensus minimum. C'est pourquoi je ne les ai pas virées et ce d'autant plus qu'il fallait revérifier la saisie.

        Et, effectivement, je ne comprends pas du tout l'intérêt de faire des images pour les commandes, même pour un support imprimé !

        « Tak ne veut pas quʼon pense à lui, il veut quʼon pense », Terry Pratchett, Déraillé.

        • [^] # Re: Les images des commandes ça ne se lit pas avec les mains, ni avec les oreilles

          Posté par  (site web personnel) . Évalué à 1. Dernière modification le 16 décembre 2020 à 13:49.

          Désolé, nous n'avions pas réalisé que ces images seraient pénibles à charger, lire etc. Si vous souhaitez les supprimer pour le bien de tous, nous n'y voyons aucun inconvénient. Je peux vous renvoyer un document ne les comprenant pas si cela peut vous éviter de devoir revérifier la saisie.

        • [^] # Re: Les images des commandes ça ne se lit pas avec les mains, ni avec les oreilles

          Posté par  (site web personnel) . Évalué à 3.

          Et, effectivement, je ne comprends pas du tout l'intérêt de faire des images pour les commandes, même pour un support imprimé !

          un « argument » qu'un chef de projet m'avait sorti en entreprise : s'assurer que l'opérateur retape les commandes à la main o_O
          bon il y avait aussi le fait que l'écriture / fourniture au format .docx remplaçait pas mal d'espaces par des espaces insécables, ce qui faisait foirer les copier/coller (mauvais outil, changer d'outil… un script par commande avec des arguments et ça aurait été plié :/).

          tu n'as sans doute pas vu des procédures d'installation de logiciel en entreprise ;-)
          Un coup il y en avait une de 120 pages o_O Je n'ai jamais compris que ce ne soit pas scripté :/ (heureusement, il y a ansible maintenant même si chef et puppet font le taf' aussi :D).
          En plus, il nous a fallu pas mal de temps pour comprendre pourquoi l'installation réalisée par les opérateurs en Inde était foirée systématiquement, comme s'ils n'avaient rien fait : bin, en fait, le dernier paragraphe concernait la désinstallation et ils ont appliqué à chaque fois l'intégralité de la procédure /o\ (comme demandé hein… Mais bon :/). Bref 1 semaine de retard à l'installation et relivraison d'une procédure d'installation et d'une procédure de désinstallation (qui ne sert à rien, suffit de virer les VM, mais bref…).

          Sinon, même pour les sorties fournies par les commandes, lorsqu'il n'y a que du texte, il y a de quoi faire avec le formatage Markdown

          • [^] # Re: Les images des commandes ça ne se lit pas avec les mains, ni avec les oreilles

            Posté par  (site web personnel, Mastodon) . Évalué à 2.

            bon il y avait aussi le fait que l'écriture / fourniture au format .docx remplaçait pas mal d'espaces par des espaces insécables, ce qui faisait foirer les copier/coller (mauvais outil, changer d'outil…

            et surtout, mauvais utilisateur, changer d'utilisateur ou lui apprendre à utiliser correctement son fichu logiciel. Même avec Word, il est possible de configurer un style de paragraphe qui n'insère pas automatiquement des insécables. Et on peut, de toute façon, vérifier et corriger le tir.

            « Tak ne veut pas quʼon pense à lui, il veut quʼon pense », Terry Pratchett, Déraillé.

            • [^] # Re: Les images des commandes ça ne se lit pas avec les mains, ni avec les oreilles

              Posté par  (site web personnel) . Évalué à 2.

              configurer un style de paragraphe

              o_O mais qui utilise vraiment les styles sous Word (hormis pour les titres) ?

              Quand tu vois le tollé qu'il y a eu contre le styliste qui s'ouvrait par défaut sous OOo alors que c'était un réel apport :/ Bon, l'appeler par F11 c'est pas la mort non plus, mais une opération de plus à faire systématiquement (et qui sait que c'est utilisable dans LibO Impress ?).

              je n'ai malencontreusement pas les mêmes utilisateurs… avec un collègue, nous avions corrigé le modèle de dossier d'architecture :

              • pas de tableaux imbriqués cette pourriture,
              • des styles pour les tableaux et leurs cellules,
              • des styles pour les listes à puce,
              • des styles pour les légendes des images insérées afin de générer une table automatiquement,
              • fourniture d'une documentation annexe de remplissage expliquant la mise en page,
              • bref…

              Ça n'a pas manqué, 2 ans après cela avait été complètement pété par un autre intervenant :/ Notre document passait très bien sous OpenOffice.org, le suivant plus complètement :/ et bien sûr la table des illustrations était à faire à la main vu que la liste de styles proposée n'avait pas été conservée :/ Je ne parlerai pas de la conversion en PDF…

              (et je passe aussi sur les préconisations d'insérer des fichiers PNG plutôt que le source Visio / Excel à conserver par ailleurs… bah, si ça choque personne de s'envoyer des fichiers de plus de 20 Mo pour de la doc' plutôt que 4 Mo, eh bien comment dire :D)

  • # correction

    Posté par  . Évalué à 1.

    Un assistant en s/curl/ncurses/ ?

    • [^] # Re: correction

      Posté par  (site web personnel) . Évalué à 1.

      Il y a un wizard avec du ncurses pour assister l'installation. En revanche, pas d'interface en ncurses pour l'usage au quotidien.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.