De qué manera configurar una instalación de múltiples servidores de CrowdSec

por calpee
10 / 100

Introducción[

CrowdSec es una solución de seguridad colaborativa y de código abierto creada para proteger los servicios, servidores, contenedores o máquinas virtuales de Linux expuestos a Internet con un agente del lado del servidor. Es una versión modernizada de Fail2ban que fue una gran fuente de inspiración para los fundadores del proyecto.[

CrowdSec es gratuito (bajo una licencia MIT) y su código fuente está disponible en GitHub. La solución aprovecha un motor de análisis de comportamiento de IP basado en registros para detectar ataques. Cuando el agente de CrowdSec detecta alguna agresión, ofrece diferentes tipos de remediación para lidiar con la IP detrás de él (prohibición de acceso, captcha, autenticación 2FA, etc.). El informe está seleccionado por la plataforma y, si es legítimo, se comparte en la comunidad de CrowdSec para que los usuarios también puedan proteger sus activos de esta dirección IP.[

Hace unos meses, agregamos algunas características interesantes a CrowdSec al lanzar v1.0.x. Uno de los más interesantes es la capacidad del agente de CrowdSec para actuar como una API de descanso HTTP para recopilar señales de otros agentes de CrowdSec. Por lo tanto, es responsabilidad de este agente especial almacenar y compartir las señales recopiladas. A este agente especial lo llamaremos servidor LAPI a partir de ahora.[

Otra característica que vale la pena señalar es que la mitigación ya no tiene que tener lugar en el mismo servidor que la detección. La mitigación se realiza mediante gorilas. Los porteros se basan en la API HTTP REST proporcionada por el servidor LAPI.[

Metas[

En este artículo describiremos cómo implementar CrowdSec en una configuración de múltiples servidores con una señal de uso compartido de servidor.[

Infografía de objetivos de CrowdSec[

Ambas cosas server-2 y server-3 están destinados a alojar servicios. Puede echar un vistazo a nuestro Hub para saber qué servicios CrowdSec puede ayudarlo a asegurar. Por último, si bien no menos importante, server-1 está destinado a albergar los siguientes servicios locales:[

  • la API local que necesitan los gorilas[

  • la base de datos alimentada por los tres agentes locales de CrowdSec y el servicio de lista de bloqueo de CrowdSec en línea. Como server-1 está sirviendo la API local, lo llamaremos servidor LAPI.[

Elegimos utilizar un backend postgresql para la base de datos CrowdSec para permitir una alta disponibilidad. Este tema se tratará en publicaciones futuras. Si está de acuerdo con no tener alta disponibilidad, puede omitir el paso 2.[

Además, esta publicación cubrirá la mitigación de ataques para servicios alojados en server-2 y server-3 utilizando gorilas de CrowdSec.[

Este artículo es el primero de una serie.[

Prerrequisitos[

  • Dos servidores Ubuntu 20.04 preinstalados con conexión a Internet que alojan servicios. A partir de ahora, nos referiremos a estos servidores por server-2 y server-3 .[

  • Un servidor Ubuntu 20.04 preinstalado sin conexión a Internet. A partir de ahora nos referiremos a este servidor por server-1. Supongamos que server-1La ip es 10.0.0.1. (No hay conexión a Internet en este servidor no es un requisito estricto).[

  • Una red local que conecta los tres servidores.[

Paso 1: instalación de CrowdSec[

Instalemos CrowdSec en cada servidor, siguiendo la guía de instalación de CrowdSec.[

wget -qO - https://s3-eu-west-1.amazonaws.com/crowdsec.debian.pragmatic/crowdsec.asc |sudo apt-key add - && echo "deb https://s3-eu-west-1.amazonaws.com/crowdsec.debian.pragmatic/$(lsb_release -cs) $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/crowdsec.list > /dev/null

sudo apt update


sudo apt install crowdsec

[

Ahora tenemos tres instalaciones estándar de CrowdSec en ejecución.[

Paso 2 (opcional): cambie el backend de la base de datos a postgresql en el servidor-1[

sudo apt install postgresql

[

Primero tenemos que conectarnos a la base de datos como usuario de postgres.[

sudo -i -u postgres

psql

[

Gracias a la documentación de Postgresql Crowdsec, ahora podemos inicializar la base de datos.[

postgres=# CREATE DATABASE crowdsec;

CREATE DATABASE

postgres=# CREATE USER crowdsec WITH PASSWORD 'CREATE USER crowdsec WITH PASSWORD '<password>';

postgres=# CREATE USER crowdsec WITH PASSWORD '<password>';

CREATE ROLE

postgres=# GRANT ALL PRIVILEGES ON DATABASE crowdsec TO crowdsec;

GRANT

[

Ahora, hagamos que CrowdSec conozca este nuevo backend de base de datos. Para lograr esto, tendremos que actualizar la sección db_config del archivo /etc/crowdsec/config.yaml.[

db_config:

  log_level: info

  type: postgres

  user: crowdsec

  password: "<password>"

  db_name: crowdsec

  host: 127.0.0.1

  port: 5432

[

Después de registrar la máquina local nuevamente en la base de datos, podemos reiniciar CrowdSec:[

sudo cscli machines add -a

sudo systemctl restart crowdsec

[

Paso 3: hacer que el servidor 2 y el servidor 3 informen al servidor LAPI[

Primero tenemos que configurar CrowdSec en server-1 aceptar conexiones de server-2 y server-3. Asegúrese de que su firewall permita conexiones desde server-2 y server-3 en server-1puerto 8080.[

Configuremos el servidor API en server-1 lado. Para que esto suceda, tendremos que modificar tanto /etc/crowdsec/config.yaml y /etc/crowdsec/local_api_credentials.yaml.[

Para /etc/crowdsec/config.yaml, ahora es la sección de API la que debe modificarse. Es solo cuestión de actualizar la IP de escucha de localhost a la IP local:[

api:

  client:

    insecure_skip_verify: false

    credentials_path: /etc/crowdsec/local_api_credentials.yaml

  server:

    log_level: info

    listen_uri: 10.0.0.1:8080

    profiles_path: /etc/crowdsec/profiles.yaml

    online_client: # Crowdsec API credentials (to push signals and receive bad IPs)                                                                            

      credentials_path: /etc/crowdsec/online_api_credentials.yaml

[

Para /etc/crowdsec/local_api_credentials.yaml solo tenemos que cambiar la ip configurada en consecuencia:[

url: http://10.0.0.1:8080/

login: <login>

password: <password>

[

Y podemos reiniciar CrowdSec:[

sudo systemctl restart crowdsec

[

Ahora configuraremos las conexiones en server-2 y server-3.[

Primero nos registramos en el servidor lapi en ambos server-2 y server-3:[

sudo cscli lapi register -u http://10.0.0.1:8080

[

De forma predeterminada, el servidor api local está activo en cada instalación del agente de CrowdSec. En esta configuración, queremos deshabilitarlo en server-2 y server-3. Para lograr esto, necesitamos modificar el archivo de servicio systemd del agente de CrowdSec.[

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

[

Ahora editar /etc/systemd/system/crowdsec.service y agrega el -no-api parámetro a la invocación del agente de CrowdSec en ambos server-2 y server-3.[

[Unit]

Description=Crowdsec agent

After=syslog.target network.objetivo remote-fs.target nss-lookup.target


[Service]

Type=notify

Environment=LC_ALL=C LANG=C

PIDFile=/var/run/crowdsec.pid

ExecStartPre=/usr/bin/crowdsec -c /etcétera/crowdsec/config.yaml -t

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

#ExecStartPost=/bin/sleep 0.1

ExecReload=/bin/kill -HUP $MAINPID


[Install]

WantedBy=multi-user.target

[

En este momento tenemos la posibilidad de reconocer los cambios y reiniciar CrowdSec de nuevo.[

sudo systemctl daemon-reload

sudo systemctl restart crowdsec

[

Lo último que debe llevar a cabo es aceptar server-2 y server-3 conexiones en server-1.[

sudo cscli machines list

--------------------------------------------------------------------------------------------------------------------------------------------------------------------

 NAME                                              IP ADDRESS      LAST UPDATE           STATUS  VERSION                                                            

--------------------------------------------------------------------------------------------------------------------------------------------------------------------

 dc6f34b3a4994700a2e333df43728701D0iARTSQ6dxiwyMR  10.0.0.1  2021-04-13T12:16:11Z  ✔️       v1.0.9-4-debian-pragmatic-a8b16a66b110ebe03bb330cda2600226a3a862d7 

 9f3602d1c9244f02b0d6fd2e92933y también75zLVg8zSRkyANxHbC  10.0.0.3   2021-04-13T12:24:12Z  🚫                                                                         

 ac86209y también6f9c4d7d8de43e2ea31fe28ebvde0vWDr46Mpd3L  10.0.0.2   2021-04-13T12:22:28Z  🚫                                                                         

--------------------------------------------------------------------------------------------------------------------------------------------------------------------

[

En esta salida, podemos consultar dos máquinas que aún no están validadas. Validémoslos ahora.[

sudo cscli machines validate 9f3602d1c9244f02b0d6fd2e92933y también75zLVg8zSRkyANxHbC

sudo cscli machines validate ac86209y también6f9c4d7d8de43y también2ea31fe28ebvde0vWDr46Mpd3L

[

server-2 y server-3 ahora pueden mandar datos a server-1 Agente de CrowdSec. Puede ser preciso reiniciar CrowdSec en server-2 y server-3.[

sudo systemctl restart crowdsec

[

En server-1, El comando sudo cscli machines list en este momento debería enseñar tres máquinas validadas.[

Paso 4: modificar la mitigación[

Ahora deseamos instalar la mitigación en nuestros servidores conectados a Internet. Primero tenemos que generar dos tokens API para server-2 y server-3 en server-1.[

sudo cscli bouncers add server-2

Api key for 'server-2':


   02954y también85c72cf442a4dee357f0ca5a7c


Please keep this key since you will not be able to retrive it!

[

sudo cscli bouncers add server-3

Api key for 'server-3':


   3b1030ce0840c343eecd387ac5a3a614


Please keep this key since you will not be able to retrieve it!

[

Por el momento, no hay ningún bulto disponible para el rebotador del cortafuegos. Esto está en nuestra lista de tareas de alta prioridad.[

Por consiguiente en los dos server-2 y server-3:[

wget https://github.com/crowdsecurity/cs-firewall-bouncer/releases/download/v0.0.10/cs-firewall-bouncer.tgz

tar zxvf cs-cortafuegos-bouncer.tgz

cd cs-firewall-bouncer-v0.0.10/

sudo ./install.sh

[

Si iptables y nftables no están instalados, el script de instalación le solicitará permiso para instalarlo. Lo mismo va a suceder para ipset instalación.[

En este momento es el instante de usar el token que producimos al principio de este paso. Ambas cosas api_key y api_url debe ser actualizado en /etcétera/crowdsec/cs-cortafuegos-bouncer/cs-cortafuegos-bouncer.yaml:[

mode: iptables

piddir: /var/run/

update_frequency: 10s

daemonize: true

log_mode: archivo

log_dir: /var/log/

log_level: info

api_url: http://10.0.0.1:8080/

api_key: 02954y también85c72cf442a4dee357f0ca5a7c

disable_ipv6: false

#if present, insert rule in those chains

iptables_chains:

  - INPUT

#  - FORWARD

#  - DOCKER-USER

[

En este momento tenemos la posibilidad de reiniciar el rebotador del firewall.[

sudo systemctl restart cs-firewall-bouncer

[

Conclusión y perspectivas[

Describimos de qué manera modificar una instalación de múltiples servidores de CrowdSec. La sobrecarga de recursos en server-2 y server-3 es bastante limitado en tanto que la mayor parte de las tareas se deportan a server-1. Esto deja llevar a cabo medrar la configuración solo:[

  • registrar y validar el agente de CrowdSec en el servidor LAPI[

  • añadir y validar nuevos porteros Cabe apuntar que los porteros y los agentes de CrowdSec no tienen que estar instalados en exactamente el mismo servidor. Por ende, el agente de CrowdSec debe instalarse donde se desarrollan los registros, pero la mitigación puede deportarse donde sea significativa.[

Por supuesto, hay observaciones en esta configuración:[

  • Las comunicaciones entre agentes se realizan mediante http claro. Esto es aceptable en una red local, pero no es posible por medio de Internet. CrowdSec permite el uso de https para esas comunicaciones, una próxima publicación cubrirá este tema.[

  • El rastreo o las señales tampoco se tratan en el presente artículo. CrowdSec deja una monitorización muy potente a través del raspador Prometheus. Una publicación asimismo cubrirá este tema.[

  • La base de datos de CrowdSec no posee una alta disponibilidad. Además de esto, el agente de CrowdSec en server-1 es un solo punto de falla.[

En este momento puede que se esté preguntando: ¿de qué forma hacer una configuración de CrowdSec de múltiples máquinas de alta disponibilidad? Estén atentos a nuestro próximo artículo.[

El equipo de CrowdSec siempre está feliz de recibir comentarios sobre la solución y su uso. Si quiere reunirse con ellos y charlar, aquí existen algunos links útiles. ¡Dales un grito![

You may also like