3 min read

Crowdsec

Crowdsec
Photo by Arno Senoner / Unsplash
# 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.