Crowdsec : Ajout d'une machine

Crowdsec Cybersécurité Open source

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 :

  • OS : Debian 10
  • RAM : 2048
  • IP : 192.168.1.202/255.255.255.0
  • Nom d'hôte : srv-cs-lapi
  • Domaine de portée locale : lab.lan
  • FQDN : srv-cs-lapi.lab.lan

Serveur Nginx :

  • OS : Debian 10
  • RAM : 2048
  • IP : 192.168.1.203/255.255.255.0
  • Nom d'hôte : srv-nginx-01
  • Domaine de portée locale : lab.lan
  • FQDN : srv-nginx-01.lab.lan
  • Service installé : nginx

maquette02

É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. Liste des collections, des parsers et des scénarios

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 :

  1. Passer par la commande /usr/share/crowdsec/wizard.sh -c qui vous permettra de choisir parmi les collections proposées.
  2. Passer directement par la commande cscli collections install crowdsecurity/whitelist-good-actors récupérée depuis https://hub.crowdsec.net/browse/#collections

Notre 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.

Article précédent Article suivant