Debian 11 64 Bits - Mise en place de Crowdsec

Sécurisation d'un serveur avec Crowdsec

Auteur : Vince NADUS
Date de publication : July 19, 2021
serveurs debian postgres crowdsec securité

Crowdsec est un genre de fail2ban avec une liste de blocage mutualisée. Il detecte 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)

Nous allons générer 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/