Desplegando Crowdsec de manera centralizada

Print Friendly, PDF & Email

Cómo pasa el tiempo… ya hacen dos años que hablamos por primera vez de Crowdsec… Tengo intención de hacer unos documentos actualizados de las posibilidades de su despliegue, ya que es un producto muy interesante para proteger nuestras organizaciones ante amenazas y nos ofrece muchísimas posibilidades interesantes.

 

En anteriores posts quizá más detallados ya describimos las posibilidades de Crowdsec, pero por hacer una introducción para los que no lo conozcan, es un software que se puede instalar en distintos tipos de máquinas, con SO Windows, Linux… Y el objetivo es proteger dicha máquina (o tu red), leyendo los logs de la máquina tomará decisiones, como pueda ser banear la IP que le ha realizado un intento de ataque, o alguien se haya validado mal, etc…

 

Son varios componentes, tiene un agente que procesa los logs de la máquina, de los servicios que corra, como por ejemplo puedan ser del visor de sucesos, de un IIS, Nginx, Apache, MariaDB, Exchange, Nextcloud, SMB, RDP… compara los logs con los distintos escenarios y envía las alertas al servicio LAPI (local API); que recibe las alertas y las convierte en decisiones (basándonos en las protecciones que hayamos configurado). Y luego tenemos el bouncer (o componente de remediación), que consulta las decisiones al LAPI y las aplica; por ejemplo el bouncer del firewall, que creará reglas en el FW del SO denegando el acceso a la dirección IP que ha generado un ataque.

 

 

En principio aunque parezca lo contrario es muy sencillo, se instalan todos los componentes juntos al instalar el Agente de Crowdsec (o Engine). Al instalarse el Crowdsec en un Windows o en un Linux detectará los servicios que corre la máquina, y por tanto ya quedarán protegidos, si es un Linux y tiene (por ejemplo) un Nginx ya leerá y tratará los logs del SO, así como los del propio Nginx, buscando patrones que detecten el intento de abuso por parte de vulnerabilidades, escaneos, accesos no debidos… Además se podrán añadir otros tipos de ‘colecciones’ para leer otro tipo de logs, por si en ese Nginx corre un Nextcloud, y queremos que Crowdsec trate también los logs de Nextcloud… 

 

Lo dicho, es sencillo, es nuevo si no lo conoces, pero está muy bien planteado, si lo instalamos en un Windows Server, ídem, detectará si tenemos por ejemplo un IIS instalado, o un SQL Server… y según instalemos el Agente de Crowdsec detectará  patrones en los logs del visor de sucesos para protegernos. Y lo dicho, si ese IIS corre algún servicio en particular, pues también podremos protegerlo, sea por ejemplo un Exchange (tanto OWA como SMTP) pudiendo leer sus logs específicos.

 

Lo que nos quedaría es poder aplicar las acciones, que si lee algo que no le gusta en un log, actúe. Para ello, habitualmente en Windows y Linux necesitamos instalar posteriormente el bouncer del firewall, lo dicho, para que este componente de remediación pueda crear una regla en el firewall del sistema operativo, del Windows o del Linux, una regla temporal, de denegación, bloqueando el acceso de la dirección IP atacante.

 

Así tenemos protegidas nuestras máquinas Windows o Linux, pero entre ellas no se hablan, y sería interesante que se puedan comunicar entre ellas. Así que este paso es opcional, quizá para entornos pequeños, pero por supuesto totalmente recomendado para cualquier organización. Podremos crear fácilmente en un contenedor de Docker un servidor de Crowdsec, por decir, este servidor compartirá mediante LAPI una base de datos centralizada con todas las decisiones, ¿para qué? Por si nos interesa que si una máquina recibe un ataque, el resto de máquinas Crowdsec se enteren y efectúen una acción, como sea protegerse y banear una dirección IP en particular, todas a la vez. Y otro de los contenedores maravillosos que desplegaremos es Crowdsec blocklist mirror, pura magia, este contenedor publicará en una URL la lista negra que comparten todas las máquinas de Crowdsec. ¿Para qué? Para poder acceder a ella desde nuestros firewalls internos o perimetrales tipo Fortigate, CheckPoint, pfSense… y hacer reglas de denegación, entre redes, desde la WAN… y aislar directamente a los atacantes a otro nivel.

 

Bueno, tras esta parrafada, y ya siendo la brasa, el documento de hoy está basado en cómo desplegar esta última parte que hemos hablado, vamos a desplegar la infraestructura central, vamos a desplegar estos contenedores y a futuro en otros documentos veremos cómo instalar Crowdsec en un Windows y protegerlo, centralizado o no; así como un Linux.

 

Despliegue de Crowdsec para entorno multi servidor

 

mkdir crowdsec
cd crowdsec

 

Empezamos por ejemplo en un Ubuntu Server, con su FQDN, una dirección IP estática, con NTP bien configurado, actualizado y con Docker instalado. Vamos a ver qué rápido se despliegan estos dos contenedores. Creamos un directorio, entramos, y empezamos. Crearemos el fichero docker-compose.yml con el siguiente contenido:

version: '3'

services:
  crowdsec:
    image: crowdsecurity/crowdsec
    restart: always
    ports:
      - '8080:8080'
      - '6060:6060'
    volumes:
      - ./crowdsec-db:/var/lib/crowdsec/data/
      - ./crowdsec-config:/etc/crowdsec/

  crowdsec-blocklist-mirror:
    container_name: crowdsec-blocklist-mirror
    image: crowdsecurity/blocklist-mirror
    depends_on:
      - "crowdsec"
    ports:
      - 41412:41412
    volumes:
      - ./cfg.yaml:/etc/crowdsec/bouncers/crowdsec-blocklist-mirror.yaml

volumes:
  crowdsec-db:
  crowdsec-config:

 

Lo dicho, nos desplegará dos contenedores, uno Crowdsec que actuará en principio como servidor LAPI en el 8080 y en el 6060 si interesa escupirá métricas, en el puerto 41412tcp tendremos el contenedor que publica la blocklist, un mirror.

 

Descargamos y arrancamos los contenedores con:

sudo docker compose up -d

 

La primera vez, el contenedor del Blocklist-Mirror no se levantará ya que necesita acceso con su API key, así que creamos el primer bouncer, para las Blocklists:

sudo docker exec -it crowdsec-crowdsec-1 cscli bouncers add BlocklistMirror

 

Bien, paramos el contenedor de Crowdsec y borramos el fichero de configuración para recrearlo a continuación.

sudo docker stop crowdsec-crowdsec-1
rm -rf cfg.yaml/

 

Y creamos con ‘nano cfg.yaml’ el fichero de configuración, que debe ser algo como esto, tener en cuenta que debéis indicar el API key que le hemos solicitado a Crowdsec e indicar la dirección IP por la que publicaremos el servicio LAPI. Así como en la Blocklist añadir la dirección IP que se conectará y tendrá acceso a la URL de la blocklist, por ejemplo nuestro firewall perimetral.

config_version: v1.0
crowdsec_config:
  lapi_key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  lapi_url: http://DIRECCION_IP_MAQUINA:8080
  update_frequency: 10s
  include_scenarios_containing: []
  exclude_scenarios_containing: []
  only_include_decisions_from: []
  insecure_skip_verify: false

blocklists:
  - format: plain_text # Supported formats are either of "plain_text"
    endpoint: /security/blocklist
    authentication:
      type: none # Supported types are either of "none", "ip_based", "basic"
      user:
      password:
      trusted_ips: # IP ranges, or IPs which don't require auth to access this blocklist
        - 127.0.0.1
        - ::1
        - 192.168.1.1

listen_uri: 0.0.0.0:41412
tls:
  cert_file:
  key_file:

metrics:
  enabled: true
  endpoint: /metrics

log_media: stdout
log_level: info

 

Ya podremos iniciar el contenedor de Crowdsec de nuevo y el del Blocklist-Mirror finalmente, ejecutando:

sudo docker start crowdsec-crowdsec-1
sudo docker restart crowdsec-blocklist-mirror

 

Probamos que podemos acceder a la URL de la blocklist desde: http://DIRECCION_IP_MAQUINA:41412/security/blocklist

 

Inscribirlo en la CrowdSec Console

 

Será totalmente recomendable darnos de alta en https://app.crowdsec.net y registrar en nuestra cuenta de Crowdsec Console. Desde aquí podremos visualizar el estado de nuestros Agentes o Engine de Crowdsec, podremos suscribirlas a otras listas negras de la comunidad, gestionar las alertas, históricos… Para dar de alta nuestros Crowdsec, lo haremos desde la web, “Security Engine” > “Engines” > “Add Security Engine”, nos saldrá un desplegable que copiaremos y ejecutaremos en nuestro servidor de Crowdsec (por llamarlo de alguna manera).

 

Y lo ejecutamos, en este caso modificamos un poco el comando ya que lo ejecutaremos mediante Docker:

sudo docker exec -it crowdsec-crowdsec-1 cscli console enroll -e context xxxxxxxxxxxxxxx

 

Volvemos a la Consola de Crowdsec (y si no lo vemos, F5), nos saldrá que ha detectado nuestra solicitud de registro, pulsamos en “Acept enroll”,

 

Una vez la tenemos ya en el inventario, podremos primeramente editarle el nombre para reconocerla mejor, sobre ella “Edit name or tags”,

 

Le ponemos su nombre de máquina y pulsamos en “Update”,

 

Podemos seguir si queremos por suscribirla a ciertas Blocklists que nos ofrece Crowdsec, la comunidad… así la máquina estará protegida de ciertas redes de bots, malvadas… para ello, pulsamos sobre “Blocklist” donde vemos que esta suscrita a 0,

 

Pulsamos en “Browse available blocklists”,

 

Y aquí nos saldrán una serie de listas, podremos escoger hasta 3 de manera gratuita con la cuenta tipo Community, podremos elegir el tipo de las listas, las que más nos convezcan, necesitemos… sobre cada una de ellas, le daremos a “Manage”,

 

Y en “Add Security Engine”,

 

Aquí nos saldrán las máquinas que tengan el agente de Crowdsec instalado, seleccionamos la máquina a suscribir y el tipo de acción, si un baneo a la IP o requerirle un Captcha al acceder. “Confirm Subscription”.

 

En principio vamos a dejar aquí el documento, podemos decir que mínimamente ha quedado el escenario central, la máquina que ofrecerá los servicios de LAPI para el resto de Engines de Crowdsec o la lista negra a nuestros firewalls perimetrales. Los siguientes pasos ya serán desplegar los agentes de Crowdsec donde lo necesitemos, y si nos interesa, pues los integramos a esta instalación y así entre ellos podrán tomar decisiones conjuntas.

 

Espero que os pueda aportar algo, aclarar si alguno tenía dudas o no lo conocía, o le apetece implementarlo en un LAB e ir probando soluciones como estas, fáciles, sencillas, para toda la familia. Y que aportemos seguridad y nos anticipemos a sustos… Pues que eso, no? Ya sabéis, que me piro vampiro, que espero que os vaya MUY bien, abrazos!

 

Posts recomendados

Autor

nheobug@bujarra.com
Autor del blog Bujarra.com Cualquier necesidad que tengas, no dudes en contactar conmigo, os intentare ayudar siempre que pueda, compartir es vivir ;) . Disfrutar de los documentos!!!

RustDesk y RustDesk Web Client

17 de octubre de 2024