Cuando publicas un servidor en internet, los intentos de acceso no tardan en llegar. Bots que prueban contraseñas por SSH, escáneres buscando rutas comunes en aplicaciones web, crawlers agresivos y tráfico automatizado pueden aparecer incluso antes de que tu proyecto esté terminado.

Un firewall básico ayuda a limitar puertos, pero no siempre alcanza. También necesitas detectar patrones de ataque y bloquear IPs que ya demostraron comportamiento malicioso. Para eso puedes usar CrowdSec, una herramienta open source que analiza logs, detecta ataques y aplica decisiones de bloqueo mediante componentes llamados bouncers.

¿Qué es CrowdSec?

CrowdSec es un motor de seguridad que analiza logs de servicios como SSH, Nginx, Apache, Traefik, WordPress, Docker y otros componentes comunes de infraestructura.

Su funcionamiento se divide en dos partes:

  • El motor de detección lee logs y aplica escenarios de seguridad.
  • El componente de remediación, o bouncer, ejecuta acciones como bloquear una IP en el firewall.

Esto es importante: CrowdSec por sí solo detecta, pero no bloquea tráfico hasta que instalas un bouncer.

En un servidor Ubuntu típico, CrowdSec puede ayudarte a detectar ataques de fuerza bruta por SSH, escaneos contra Nginx, intentos de abuso HTTP y patrones conocidos de comportamiento sospechoso.

¿Cuándo conviene usarlo?

CrowdSec es útil si administras:

  • Un Cloud Server con SSH expuesto a internet.
  • Una API detrás de Nginx.
  • Un sitio web con tráfico público.
  • Un proxy reverso para varias aplicaciones.
  • Un servidor donde quieres sumar defensa activa sin montar una plataforma SIEM compleja.

No reemplaza buenas prácticas como usar claves SSH, actualizar paquetes, configurar un firewall o aplicar HTTPS. Funciona mejor como una capa adicional dentro de una estrategia de hardening.

Requisitos previos

Para seguir esta guía necesitas:

  • Un Cloud Server con Ubuntu 22.04 o Ubuntu 24.04.
  • Acceso por SSH con un usuario con permisos sudo.
  • Nginx instalado si quieres proteger tráfico web.
  • Puertos necesarios abiertos según tu caso:
    • 22/TCP o tu puerto SSH personalizado.
    • 80/TCP para HTTP.
    • 443/TCP para HTTPS.
  • Acceso a la consola para instalar paquetes y revisar servicios.
Antes de avanzar, asegúrate de tener una sesión SSH activa y funcional. Si vas a modificar reglas de firewall, conserva una segunda sesión abierta para evitar quedarte fuera del servidor.

Paso 1: Preparar el servidor

Actualiza el índice de paquetes y aplica actualizaciones disponibles:

sudo apt update
sudo apt upgrade -y


Instala herramientas básicas que pueden ser necesarias para agregar repositorios y descargar claves:

Verifica que el servidor tenga logs disponibles para SSH y Nginx:

sudo ls -lh /var/log/auth.log
sudo ls -lh /var/log/nginx/

Paso 2: Instalar CrowdSec

La documentación oficial recomienda usar el repositorio estable de CrowdSec para instalar versiones actualizadas.

Agrega el repositorio:

curl -s https://install.crowdsec.net | sudo sh

Actualiza APT:

sudo apt update

Antes de instalar, revisa qué versión candidata ofrece el sistema:

apt-cache policy crowdsec

CrowdSec advierte que debes evitar instalar versiones antiguas, especialmente si el candidato mostrado es 1.4.6 o inferior. Si ves una versión vieja, revisa la prioridad del repositorio antes de seguir.

Instala el motor de CrowdSec:

sudo apt install -y crowdsec

Comprueba que el servicio esté activo:

sudo systemctl status crowdsec

También puedes verificar la versión instalada:

sudo cscli version

Paso 3: Activar colecciones para SSH y Nginx

CrowdSec usa colecciones para agrupar parsers y escenarios de detección. Para un servidor con SSH y Nginx, instala las colecciones correspondientes:

sudo cscli collections install crowdsecurity/sshdsudo cscli collections install crowdsecurity/nginx

Recarga CrowdSec para aplicar los cambios:

sudo systemctl reload crowdsec

Lista las colecciones instaladas:

sudo cscli collections list

Deberías ver entradas relacionadas con crowdsecurity/sshd y crowdsecurity/nginx.

Paso 4: Verificar adquisición de logs

CrowdSec intenta detectar servicios y logs automáticamente, pero conviene validarlo.

Revisa la configuración de adquisición:

sudo cat /etc/crowdsec/acquis.yamlsudo ls -lh /etc/crowdsec/acquis.d/

Si Nginx no fue detectado, puedes crear un archivo específico:

sudo nano /etc/crowdsec/acquis.d/nginx.yaml

Agrega esta configuración:

filenames:  - /var/log/nginx/access.log  - /var/log/nginx/error.loglabels:  type: nginx

Si SSH no fue detectado, puedes crear:

sudo nano /etc/crowdsec/acquis.d/sshd.yaml

Con este contenido:

filenames:  - /var/log/auth.loglabels:  type: syslog

Después reinicia CrowdSec:

sudo systemctl restart crowdsec

Revisa métricas:

sudo cscli metrics

Busca líneas leídas y parseadas para SSH o Nginx. Si aparecen líneas leídas pero no parseadas, revisa la ruta del log y el tipo asignado en labels.

Paso 5: Instalar el bouncer de firewall

Hasta este punto, CrowdSec detecta eventos. Para bloquear IPs necesitas un componente de remediación.

Primero revisa si tu sistema usa iptables con backend nf_tables:

iptables -V

Si la salida menciona nf_tables, instala el bouncer para nftables:

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

Si tu sistema usa iptables clásico, instala:

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

Habilita e inicia el servicio si no quedó activo automáticamente:

sudo systemctl enable --now crowdsec-firewall-bouncer

Verifica el estado:

sudo systemctl status crowdsec-firewall-bouncer

Este bouncer es especialmente útil para proteger servicios de infraestructura como SSH. Para aplicaciones web, CrowdSec también ofrece un bouncer específico para Nginx con capacidades orientadas a tráfico HTTP. En servidores productivos, conviene probar ese componente primero en staging porque modifica la integración con Nginx.

Paso 6: Probar que CrowdSec funciona

Puedes revisar alertas generadas con:

sudo cscli alerts list

También puedes ver decisiones activas:

sudo cscli decisions list

Para validar que el bouncer está conectado:

sudo cscli bouncers list

Y para revisar métricas generales:

sudo cscli metrics

No fuerces pruebas agresivas contra tu propio servidor sin cuidado. Si necesitas simular eventos, hazlo desde una IP controlada y asegúrate de poder remover una decisión de bloqueo.

Para eliminar una decisión manualmente, usa:

sudo cscli decisions delete --ip IP_A_DESBLOQUEAR

Reemplaza IP_A_DESBLOQUEAR por la IP real.

Paso 7: Reforzar seguridad

CrowdSec suma una capa útil, pero no debe ser tu única defensa. Aplica estas medidas:

Usa claves SSH

Deshabilita el acceso por contraseña cuando ya tengas claves configuradas y verificadas:

sudo nano /etc/ssh/sshd_config

Ajusta o confirma:

PasswordAuthentication noPermitRootLogin no

Antes de reiniciar SSH, abre otra terminal y verifica que puedes entrar con tu clave.

Luego recarga el servicio:

sudo systemctl reload ssh

Limita puertos expuestos

En el panel de firewall de tu Cloud Server o con una herramienta local como UFW, permite solo los puertos necesarios:

sudo ufw allow OpenSSHsudo ufw allow 'Nginx Full'sudo ufw enablesudo ufw status

Si usas el firewall del panel de DonWeb Cloud, evita duplicar reglas contradictorias con UFW. Elige un enfoque principal y documenta dónde se administran las reglas.

Mantén colecciones actualizadas

Actualiza el hub de CrowdSec periódicamente:

sudo cscli hub updatesudo cscli hub upgradesudo systemctl reload crowdsec

También mantén el sistema operativo actualizado:

sudo apt updatesudo apt upgrade -y

No abras la API local de CrowdSec a internet

La API local de CrowdSec debe quedar accesible solo para los componentes que la necesitan. No expongas puertos internos de CrowdSec públicamente salvo que tengas una arquitectura distribuida y sepas cómo protegerla con autenticación y red privada.

Problemas frecuentes que debes tener en cuenta

CrowdSec detecta, pero no bloquea

Verifica que instalaste un bouncer:

sudo cscli bouncers listsudo systemctl status crowdsec-firewall-bouncer

Recuerda que el motor de CrowdSec no bloquea por sí solo.

No aparecen métricas de Nginx

Revisa que los logs existan:

sudo ls -lh /var/log/nginx/

Luego revisa la adquisición:

sudo cat /etc/crowdsec/acquis.d/nginx.yaml

Si Nginx está en Docker, los logs pueden estar en otra ruta o salir por stdout. En ese caso debes adaptar la adquisición al método real de logging.

Me bloqueé a mí mismo

Desde otra sesión o consola de recuperación, elimina la decisión:

sudo cscli decisions listsudo cscli decisions delete --ip TU_IP

Después revisa qué escenario generó el bloqueo antes de seguir probando.

El paquete instalado parece viejo

Revisa la prioridad del repositorio:

apt-cache policy crowdsec

La documentación oficial recomienda verificar que no estés instalando una versión obsoleta desde repositorios de la distribución cuando el repositorio de CrowdSec debería tener prioridad.