Crowdsec
# Resumen de la Configuración de CrowdSec en Unraid con Cloudflare Tunnels
En esta guía detallada, se documenta el proceso de configuración de **CrowdSec**, una herramienta de detección y prevención de intrusos, en un entorno Unraid (versión 7.0.1) utilizando **Cloudflare Tunnels** en lugar de un proxy inverso como SWAG. A continuación, se resumen los pasos, desafíos y soluciones abordados durante una extensa conversación para integrarlo con servicios como Nextcloud y Vaultwarden.
## Contexto Inicial
- **Objetivo**: Proteger servicios autoalojados (Nextcloud, Vaultwarden, etc.) detrás de un túnel de Cloudflare sin depender de SWAG.
- **Entorno**: Unraid 7.0.1 con múltiples contenedores Docker (Nextcloud, Vaultwarden, etc.).
- **Desafío**: Adaptar la configuración de CrowdSec al no usar logs de Nginx/SWAG, y gestionar logs de servicios específicos.
## Paso a Paso de la Configuración
### 1. Prerrequisitos
- Confirmar Unraid 6.11.5 o superior (7.0.1 en este caso).
- Instalar el plugin **Community Applications** para gestionar contenedores.
### 2. Instalación de CrowdSec
- Instalación desde Community Apps con parámetros ajustados:
- **Network Type**: `Host` (sin SWAG, no se usa red personalizada).
- **Puertos**: 8081 (host) → 8080 (contenedor), 6060 (host) → 6060 (contenedor).
- **Volúmenes**:
- `/mnt/cache/appdata/crowdsec/data/` → `/var/lib/crowdsec/data` (rw).
- `/mnt/cache/appdata/crowdsec/` → `/etc/crowdsec` (rw).
- `/var/log/syslog` → `/var/log/syslog` (ro).
- **COLLECTIONS**: `crowdsecurity/linux crowdsecurity/sshd` (inicialmente).
- Problema inicial: Error por duplicidad de `/var/log/syslog` en volúmenes. Solución: Eliminar entradas redundantes (`auth logs to analyze`, `crowdsec logs to analyze`).
### 3. Verificación y Configuración de `acquis.yaml`
- Logs iniciales mostraron que CrowdSec leía `/var/log/syslog` correctamente, pero había advertencias por paths no existentes (e.g., `/var/log/nginx/*.log`).
- Corrección de `acquis.yaml`:
filenames:
- /var/log/syslog
labels:
type: syslog
- Eliminación de entradas irrelevantes (Nginx, Apache) para evitar advertencias.
### 4. Integración con Nextcloud
- **Problema**: No se generaba `nextcloud.log` a pesar de `'logfile' => '/var/www/html/data/nextcloud.log'` en `config.php`.
- **Solución**:
- Ajustar permisos: `chmod -R 775 /mnt/cache/appdata/nextcloud/html/data/`, `chown -R nobody:users`.
- Crear archivo manualmente: `touch /mnt/cache/appdata/nextcloud/html/data/nextcloud.log`.
- Generar eventos (logins fallidos) para activar logs.
- Si falla, redirigir `stdout`: `docker logs nextcloud > /mnt/cache/appdata/nextcloud/html/data/nextcloud.log`.
- **Configuración en CrowdSec**:
- Volumen: Host Path: `/mnt/cache/appdata/nextcloud/html/data/nextcloud.log` → Container Path: `/var/log/nextcloud.log`.
- `acquis.yaml`:
```
---
filenames:
- /var/log/nextcloud.log
labels:
type: nextcloud
```
- `COLLECTIONS`: Añadir `crowdsecurity/nextcloud`.
### 5. Integración con Vaultwarden
- **Problema**: Vaultwarden escribe logs a `stdout` por defecto; error "Unable to write to log file" con `LOG_FILE=/mnt/cache/appdata/vaultwarden/data/vaultwarden`.
- **Solución**:
- Corregir `LOG_FILE` a `/data/vaultwarden.log` en Vaultwarden.
- Ajustar permisos: `chmod 664 /mnt/cache/appdata/vaultwarden/data/vaultwarden.log`, `chown nobody:users`.
- Verificar mapeo: Host Path: `/mnt/cache/appdata/vaultwarden/data/` → Container Path: `/data`.
- Generar actividad (logins fallidos) y verificar: `cat /mnt/cache/appdata/vaultwarden/data/vaultwarden.log`.
- Si falla, redirigir: `docker logs vaultwarden > /mnt/cache/appdata/vaultwarden/data/vaultwarden.log`.
- **Configuración en CrowdSec**:
- Volumen: Host Path: `/mnt/cache/appdata/vaultwarden/data/vaultwarden.log` → Container Path: `/var/log/vaultwarden.log`.
- `acquis.yaml`:
```
---
filenames:
- /var/log/vaultwarden.log
labels:
type: vaultwarden
```
- `COLLECTIONS`: Añadir `crowdsecurity/vaultwarden` (nota: colección no encontrada, corregida a `type: syslog`).
### 6. Corrección de Errores
- **Problema**: Error repetido "can't find 'crowdsecurity/vaultwarden' in collections".
- **Solución**: Eliminar `crowdsecurity/vaultwarden` de `COLLECTIONS` (no existe en el hub de CrowdSec); usar `type: syslog` para `vaultwarden.log`.
- `COLLECTIONS` final: `crowdsecurity/linux crowdsecurity/sshd crowdsecurity/nextcloud`.
### 7. Verificación Final
- Reiniciar CrowdSec y verificar logs: Buscar `Adding file /var/log/nextcloud.log` y `Adding file /var/log/vaultwarden.log`.
- Si no aparecen, depurar con `docker exec -it crowdsec sh` y `ls -l /var/log/`.
## Conclusión
Tras un día de ajustes, CrowdSec se configuró para proteger `/var/log/syslog`, con intentos de integrar Nextcloud y Vaultwarden. El principal desafío fue la generación de archivos de log, resuelto parcialmente con permisos y redirecciones manuales. La colección para Vaultwarden no existe, limitando su protección a `syslog`. Se recomienda explorar alternativas (e.g., Fluentd) para logs dinámicos y verificar la funcionalidad con pruebas de ataque.