Seguridad de Nextcloud más allá del escaneo: bastionado, integridad y alertas

El escaneo integrado revisa tu servidor desde fuera. Sentinel cubre el interior: accesos solo con contraseña, contraseñas de aplicación olvidadas, una referencia de archivos que apruebas, una autocomprobación de archivos expuestos y cambios tipo ransomware.

Por qué la comprobación externa no basta

Si gestionas Nextcloud, seguramente conozcas el escaneo de seguridad oficial que examina tu instancia desde internet y te informa de lo que ve un desconocido: cabeceras, TLS, exposición de la versión. El resumen de administración también hace su parte. Nextcloud ya se encarga de la limitación de peticiones, el hash de contraseñas, las cabeceras, el doble factor, las firmas de integridad y demás, y lo hace bien.

Lo que ninguno de los dos ve es el estado que se acumula mientras un servidor se usa de verdad. La cuenta que todavía puede iniciar sesión solo con contraseña. La contraseña de aplicación de un cliente de sincronización que retiraste hace meses y que hoy seguiría funcionando. El archivo de la instalación que cambió cuando nadie lo cambió. El archivo de configuración que tu servidor web entrega a quien lo pida. Ese es el hueco que cubre Sentinel: una comprobación de seguridad continua que vive dentro de tu Nextcloud y avisa a una persona cuando algo de esto cambia.

Este tutorial recorre una sesión práctica de bastionado de Nextcloud con él, desde la primera referencia hasta una entrada semanal en cron.

Requisitos previos

  • Nextcloud 34 y PHP 8.4 o superior. Nada más antiguo, a propósito.
  • Las tareas en segundo plano (Cron) de Nextcloud en ejecución, para los vigilantes y el resumen diario.
  • Los ajustes de correo de Nextcloud configurados, si quieres alertas por correo.
  • Opcional: el demonio EDR (Linux 4.20+, Python 3.9+, root y systemd) y, si quieres, ClamAV a través de su socket clamd.

La instalación en sí es breve. Descarga el archivo desde tu cuenta de MediaLab Works en Licenses, extráelo en apps/ (o custom_apps/) con el usuario del servidor web como propietario, actívalo y pega tu clave de licencia en Administration settings → Sentinel → License. Los pasos completos están en la guía.

Paso 1: Toma la referencia antes de cambiar nada

Hazlo una vez que estés conforme con que la instalación está en el estado en que debería estar:

sudo -u www-data php occ sentinel:baseline take

La referencia registra el código de la instalación —lib, core, apps, 3rdparty, config, themes— en ese momento. Nunca cubre los archivos de los usuarios. A partir de ahí, solo se informa de los cambios desde ese momento.

Después de cada actualización de Nextcloud o de una app, aprueba una vez los archivos modificados, con una nota que entiendas más adelante:

sudo -u www-data php occ sentinel:baseline accept --all --note "Nextcloud 34.0.4"

Un parche deliberado recibe el mismo trato. Lo que quede después es solo el cambio sin explicación, que es exactamente lo que quieres mirar. En The files puedes ajustar qué partes de la instalación cubre la referencia, los tipos de archivo, las exclusiones, el límite de tamaño y el hash.

Paso 2: Lee la página de estado, empezando por lo peor

La página de estado de seguridad lista los hallazgos con el motivo y la solución junto a cada uno. En la práctica verás cosas como:

  • cuentas que pueden iniciar sesión solo con contraseña;
  • contraseñas de aplicación obsoletas;
  • sesiones inactivas;
  • administradores inactivos;
  • caducidad del certificado;
  • si se está registrando algo o no.

Ve bajando por la lista. Cada hallazgo indica qué significa y qué pasa si lo ignoras, y tiene la acción (caducar, revocar, eliminar) justo ahí. Los umbrales de «demasiado antiguo» los pones tú en What counts as too old: contraseñas de aplicación obsoletas, sesiones inactivas, administradores inactivos y enlaces sin caducidad.

Paso 3: Comprueba qué sirve realmente tu servidor web

La autocomprobación pregunta a tu propio servidor web, como visitante anónimo, por archivos que nunca deben servirse: la configuración, el registro, los directorios .git. Todo lo que devuelva se informa.

También puedes ejecutarla desde la terminal:

sudo -u www-data php occ sentinel:check --probe

En Asking the server what it serves activas o desactivas la comprobación, añades rutas extra que te interesen y fijas cuántos días de aviso quieres antes de que caduque el certificado.

Paso 4: Vigila las vías de entrada

El inventario lista todas las vías de entrada a tu instancia: enlaces públicos, sesiones, contraseñas de aplicación, pertenencia a grupos, con caducar, revocar o eliminar junto a cada una. Combínalo con los vigilantes, que te alertan cuando algo cambia: una cuenta que pasa a ser administradora, el doble factor desactivado, una cuenta nueva, una dirección que funciona con varias cuentas, un administrador que inicia sesión desde una red nueva, apps activadas o desactivadas, dominios de confianza o proxies modificados, o un enlace abierto por un grupo de gente al que nunca se envió.

Los inicios de sesión se recuerdan por la red que usa una cuenta, no por la dirección exacta, y los dominios de confianza y los proxies se guardan solo como huellas. En Where people sign in from decides si se recuerdan las redes en absoluto, si las nuevas te avisan, qué precisión tiene una red y qué cuentas ignorar. En Public links ajustas la vigilancia del uso de enlaces, cuánta gente merece mención, cuánto por encima del propio registro del enlace y cuántos intentos de contraseña rechazados cuentan como adivinación.

Paso 5: Detecta cambios tipo ransomware

Sentinel no juzga solo por la tasa. Detecta ransomware en un portátil sincronizado por archivos que dejan de ser lo que su nombre dice, por notas de rescate y por renombrados masivos. Los ajustes están en Files changing very fast: la ventana, el número de reescrituras, borrados o renombrados a una misma extensión, y si solo alertar o desactivar la cuenta y cerrar sus sesiones.

Esa última parte está desactivada por defecto, y yo la mantendría así hasta que confíes en los umbrales con tus propios datos. Sentinel no cambia nada por su cuenta a menos que se lo pidas.

Paso 6: Asegúrate de que las alertas llegan a una persona

En Being told, elige a partir de qué severidad se usan la campana y el correo, añade una dirección extra —idealmente una que llegue a un móvil—, fija la hora del resumen diario y pulsa Send a test message. Después lee el resumen: en qué estado está el servidor, qué se vigila y qué no, y si las alertas llegarían a alguien.

Paso 7: Pon una comprobación semanal en cron

occ sentinel:check imprime el informe y termina con un código distinto de cero cuando algo requiere atención, lo que convierte una entrada semanal en cron que solo envía correo si falla en una sola línea:

sudo -u www-data php occ sentinel:check --quiet-when-clean

También acepta --inventory y --json cuando quieres llevar la salida a otro sitio.

Opcional: demonio EDR y ClamAV

Si quieres saber qué programa escribe en el directorio de datos, el demonio EDR incluido en apps/sentinel/edr/ se ejecuta como root fuera de Nextcloud y puede suspender el proceso culpable:

cd /var/www/nextcloud/apps/sentinel/edr
sudo sh install.sh
sudoedit /etc/sentinel-edr/config.ini    # at minimum data_dir
sudo sh install.sh                       # again, to grant the paths it needs
sudo systemctl enable --now sentinel-edr

En Which program is writing le indicas a Sentinel si se espera el demonio y dónde deja sus informes. Por separado, A scanner to ask te permite apuntarlo a ClamAV: el socket y cuánto de un archivo enviar. ClamAV escanea archivos que ya parecen sospechosos.

Consejos y solución de problemas

  • La sección de integridad lista muchos archivos modificados justo después de instalar. Aún no se ha tomado ninguna referencia, o no se aprobó una actualización. Toma la referencia o ejecuta occ sentinel:baseline accept --all --note "..." después de comprobar.
  • No se vigila nada aunque la app esté activada. Las tareas en segundo plano deben ejecutarse (Cron). Tras desactivar y volver a activar, abre la página de Sentinel una vez: las tareas se restauran y la comprobación de configuración lo indica.
  • Las alertas por correo no llegan. Revisa los ajustes del servidor de correo de Nextcloud y usa Send a test message. Los administradores sin dirección de correo solo reciben la campana.
  • Lo eliminaste con occ app:remove y quedaron tablas. Elimínalo desde dentro de la app o con occ sentinel:remove. Las cuentas que Sentinel desactivó siguen desactivadas hasta que se liberen (--release-accounts), y el demonio EDR sigue en ejecución hasta que lo detengas con systemctl disable --now sentinel-edr.
  • Pausar frente a eliminar. Puedes pausar la vigilancia, apagar la app conservándolo todo (occ app:disable sentinel) o eliminarla con todos los registros que escribió (occ sentinel:remove).
  • Privacidad. No hay telemetría ni cuenta en la nube. La única conexión saliente es la comprobación diaria de licencia a medialab.works, que envía la clave de suscripción, el id de la instancia, una huella de hardware con hash, la versión de la app y una suma de comprobación de los propios archivos de la app; nada sobre tus usuarios, sus archivos, inicios de sesión o eventos. Todo se guarda en cuatro tablas: referencia, eventos, redes conocidas y uso diario de enlaces.

Para terminar

Toma la referencia, lee la página de estado, comprueba qué sirve tu servidor y deja que los vigilantes y el resumen diario te avisen cuando algo se mueva. Esa es la mitad interior del bastionado de Nextcloud, y es la mitad que un escaneo remoto nunca podrá ver. Si te atascas, la guía tiene la referencia completa, el changelog recoge lo que cambió, y la base de conocimiento y las FAQ cubren el resto.

Esta publicación se redactó con ayuda de IA a partir de la documentación de nuestros productos o de las fuentes indicadas y se revisó automáticamente antes de publicarse.

Sigue leyendo

¿Usas Emby, Jellyfin o Nextcloud?

Nuestros plugins y apps añaden TV en directo, subtítulos, registro de usuarios y seguridad a tu propio servidor, con prueba gratuita.