Respuesta rápida: instala CrowdSec, activa las colecciones de SSH y Nginx y suma el bouncer de firewall, que es el que bloquea de verdad:
sudo apt install -y crowdsec
sudo cscli collections install crowdsecurity/sshd
sudo cscli collections install crowdsecurity/nginx
sudo apt install -y crowdsec-firewall-bouncer-nftables
sudo systemctl enable --now crowdsec-firewall-bouncerComprueba que lee los logs con sudo cscli metrics y, si te bloqueas, libera tu IP con sudo cscli decisions delete --ip TU_IP.
Nivel: intermedio · Requiere: Ubuntu con sudo, SSH y Nginx con sus logs en /var/log
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/TCPo tu puerto SSH personalizado.80/TCPpara HTTP.443/TCPpara 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 shActualiza APT:
sudo apt updateAntes de instalar, revisa qué versión candidata ofrece el sistema:
apt-cache policy crowdsecCrowdSec 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 crowdsecComprueba que el servicio esté activo:
sudo systemctl status crowdsecTambién puedes verificar la versión instalada:
sudo cscli versionPaso 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/sshd
sudo cscli collections install crowdsecurity/nginxRecarga CrowdSec para aplicar los cambios:
sudo systemctl reload crowdsecLista las colecciones instaladas:
sudo cscli collections listDeberí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.yaml
sudo ls -lh /etc/crowdsec/acquis.d/Si Nginx no fue detectado, puedes crear un archivo específico:
sudo nano /etc/crowdsec/acquis.d/nginx.yamlAgrega esta configuración:
filenames:
- /var/log/nginx/access.log
- /var/log/nginx/error.log
labels:
type: nginxSi SSH no fue detectado, puedes crear:
sudo nano /etc/crowdsec/acquis.d/sshd.yamlCon este contenido:
filenames:
- /var/log/auth.log
labels:
type: syslogDespués reinicia CrowdSec:
sudo systemctl restart crowdsecRevisa métricas:
sudo cscli metricsBusca 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 -VSi la salida menciona nf_tables, instala el bouncer para nftables:
sudo apt install -y crowdsec-firewall-bouncer-nftablesSi tu sistema usa iptables clásico, instala:
sudo apt install -y crowdsec-firewall-bouncer-iptablesHabilita e inicia el servicio si no quedó activo automáticamente:
sudo systemctl enable --now crowdsec-firewall-bouncerVerifica el estado:
sudo systemctl status crowdsec-firewall-bouncerEste 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 listTambién puedes ver decisiones activas:
sudo cscli decisions listPara validar que el bouncer está conectado:
sudo cscli bouncers listY para revisar métricas generales:
sudo cscli metricsNo 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_DESBLOQUEARReemplaza 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_configAjusta o confirma:
PasswordAuthentication no
PermitRootLogin noAntes de reiniciar SSH, abre otra terminal y verifica que puedes entrar con tu clave.
Luego recarga el servicio:
sudo systemctl reload sshLimita 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 OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
sudo ufw statusSi 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 update
sudo cscli hub upgrade
sudo systemctl reload crowdsecTambién mantén el sistema operativo actualizado:
sudo apt update
sudo apt upgrade -yNo 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 list
sudo systemctl status crowdsec-firewall-bouncerRecuerda 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.yamlSi 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 list
sudo cscli decisions delete --ip TU_IPDespués revisa qué escenario generó el bloqueo antes de seguir probando.
El paquete instalado parece viejo
Revisa la prioridad del repositorio:
apt-cache policy crowdsecLa 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.