Automatiser l'installation et la configuration de CrowdSec avec Ansible

Pour fêter notre intégration en tant que partenaire CrowdSec nous avons décidé de vous montrer comment automatiser l'installation et la configuration de CrowdSec à l'aide d'Ansible.

Prérequis

Pour cette démonstration nous aurons besoin :

  • d'au moins une machine sous Debian
  • d'un compte sur la console de CrowdSec : https://app.crowdsec.net/login afin de gérer CrowdSec depuis celle-ci.
  • d'Ansible sur votre poste

Création des fichiers de base pour Ansible

Avant toutes choses vous devez préparer votre arborescence de base à votre projet. Ici ce sera l'arborescence suivante :

project
│   ansible.cfg
│   deploy.yml
│   hosts
└───group_vars
│   │   all.yml
└───roles
    └───sys-crowdsec
        │   README.md
        └───defaults
        │   │   main.yml
        └───handlers
        │   │   main.yml
        └───tasks
        │   │   main.yml
        └───templates
        │   │   crowdsec_-crowdsec.j2
        │   │   whitelists.j2
        └───tests
        │   │   iventory
        │   │   test.yml
        └───vars
            │   main.yml

Fonctionnement du rôle sys-crowdsec

Pour expliquer brièvement, le rôle fonctionne ainsi :

  1. Il vérifie et met à jour les paquets dont nous allons avoir besoin.
  2. Il installe l'agent CrowdSec et sa local API.
  3. Il installe les bouncers que nous avons sélectionnés.
  4. Il installes les collections que nous avons sélectionnés.
  5. Il démarre les services de CrowdSec.

Et le tour est joué !

CrowdSec est installé et configuré.

Exemples de tâches

Voici la tâche qui permet de mettre à jour et d'installer CrowdSec :

- name: Crowdsec Apt update and install Crowdsec
  ansible.builtin.package:
    update_cache: true
    name: crowdsec
    state: present

Voici la tâche qui permet d'installer les collections (scénarios, parsers...) :

- name: Crowdsec install collections
  ansible.builtin.command:
    cmd: "cscli collections install {{ item }}"
  loop: "{{ collections_list }}"
  register: collections_install_result
  changed_when: "'overwrite' not in collections_install_result.stderr"
  when: collections_list | length > 0
  notify: Restart crowdsec

La variable {{ collections_list }} est assez parlante, elle contient la liste des collections que nous désirons installer. Vous pouvez trouvez la liste des collections disponibles ici : https://hub.crowdsec.net/browse/#collections

Ajout du serveur à la console

Lorsque vous aurez créer un compte sur la console CrowdSec vous devriez avoir le choix d'ajouter une instance à l'aide de cette comannde :

Nous avons créer une tâche pour automatiser ce processus via le playbook comme vous pouvez le voir ci-dessous :

- name: Crowdsec enroll console
  ansible.builtin.shell: |
    cscli console enroll {{ crowdsec_web_console_id }}
  changed_when: false

la variable {{ crowdsec_web_console_id }} contient le code de votre console.

Exécution du playbook

Pour ce faire il suffit d'utiliser la commande :

ansible-playbook deploy.yml

Vous devriez avoir un récaptilatif à la fin de l'exécution du playbook :

Enfin il ne faut pas oublier d'accepter l'ajout du serveur à la console :

Résultats

Vous pouvez ensuite consulter sur la console les informations concernant votre instance CrowdSec (Agent, bouncers, alertes...) :

Vous pouvez aussi consulter la liste des alertes :

D'ailleurs à peine nous avons installé CrowdSec et nous avons déjà quelques résultats !