Ambiente multi-server con Crowdsec

Con questo titolo indigeribile, proviamo a spiegare cosa rende Crowdsec una bestia marrone… come sarà consuetudine avere l'agente Crowdsec su ciascuna delle nostre macchine nell'organizzazione, Faremo in modo che siano in grado di comunicare tra loro per prevenire attacchi.

Questo è, que se un team con Windows o Linux sea atacado, el resto de máquinas de la organización pueda enterarse del ataque y bloquear la dirección IP del atacante antes de que siquiera pueda tocar la puerta. Por defecto, digamos que Crowdsec funciona de manera local, cada agente de Crowdsec se comunica con su propio servidor local de APIs, lo que haremos será que todos se comuniquen con el mismo servidor LAPI.

Servidor Local API,

Avviato, primo, en la máquina que queremos que actúe como servidor API para el resto de agentes. Así que lo habilitamos en su archivo de configuración ‘ /etc/crowdsec/config.yaml, indicamos la IP por la que escuchará y el puerto:

API:
...
  Server:
...
    listen_uri: 192.168.2.10:8080
...

En '/etc/crowdsec/local_api_credentials.yaml'’ únicamente la misma dirección IP:

URL: Protocollo HTTP://192.168.2.10:8080
...

Reiniciamos para aplicar los cambios:

sudo systemctl restart crowdsec

Agentes de Crowdsec,

Ora, el resto de máquinas con Crowdsec deberemos registrarlas contra el Local API del servidor, y además deshabilitaremos el LAPI de cada máquina Crowdsec ya que no se usará.

Por ponerlo de offtopic, si no tienes instalado Crowdsec en la máquina destino a proteger, es el momento 😉 Tienes en posts anteriores cómo proteger un Windows, Linux…

Bene, Venire, Va, nos registramos contra el LAPI server desde cada agente con:

sudo cscli lapi register -u http://192.168.2.10:8080
    INFORMAZIONI[14-11-2022 10:14:08 Pomeriggio] Registrato con successo su Local API (LAPI)
    INFORMAZIONI[14-11-2022 10:14:08 Pomeriggio] Credenziali API locali scaricate su '/etc/crowdsec/local_api_credentials.yaml'
 WARN[14-11-2022 10:14:08 Pomeriggio] Esegui 'sudo systemctl reload crowdsec' per rendere effettiva la nuova configurazione.

Paramos nuestro propio servidor API ya que no lo usaremos:

sudo cp /lib/systemd/system/crowdsec.service /etc/systemd/system/crowdsec.service

E aggiungiamo ‘-no-api'’ nel file di configurazione di Crowdsec ‘/etc/systemd/system/crowdsec.service'’

...
ExecStart=/usr/bin/crowdsec -c /etc/crowdsec/config.yaml -no-api
...

Infine ricarichiamo i servizi per usare questa nuova configurazione:

sudo systemctl daemon-reload
sudo systemctl restart crowdsec

Ora possiamo andare al server LAPI, e potremo vedere che ci sono richieste di connessioni in sospeso con il comando ‘sudo cscli machines list':

---------------------------------------------------------------------------------------------------------
 NAME             IP ADDRESS     LAST UPDATE           STATUS  VERSION          AUTH TYPE  LAST HEARTBEAT
---------------------------------------------------------------------------------------------------------
 b91d17c64c4e4a2  192.168.x.xxx  2022-11-14T22:18:00Z ✔️ v1.4.1-debian password 19s
 9c70ab3970dd4cc 192.168.x.xxx 2022-11-14T22:14:08Z 🚫 password ⚠️ 4m11s
---------------------------------------------------------------------------------------------------------

Validamos las máquinas ejecutando 'sudo cscli machines validate 9c70ab3970dd4cc’

sudo cscli machines validate 9c70ab3970dd4cc
 INFO[14-11-2022 10:19:35 Pomeriggio] machine '9c70ab3970dd4cc' convalidato con successo

Y volvemos a verificar 'sudo cscli machines list':

---------------------------------------------------------------------------------------------------------
 NAME             IP ADDRESS     LAST UPDATE           STATUS  VERSION          AUTH TYPE  LAST HEARTBEAT
---------------------------------------------------------------------------------------------------------
 b91d17c64c4e4a 192.168.x.xxx 2022-11-14T22:19:00Z ✔️ v1.4.1-debian password 40s
 9c70ab3970dd4cc  192.168.x.xxx 2022-11-14T22:19:35Z ✔️ password 5s
---------------------------------------------------------------------------------------------------------

Sin olvidarnos recargar Crowdsec en cada agente una vez le hayamos validado, con:

sudo systemctl restart crowdsec

Mitigaciones,

Ora, para mitigar, para aplicar acciones que nos permitan reducir los riesgos de vulnerabilidad frente a ciertas amenazas, tendremos que usar los bouncers. Primo, desde el servidor de APIs le crearemos los tokens que necesiten los bouncers de los agentes. Lo haremos con cada bouncer que necesitemos en cada agente, ejemplo ‘sudo cscli bouncers add OS-JITSI-05-Fw’

Api key for 'OS-JITSI-05-fw':
    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Please keep this key since you will not be able to retrieve it!

En cada agente de Crowdsec deberemos instalar el bouncer que necesitemos, en este caso nos basaremos en los bouncer de tipo firewall, para cada OS, hay un bouncer compatible: Windows firewall, iptables, nftables, ipset, pfSi tenemos iptables:

sudo apt install crowdsec-firewall-bouncer-iptables -y

Y editamos el fichero de configuración del bouncer del firewall ‘ /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml’ indicating the IP address of our LAPI server and the token we just generated for it:

...
api_url: Protocollo HTTP://192.168.2.10:8080/
api_key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
...

We restart the firewall bouncer service:

sudo systemctl restart crowdsec-firewall-bouncer
sudo systemctl status crowdsec-firewall-bouncer

E questo è tutto! This machine will be ready, it will be able to add entries in the OS firewall denying access to certain IP addresses communicated by the API server.

From the LAPI server we will be able to check the status of the bouncers with 'sudo cscli bouncers list':

-----------------------------------------------------------------------------------------------------------------------
 NAME                IP ADDRESS     VALID  LAST API PULL         TYPE                       VERSION          AUTH TYPE
-----------------------------------------------------------------------------------------------------------------------
 OS-JITSI-05-fw 192.168.x.xxx ✔️ 2023-02-02T16:40:16Z crowdsec-firewall-bouncer v0.0.24-debian api-key
 OS-ELK-03-fw 192.168.x.xxx 2023-02-02T16:40:11Z crowdsec-firewall-bouncer v0.0.24-debian api-key
 OS-GRA-04-fw 192.168.x.xxx 2023-02-02T16:40:11Z crowdsec-firewall-bouncer v0.0.24-debian api-key
 OS-NGINX-01-fw 192.168.x.xxx ✔️ 2023-02-02T16:40:10Z crowdsec-firewall-bouncer v0.0.24-debian api-key
 OS-NGINX-01-mirror 192.168.x.xxx ✔️ 2023-02-02T16:40:18Z crowdsec-blocklist-mirror v0.0.1-9-g86d6 api-key
 OS-OTRS-01-fw 192.168.x.xxx ✔️ 2023-02-02T16:40:16Z crowdsec-firewall-bouncer v0.0.24-debian ✔️  api-key
...
------------------------------------------------------------------------------------------------------------------------

E questo è tutto! Con esto va quedando la malla cerrada! Todos nuestros Crowdsec de la organización se hablarán mediante un único servidor de API, por lo que todos quedarán igualmente protegidos, compartiendo una única lista de direcciones IPs, bloqueando en sus respectivos FWs a las IPs de los atacantes…

Abracitos! Que vaya MUY bien 😉

Post consigliati

Autore

nheobug@bujarra.com
Autor del blog Bujarra.com Cualquier necesidad que tengas, Non esitate a contattarmi, Cercherò di aiutarti ogni volta che potrò, Condividere è vivere ;) . Goditi i documenti!!!