Maintenant que notre serveur CS Local API est monté et son API sécurisée, nous allons connecter un agent (qui permettra de remonter les alertes et les décisions).
Serveur Crowdsec Local API :
Serveur Nginx :
Étant donné que le certificat du serveur est autosigné avec notre PKI, il faut ajouter le certificat d'autorité dans notre magasin.
# Depuis le serveur CS LAPI :
scp /root/pki/CA/ca.crt root@192.168.1.203:/usr/local/share/ca-certificates/
# Sur le serveur Nginx :
update-ca-certificates
apt install -y gnupg lsb-release apt-transport-https curl
curl -L https://packagecloud.io/crowdsec/crowdsec/gpgkey | apt-key add -
echo "deb https://packagecloud.io/crowdsec/crowdsec/debian/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/crowdsec.list > /dev/null
apt update
apt-get install crowdsec
systemctl enable crowdsec
Nous allons contacté le serveur CS Local API à partir de son FQDN. Il faut pour cela déclaré ce dernier dans le fichier /etc/hosts du serveur Nginx :
vim /etc/hosts :
127.0.0.1 localhost
127.0.1.1 srv-nginx-01.lab.lan srv-nginx-01
192.168.1.202 srv-cs-lapi.lab.lan
Testez la connectivité réseau et la résolution : ping srv-cs-lapi.lab.lan
Nous allons maintenant utiliser la commande cscli
pour enregistrer notre serveur Nginx auprès de note serveur CS LAPI. Sur le serveur Nginx :
cscli lapi register -u https://srv-cs-lapi.lab.lan:8080
# Sortie :
INFO[08-07-2021 05:08:33 PM] Successfully registered to Local API (LAPI)
INFO[08-07-2021 05:08:33 PM] Local API credentials dumped to '/etc/crowdsec/local_api_credentials.yaml'
WARN[08-07-2021 05:08:33 PM] Run 'sudo systemctl reload crowdsec' for the new configuration to be effecti
Ne relancez pas de suite le service.
Notre serveur Nginx faisant tourner un agent CS, nous n'avons pas besoin de l'API locale, puisqu'il se connectera à celle de notre CS Local API. Sur le serveur Nginx :
vim /lib/systemd/system/crowdsec.service :
# Remplacer la ligne
ExecStart=/usr/bin/crowdsec -c /etc/crowdsec/config.yaml
# par la ligne suivante :
ExecStart=/usr/bin/crowdsec -c /etc/crowdsec/config.yaml -no-api
Exécutez la commande suivante pour prendre en compte le changement :
systemctl daemon-reload
Ne redémarrez pas de suite le service.
Sur le serveur CS LAPI, validez la machine :
root@srv-cs-lapi:~# cscli machines list
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
NAME IP ADDRESS LAST UPDATE STATUS VERSION
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
4f02c64d68fc456c8846281b0418c580bRfsqacxgzv9adtp 127.0.0.1 2021-07-08T15:11:47+02:00 ✔️ v1.1.0-debian-prag...
530ec09a5c4544abaf9425d2fc657f32lfjaejYSbi45K3cO 192.168.1.203 2021-07-08T17:08:33+02:00 🚫
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
root@srv-cs-lapi:~# cscli machines validate 530ec09a5c4544abaf9425d2fc657f32lfjaejYSbi45K3cO
INFO[08-07-2021 05:09:18 PM] machine '530ec09a5c4544abaf9425d2fc657f32lfjaejYSbi45K3cO' validated successfuly
root@srv-cs-lapi:~# cscli machines list
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
NAME IP ADDRESS LAST UPDATE STATUS VERSION
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
4f02c64d68fc456c8846281b0418c580bRfsqacxgzv9adtp 127.0.0.1 2021-07-08T15:11:47+02:00 ✔️ v1.1.0-debian-prag...
530ec09a5c4544abaf9425d2fc657f32lfjaejYSbi45K3cO 192.168.1.203 2021-07-08T17:08:33+02:00 ✔️
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Sur le serveur Nginx, relancez Crowdsec : systemctl restart crowdsec.service
Sur le serveur CS LAPI :
root@srv-cs-lapi:~# cscli machines list
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
NAME IP ADDRESS LAST UPDATE STATUS VERSION
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
4f02c64d68fc456c8846281b0418c580bRfsqacxgzv9adtp 127.0.0.1 2021-07-08T15:11:47+02:00 ✔️ v1.1.0-debian-prag...
530ec09a5c4544abaf9425d2fc657f32lfjaejYSbi45K3cO 192.168.1.203 2021-07-08T17:10:03+02:00 ✔️ v1.1.0-debian-prag...
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Sur le serveur CS LAPI, lancez la commande suivante : tail -f /var/log/crowdsec_api.log
Sur le serveur Nginx, lancez la commande :
root@srv-nginx-01:~# cscli decisions list
# Sortie sur le serveur CS LAPI :
time="08-07-2021 17:30:24" level=info msg="192.168.1.203 - [Thu, 08 Jul 2021 17:30:24 CEST] \"POST /v1/watchers/login HTTP/2.0 200 80.893563ms \"crowdsec/v1.1.0-debian-pragmatic-linux-e55e177baf2af6266fcdf795935ab36baa9a8aa8\" \""
time="08-07-2021 17:30:24" level=info msg="192.168.1.203 - [Thu, 08 Jul 2021 17:30:24 CEST] \"GET /v1/alerts?has_active_decision=true&include_capi=false HTTP/2.0 200 767.496µs \"crowdsec/v1.1.0-debian-pragmatic-linux-e55e177baf2af6266fcdf795935ab36baa9a8aa8\" \""
root@srv-nginx-01:~# cscli alerts list
# Sortie sur le serveur CS LAPI :
time="08-07-2021 17:30:45" level=info msg="192.168.1.203 - [Thu, 08 Jul 2021 17:30:45 CEST] \"POST /v1/watchers/login HTTP/2.0 200 79.581551ms \"crowdsec/v1.1.0-debian-pragmatic-linux-e55e177baf2af6266fcdf795935ab36baa9a8aa8\" \""
time="08-07-2021 17:30:45" level=info msg="192.168.1.203 - [Thu, 08 Jul 2021 17:30:45 CEST] \"GET /v1/alerts?limit=50 HTTP/2.0 200 16.958517ms \"crowdsec/v1.1.0-debian-pragmatic-linux-e55e177baf2af6266fcdf795935ab36baa9a8aa8\" \"
Lors de l'installation de Crowdsec, celui détecte les services installés et déploie localement les collections appropriées. Pour rappel, une collection est un ensemble de scénarios et de parsers.
Vous pouvez ajouter d'autres collections. Par exemple pour ne pas bloquer les robots d'indexation entre autres, on peut installer la collection crowdsecurity/whitelist-good-actors
. Pour cela, deux possibilités :
/usr/share/crowdsec/wizard.sh -c
qui vous permettra de choisir parmi les collections proposées.cscli collections install crowdsecurity/whitelist-good-actors
récupérée depuis https://hub.crowdsec.net/browse/#collectionsNotre serveur Nginx se connectant au serveur CS LAPI, il est temps de voir ce qui nous intéresse, à savoir le blocage des attaques. En effet, à ce stade actuel, notre serveur Nginx peut détecter des attaques mais pas les bloquer. Nous aborderons donc dans le prochain article les bouncers.