Debian 11 64 Bits - Mise en place de Crowdsec

Sécurisé ses services

Auteur : Vince Nadus
Date de publication : 19 juillet 2021
linux réseau debian firewall crowdsec sécurité

Crowdsec est un genre de fail2ban avec une liste de blocage mutualisée. Il détecte et banni les comportements malveillants.


Le mieux est de disposer d'un réseau privé afin que les échanges Crowdsec entre le serveur (agent Crowdsec) et les clients (bouncers) soit privé.

Installation Crowdsec sur le serveur maitre (serveur1) pour gestion centralisé et sur tous les postes (serveurs) utilisant Crwdsec

Pré-requis

apt-get install curl lsb-release

Dans le cas d'une utilisation de postgreSQL, mais dans notre cas nous utiliserons SQLite pour bénéficier dans un premier temps du dashboard Docker fournit par Crowdsec

Installation de prostgresql

apt install postgresql

Configuration de PostgreSQL

su postgres
postgres=# CREATE DATABASE crowdsec;
CREATE DATABASE
postgres=# CREATE USER crowdsecuser WITH PASSWORD 'crowdsecpass';
CREATE ROLE
postgres=# GRANT ALL PRIVILEGES ON DATABASE crowdsec TO crowdsecuser;
GRANT

Mise en place d'une serveur Crowdsec

curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh | bash
apt-get install crowdsec

Vous pouvez lancer l'assistant de configuration afin d'ajouter des bouncers

/usr/share/crowdsec/wizard.sh -c

Dans le cas d'une utilisation de PSQL il vous faudra modifier ces fichers

/etc/crowdsec/config.yaml

common:
 daemonize: true
 pid_dir: /var/run/
 log_media: file
 log_level: info
 log_dir: /var/log/
 working_dir: .
config_paths:
 config_dir: /etc/crowdsec/
 data_dir: /var/lib/crowdsec/data/
 simulation_path: /etc/crowdsec/simulation.yaml
 hub_dir: /var/lib/crowdsec/hub/
 index_path: /var/lib/crowdsec/hub/.index.json
crowdsec_service:
 acquisition_path: /etc/crowdsec/acquis.yaml
 parser_routines: 1
cscli:
 output: human
 hub_branch: v1.0.9
db_config:
 log_level: info
 type: sqlite
 db_path: /var/lib/crowdsec/data/crowdsec.db

 flush:
 max_items: 5000
 max_age: 7d
api:
 client:
 insecure_skip_verify: false
 credentials_path: /etc/crowdsec/local_api_credentials.yaml
 server:
 log_level: info
 listen_uri: mon_ip:8080
 profiles_path: /etc/crowdsec/profiles.yaml
 online_client: # Crowdsec API credentials (to push signals and receive bad IPs)
 credentials_path: /etc/crowdsec/online_api_credentials.yaml

prometheus:
 enabled: true
 level: full
 listen_addr: 127.0.0.1
 listen_port: 6060

/etc/crowdsec/local_api_credentials.yaml

url: http://mon_ip:8080
login: XXXXXXXXXXXXXXXXXXXXXX
password: XXXXXXXXXXXXXXXXXXXXXXXX

Réenregistrer le serveur avec le bon port et IP d'écoute

cscli machines add -a
systemctl restart crowdsec
cscli machines list
cscli machines validate ID

Il n'y aura pas de blocage (ban) tant que les bouncers ne seront pas installé.

Installation de crowdsec sur les serveurs distants

curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh | bash

ou

curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.rpm.sh | bash

Enregistrer le serveur distant sur le serveur central Crowdsec

cscli lapi register -u http://IP_serveur1:8080

Désactivé le serveur LAPI sur les serveurs distant

cp /lib/systemd/system/crowdsec.service /etc/systemd/system/crowdsec.service

Maintenant, éditez /etc/systemd/system/crowdsec.service et ajoutez le paramètre -no-api à l’invocation de l’agent CrowdSec sur le serveur-2 et le serveur-3.

[Unit]
 Description=Crowdsec agent
 After=syslog.target network.target remote-fs.target nss-lookup.target

 [Service]
 Type=notify
 Environment=LC_ALL=C LANG=C
 PIDFile=/var/run/crowdsec.pid
 ExecStartPre=/usr/bin/crowdsec -c /etc/crowdsec/config.yaml -t
 ExecStart=/usr/bin/crowdsec -c /etc/crowdsec/config.yaml -no-api
 #ExecStartPost=/bin/sleep 0.1
 ExecReload=/bin/kill -HUP $MAINPID

 [Install]
 WantedBy=multi-user.target

Redémarrer le service sur les serveurs distants

systemctl daemon-reload
systemctl restart crowdsec

Visualiser les nouveaux agents sur le serveur central

root@crowdsec-server:~# cscli machines list
------------------------------------------------------------------------------------------------------------------
 NAME IP ADDRESS LAST UPDATE STATUS VERSION
------------------------------------------------------------------------------------------------------------------
 dc5ac88f5d2245e1a7d07733c6bb67c2 127.0.0.1 2021-08-24T04:34:18Z ✔️ 1.0.9-2+b4-debian
 dc5ac88f5d2245e1a7d07733c6bb67c29cP04LJUsA8V6lU3 10.168.50.40 2021-08-25T02:54:54Z ✔️ 1.0.9-2+b4-debian
 57bbab94f7c74dcea90572dd4b6fd3c1UOXTzExMqUJYCiFd 10.168.50.151 2021-08-25T03:13:25Z 🚫

Les autoriser sur le serveur central

root@crowdsec-server:~# cscli machines validate 57bbab94f7c74dcea90572dd4b6fd3c1UOXTzExMqUJYCiFd
INFO[25-08-2021 03:16:38 AM] machine '57bbab94f7c74dcea90572dd4b6fd3c1UOXTzExMqUJYCiFd' validated successfuly

A partir de là Crowdsec est installé sur le serveur de centralisation et les autres serveurs (remontanbt les informations) Mise en place d'un client crowdsec (bouncers)

Génération des jetons pour les machines clientes sur le serveur central

root@crowdsec-server:~# cscli bouncers add mx1.owf.wf
Api key for 'mx1.owf.wf':

 40bc1428caf350ff0a42d3fa645cdf06

Please keep this key since you will not be able to retrive it!

Installation du bouncer sur le client

Pour Debian / Ubuntu

curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh | bash
apt install crowdsec-firewall-bouncer crowdsec-firewall-bouncer-iptables

Pour RHEL / Fedora

yum install crowdsec-firewall-bouncer-nftables

nano /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml

api_url: http://10.168.50.40:8080
api_key: 40bc1428caf350ff0a42d3fa645cdf06systemctl restart crowdsec-firewall-bouncer.service

Mis en place du dashboard (uniquement avec une base de donnée SQLite)

https://doc.crowdsec.net/Crowdsec/v1/cscli/cscli_dashboard_setup/

cscli dashboard setup --debug

 URL : 'http://127.0.0.1:3000'
 username : 'crowdsec@crowdsec.net'
 password : 'pass2021'

Commande utile sur le serveur

cscli metric : info sur le nombre d'attaque

cscli decisions : permet de définir des decisions (ban, etc ....)

Commande utile sur le bouncer

Sources utiles :

https://linuxfr.org/news/sortie-de-crowdsec-1-1-x-quelles-sont-les-nouveautes

https://linuxfr.org/news/comment-configurer-une-installation-crowdsec-multiserveur

https://doc.crowdsec.net/Crowdsec/v1/getting_started/installation/