
Environnement multi-serveurs avec Crowdsec
Avec ce titre indigeste, essayons d’expliquer ce qui fait de Crowdsec une bête brune… car il sera habituel d’avoir l’agent Crowdsec sur chacune de nos machines dans l’organisation, Nous leur permettrons de communiquer entre eux pour prévenir les attaques.
C’est, que si un ordinateur Windows ou Linux est attaqué, le reste des machines de l’organisation peut être informée de l’attaque et bloquer l’adresse IP de l’attaquant avant même qu’il ne puisse frapper à sa porte. Par défaut, disons que Crowdsec fonctionne localement, chaque agent Crowdsec communique avec son propre serveur API local, ce que nous allons faire, c’est qu’ils communiquent tous avec le même serveur LAPI.
Serveur API local,
Commencé, premier, sur la machine, nous voulons agir comme un serveur API pour le reste des agents. Nous l’activons donc dans votre fichier de configuration ‘ /etc/crowdsec/config.yaml', nous indiquons l’IP par laquelle il va écouter et le port:
API: ... Serveur: ... listen_uri: 192.168.2.10:8080 ...
Dans '/etc/crowdsec/local_api_credentials.yaml’ uniquement la même adresse IP:
URL: HTTP://192.168.2.10:8080 ...
On redémarre pour appliquer les modifications:
sudo systemctl restart crowdsec
Crowdsec Agents,
Maintenant, le reste des machines avec Crowdsec doit être enregistré auprès de l’API locale du serveur, et nous désactiverons également le LAPI de chaque machine Crowdsec puisqu’il ne sera pas utilisé.
Pour le dire hors sujet, si vous n’avez pas installé Crowdsec sur la machine cible à protéger, Il est temps 😉 que vous ayez dans les articles précédents comment protéger un Windows, Linux…
Puits, Venir, va, nous nous enregistrons sur le serveur LAPI de chaque agent avec:
Sudo cscli lapi register -u HTTP://192.168.2.10:8080 INFO[14-11-2022 10:14:08 PM] Inscription réussie à l’API locale (LAPI) INFO[14-11-2022 10:14:08 PM] Local API credentials dumped to '/etc/crowdsec/local_api_credentials.yaml' WARN[14-11-2022 10:14:08 PM] Run 'sudo systemctl reload crowdsec' for the new configuration to be effective.
Nous arrêtons notre propre serveur API car nous ne l’utilisons pas:
sudo cp /lib/systemd/system/crowdsec.service /etc/systemd/system/crowdsec.service
Et nous ajoutons '-no-api’ dans le fichier de configuration Crowdsec '/etc/systemd/system/crowdsec.service’
... ExecStart=/usr/bin/crowdsec -c /etc/crowdsec/config.yaml -no-api ...
Nous rechargeons enfin les services pour utiliser cette nouvelle configuration:
sudo systemctl daemon-reload sudo systemctl restart crowdsec
Maintenant, si nous allons sur le serveur LAPI, Nous pourrons voir qu’il y a des demandes de connexion en attente avec la commande 'sudo cscli machines list':
--------------------------------------------------------------------------------------------------------- NOM ADRESSE IP DERNIÈRE MISE À JOUR ÉTAT VERSION TYPE D’AUTHENTIFICATION DERNIÈRE PULSATION --------------------------------------------------------------------------------------------------------- b91d17c64c4e4a2 192.168.x.xxx 2022-11-14T22:18:00Z ✔️ v1.4.1-debian mot de passe 19s 9c70ab3970dd4cc 192.168.x.xxx 2022-11-14T22:14:08Z 🚫 mot de passe ⚠️ 4m11s ---------------------------------------------------------------------------------------------------------
Nous validons les machines en exécutant 'sudo cscli machines validate 9c70ab3970dd4cc’
Les machines sudo cscli valident 9c70ab3970dd4cc INFO[14-11-2022 10:19:35 PM] machine '9c70ab3970dd4cc' validated successfully
Et nous vérifions à nouveau 'sudo cscli machines list':
--------------------------------------------------------------------------------------------------------- NOM ADRESSE IP DERNIÈRE MISE À JOUR ÉTAT VERSION TYPE D’AUTHENTIFICATION DERNIÈRE PULSATION --------------------------------------------------------------------------------------------------------- B91D17C64C4E4A 192.168.x.xxx 2022-11-14T22:19:00Z ✔️ v1.4.1-debian mot de passe 40s 9c70ab3970dd4cc 192.168.x.xxx 2022-11-14T22:19:35Mot de passe Z ✔️ 5s ---------------------------------------------------------------------------------------------------------
Sans oublier de recharger Crowdsec dans chaque agent une fois que nous l’aurons validé, avec:
sudo systemctl restart crowdsec
Atténuation,
Maintenant, pour atténuer, Mettre en place des actions qui nous permettent de réduire les risques de vulnérabilité à certaines menaces, Il va falloir utiliser les videurs. Premier, à partir du serveur API, nous allons créer les jetons dont les bouncers de l’agent ont besoin. Nous le ferons avec chaque videur dont nous avons besoin chez chaque agent, exemple 'sudo cscli bouncers add OS-JITSI-05-Fw’
Api key for 'OS-JITSI-05-fw': xxxxxxxxxxxxx Veuillez conserver cette clé car vous ne pourrez pas la récupérer!
Dans chaque agent Crowdsec, nous devons installer le videur dont nous avons besoin, Dans ce cas, nous nous appuierons sur des videurs de type pare-feu, pour chaque système d’exploitation, Il existe un transat compatible: Pare-feu Windows, iptables, Inconnu, ipset, Pf… Si nous avons iptables:
sudo apt install crowdsec-firewall-bouncer-iptables -y
Et nous modifions le fichier de configuration du videur de pare-feu ‘ /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml’ en indiquant l’adresse IP de notre serveur LAPI et le jeton que nous venons de générer pour celui-ci:
... api_url: HTTP://192.168.2.10:8080/ api_key: xxxxxxxxxxxx ...
Nous redémarrons le service de videur de pare-feu:
sudo SystemCTL Redémarrer CrowdSEC-Firewall-Bouncer sudo SystemCTL Status CrowdSEC-Firewall-Bouncer
Et c’est tout! Cette machine sera prête, vous pouvez ajouter des entrées au pare-feu de l’OS en refusant l’accès à certaines adresses IP qui vous sont communiquées par le serveur API.
À partir du serveur LAPI, nous pourrons vérifier l’état des videurs avec 'sudo cscli bouncers list':
----------------------------------------------------------------------------------------------------------------------- NOM ADRESSE IP VALIDE DERNIÈRE API TYPE D’EXTRACTION VERSION TYPE D’AUTHENTIFICATION ----------------------------------------------------------------------------------------------------------------------- OS-JITSI-05-192.168.x.xxx ✔️ 2023-02-02T16:40:16Z crowdsec-firewall-bouncer v0.0.24-debian api-key OS-ELK-03-192.168.x.xxx ✔️ 2023-02-02T16:40:11Z crowdsec-firewall-bouncer v0.0.24-debian api-key OS-GRA-04-192.168.x.xxx ✔️ 2023-02-02T16:40:11Z crowdsec-firewall-bouncer v0.0.24-debian api-key OS-NGINX-01-192.168.x.xxx ✔️ 2023-02-02T16:40:10Z crowdsec-firewall-bouncer v0.0.24-debian api-key OS-NGINX-01-192.168.x.xxx ✔️ miroir 2023-02-02T16:40:18Z crowdsec-blocklist-mirror v0.0.1-9-g86d6 api-key OS-OTRS-01-192.168.x.xxx ✔️ 2023-02-02T16:40:16Z crowdsec-firewall-bouncer v0.0.24-debian api-key ... ------------------------------------------------------------------------------------------------------------------------
Et c’est tout! Avec cela, le maillage est fermé! Tous nos Crowdsec de l’organisation seront contactés à l’aide d’un seul serveur API, Ainsi, tout le monde sera protégé de la même manière, partage d’une seule liste d’adresses IP noires, bloquer les adresses IP des attaquants dans leurs FW respectifs…
Câlins! Puisse-t-il se passer TRÈS bien 😉