← Volver al índice

Guía Paso a Paso: Defensa Perimetral con CrowdSec y Firewall Bouncer

CrowdSec Firewall Bouncer Netfilter / NFTables Ciberseguridad Híbrida

Objetivo de esta guía: Implementar una arquitectura de ciberseguridad híbrida de detección y respuesta automatizada ante amenazas. El motor de análisis de comportamiento de CrowdSec opera como contenedor Docker auditando los logs de Nginx, mientras que el agente de remediación (Firewall Bouncer) se ejecuta de forma nativa en el sistema operativo host para bloquear IPs atacantes a nivel de kernel (Firewall de Red).

1. Arquitectura Híbrida de Detección y Remediación

Los cortafuegos tradicionales basados en reglas estáticas son insuficientes para detener ataques modernos dinámicos. CrowdSec es un sistema de prevención de intromisiones (IPS) colaborativo y de código abierto que procesa los logs de aplicaciones web en tiempo real para detectar comportamientos sospechosos (escaneos de vulnerabilidades CVE, ataques de fuerza bruta o inyecciones SQL).

Para mantener un rendimiento óptimo, desacoplamos la Detección (motor CrowdSec dentro de Docker) de la Remediación (Bouncer nativo en Linux). Cuando el motor en Docker detecta un comportamiento hostil, notifica al Bouncer del host, el cual descarta los paquetes TCP directamente en las tablas del kernel (nftables / iptables) antes de que la petición consuma recursos en el servidor web.

2. Configuración del Motor en Docker (Docker Compose)

Añadimos el servicio de CrowdSec a nuestra infraestructura contenedorizada y etiquetamos el servicio web de Nginx. Las etiquetas instruyen al agente de CrowdSec para auto-descubrir el contenedor y parsear sus logs de acceso mediante la colección de reglas crowdsecurity/nginx y crowdsecurity/http-cve.

📄 docker-compose.yml (Fragmento del Servicio CrowdSec)
services: nginx: # ... (Configuración existente de Nginx) ... labels: - "crowdsec.enable=true" - "crowdsec.type=nginx" crowdsec: image: crowdsecurity/crowdsec:latest container_name: crowdsec environment: - COLLECTIONS=crowdsecurity/nginx crowdsecurity/http-cve - DOCKER_HOST=unix:///var/run/docker.sock ports: - "127.0.0.1:8080:8080" # Expone la API Local (LAPI) exclusivamente al bucle local volumes: - crowdsec-db:/var/lib/crowdsec/data/ - crowdsec-config:/etc/crowdsec/ - /var/run/docker.sock:/var/run/docker.sock:ro restart: always volumes: crowdsec-db: crowdsec-config:

Desplegamos la nueva configuración para que Docker inicialice el motor de análisis de seguridad:

# Recrear los contenedores e iniciar el agente de CrowdSec
docker compose up -d

3. Generación de Credenciales de API (LAPI Key)

El motor de CrowdSec expone un API Local (LAPI). El Bouncer nativo instalado en el sistema operativo necesita autenticarse frente a este API para consultar periódicamente la lista de direcciones IP bloqueadas (*decisions*). Registramos un nuevo bouncer en el motor ejecutable de Docker:

# Registrar el identificador del bouncer y obtener la clave de API
docker exec -t crowdsec cscli bouncers add portero-firewall
Clave de Autenticación: Copie la clave alfanumérica generada por el comando cscli. Esta credencial permite autorizar al demonio del sistema operativo para aplicar bloqueos de red.

4. Instalación del Firewall Bouncer Nativo en el Host

Instalamos el paquete nativo crowdsec-firewall-bouncer en el sistema operativo Linux (Debian/Ubuntu/Raspberry Pi OS). Ejecutarse fuera de Docker es esencial para que el Bouncer pueda manipular las reglas de filtrado de paquetes de la pila de red del Kernel Linux (Netfilter/NFTables).

# 1. Registrar el repositorio oficial de paquetes de CrowdSec
curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh | sudo bash

# 2. Instalar el paquete ejecutable del Bouncer de Firewall
sudo apt install -y crowdsec-firewall-bouncer-nftables

5. Vinculación y Activación del Servicio Systemd

Editamos el fichero de configuración del Bouncer en el sistema operativo host para apuntar hacia el API Local expuesto por el contenedor Docker en http://127.0.0.1:8080/ e inyectar la clave API generada.

# Editar el fichero de configuración del Bouncer nativo
sudo nano /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml
📄 /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml
api_url: http://127.0.0.1:8080/ api_key: PEGA_AQUI_TU_CLAVE_GENERADA

Habilitamos el demonio para que se ejecute automáticamente al arrancar el sistema operativo y reiniciamos el servicio:

# Aplicar configuración, arrancar y verificar el estado del demonio
sudo systemctl restart crowdsec-firewall-bouncer
sudo systemctl enable crowdsec-firewall-bouncer

# Inspeccionar el estado operativo de las reglas del firewall
sudo systemctl status crowdsec-firewall-bouncer

6. Resumen Operativo de Protección

El flujo de defensa en tiempo real opera de manera autónoma:

← Volver a la portada ↑ Volver arriba
🏠