Ambiente multi-servidor com Crowdsec
Com este título indigesto, vamos tentar explicar o que torna o Crowdsec uma fera marrom… pois será habitual ter o agente Crowdsec em cada uma das nossas máquinas na organização, Possibilitaremos que eles se comuniquem uns com os outros para evitar ataques.
Isso é, que se um equipamento com Windows ou Linux for atacado, o resto das máquinas da organização possa saber do ataque e bloquear o endereço IP do atacante antes que ele possa sequer bater à porta. Por defeito digamos que o Crowdsec funciona de forma local, cada agente do Crowdsec comunica-se com o seu próprio servidor Local de APIs, o que faremos será que todos se comuniquem com o mesmo servidor LAPI.
Servidor Local API,
Início, primeiro, na máquina que queremos que funcione como servidor API para o resto dos agentes. Assim, habilitamo-lo no seu ficheiro de configuração ‘ /etc/crowdsec/config.yaml, indicamos o IP por onde ouvirá e a porta:
API:
...
Servidor:
...
listen_uri: 192.168.2.10:8080
...
Em ‘/etc/crowdsec/local_api_credentials.yaml’ únicamente o mesmo endereço IP:
URL: Referências HTTP://192.168.2.10:8080 ...
Reiniciamos para aplicar los cambios:
sudo systemctl reiniciar crowdsec
Agentes de Crowdsec,
Agora, 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…
Poço, Vir, Vai, nos registramos contra el LAPI server desde cada agente con:
Sudo cscli lapi registrar -u HTTP://192.168.2.10:8080
INFORMAÇÃO[14-11-2022 10:14:08 PM] Successfully registered to Local API (LAPI)
INFORMAÇÃO[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.
Paramos nuestro propio servidor API ya que no lo usaremos:
sudo cp /lib/systemd/system/crowdsec.service /etc/systemd/system/crowdsec.service
Y añadimos '-no-api’ en el fichero de configuración de Crowdsec '/etc/systemd/system/crowdsec.service’
... ExecStart=/usr/bin/crowdsec -c /etc/crowdsec/config.yaml -no-api ...
Finalmente recargamos los servicios para usar esta nueva configuración:
sudo systemctl daemon-reload sudo systemctl restart crowdsec
Ahora ya si nos vamos al servidor LAPI, podremos ver que hay solicitudes de conexiones pendientes con el 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 PM] machine '9c70ab3970dd4cc' validado com sucesso
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, com:
sudo systemctl reiniciar crowdsec
Mitigaciones,
Agora, para mitigar, para aplicar aciones que nos permitan reducir los riesgos de vulnerabilidad frente a ciertas amenazas, tendremos que usar los bouncers. Primeiro, 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':
xxxxxxxxxxxxxxxxxxxxxx
Por favor, mantenha esta chave, pois você não será capaz de recuperá-la!
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, pf… Si tenemos iptables:
sudo apt instalar crowdsec-firewall-bouncer-iptables -y
Y editamos el fichero de configuración del bouncer del firewall ‘ /etc/crowdsec/seguranças/crowdsec-firewall-bouncer.yaml’ indicando la dirección IP de nuestro LAPI server y el token que acabamos de generarle:
... api_url: Referências HTTP://192.168.2.10:8080/ api_key: xxxxxxxxxxxxxxxxxxxxxxx ...
Reiniciamos el servicio del bouncer del firewall:
sudo systemctl restart crowdsec-firewall-bouncer sudo systemctl status crowdsec-firewall-bouncer
E é isso! Esta máquina quedará preparada, podrá agregar en el firewall del SO entradas denegando el acceso a determinadas direciones IP que le comunique el servidor de APIs.
Podremos desde el servidor LAPI verificar el estado de los bouncers con '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 é isso! 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, compartilhando uma única lista de endereços IPs negativos, bloqueando nos seus respetivos firewalls os IPs dos atacantes…
Abracitos! Que corra MUITO bem 😉







































