Crowdsec est un genre de fail2ban avec une liste de blocage mutualisée. Il detecte et banni les comportements malveillants.
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
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/