Security Notifications para Jellyfin

Recibe una alerta por Telegram, correo o webhook cuando ocurre algo sospechoso en tu servidor de Jellyfin: ataques de contraseñas, inicios de sesión inusuales, cambios del administrador.

Security overview of a Jellyfin server: alerts in the last 24 hours, critical ones this week, channels and threat lists1 de 6

Security Notifications avisa al administrador de tu servidor de Jellyfin en cuanto ocurre algo anormal o sensible para la seguridad: quién lo hizo, desde dónde, por qué parece sospechoso y qué hacer al respecto.

Qué vigila

20 reglas, cada una con su propio interruptor, umbral y severidad:

  • Ataques a cuentas: ráfagas de contraseñas incorrectas desde una dirección, muchas cuentas probadas desde la misma dirección (password spraying), un inicio de sesión correcto tras muchos fallos, una cuenta bloqueada.
  • Inicios de sesión inusuales: un país nuevo para la cuenta o «impossible travel» (dos lugares demasiado lejanos en demasiado poco tiempo); un administrador que inicia sesión desde un dispositivo nuevo, una red nueva, desde fuera de la red local o a una hora inusual; inicios de sesión desde una salida de Tor o una red mala conocida (Spamhaus DROP).
  • Cambios sensibles: un administrador nuevo o derechos sensibles concedidos, una contraseña cambiada, una cuenta borrada, una clave de API creada o eliminada, un plugin instalado, actualizado o eliminado, ajustes críticos cambiados (acceso remoto, HTTPS, proxies de confianza, puertos, UPnP).
  • Daños y abusos: borrado masivo de una biblioteca, una cuenta usada desde demasiados lugares a la vez, una sesión activa de una cuenta desactivada.
  • Señales de compromiso: escaneos y sondeos (/.env, wp-login, path traversal), cabeceras de proxy falsificadas, uso de «Forgot password», archivos o DLL conocidos como backdoor que aparecen en la carpeta de plugins sin una instalación desde el catálogo, una versión del servidor con vulnerabilidades publicadas.

Notificaciones

  • Canales: Telegram, correo (SMTP), webhook (Discord, Slack, ntfy, Gotify o JSON simple) y el registro de actividad de Jellyfin. Cada canal tiene su propia severidad mínima y un botón de prueba.
  • Sin spam: la misma alerta como máximo una vez por intervalo, las ráfagas agrupadas en un solo mensaje, horas de silencio (solo las alertas críticas salen de inmediato, el resto llega en un resumen al final), resumen diario opcional.
  • Contenido: qué pasó, qué cuenta, desde dónde (dirección, país, ciudad, red, dispositivo), por qué es sospechoso y qué comprobar. Los nombres enviados por un atacante (dispositivo, app, cuenta) se reenvían como texto plano.
  • Historial de todas las alertas en la página del plugin, con filtros y exportación a CSV.

Requisitos

  • Jellyfin Server 12.2 o superior.
  • Para alertas por Telegram, correo o webhook: un bot de Telegram, un servidor SMTP o una dirección de webhook. El registro de actividad de Jellyfin funciona sin ninguno de ellos.

Preguntas frecuentes

¿Puede Jellyfin avisarme cuando alguien intenta entrar en mi servidor? Sí, con Security Notifications: contraseñas incorrectas repetidas, password spraying, un inicio de sesión tras muchos fallos, un país nuevo o un administrador que inicia sesión desde un dispositivo nuevo te envían una alerta por los canales que elijas. Consulta la guía.

¿Es lo mismo que Access Log? No. Access Log guarda el historial completo de inicios de sesión y dispositivos para que lo consultes; Security Notifications vigila los eventos y cambios sospechosos y te alerta de inmediato. Funcionan bien juntos.

Qué envía y adónde

Todas las tareas en segundo plano se ejecutan solo con una licencia válida y el plugin activado.

  • Base de datos de geolocalización (solo descarga, no se envía nada): DB-IP Lite por defecto (download.db-ip.com, sin cuenta, CC BY 4.0 — «IP Geolocation by DB-IP», actualizada cada ~35 días); alternativamente MaxMind GeoLite2 (download.maxmind.com, con tu cuenta, cada 7 días) o «desactivado». La geolocalización de las IP se hace en local; las direcciones IP nunca se envían a ningún sitio.
  • Listas de amenazas (activadas por defecto, solo descarga): nodos de salida de Tor (check.torproject.org, cada hora) y Spamhaus DROP (www.spamhaus.org, cada día). Se pueden desactivar.
  • Canales de notificación — todos desactivados por defecto, elegidos por el administrador:
    • Telegram (api.telegram.org): el texto de la alerta a tu chat, con el token de tu bot; el botón «detect chats» lee las actualizaciones recientes del bot.
    • Webhook (tu URL: Discord, Slack, ntfy, Gotify o JSON genérico): texto de la alerta, nombre del servidor, severidad, hora.
    • Correo: a través del SMTP del plugin Registration (si está instalado) o tu propio servidor SMTP (STARTTLS por defecto), a los destinatarios configurados.
    • El registro de actividad del servidor (local, activado por defecto).
  • Contenido de la alerta: título y detalle, la cuenta afectada, la dirección IP con ciudad/país/ISP (ASN), dispositivo y app, severidad, regla, nombre del servidor, hora. Los nombres escritos por un atacante se envían como texto plano (las menciones de Discord están desactivadas).
  • Las páginas no cargan recursos externos.
  • Además, el cliente de licencias, igual en todos los plugins: consulta Licencias y privacidad en nuestros plugins.

Guardado localmente (carpeta de datos del plugin):

  • state/alerts.json: historial de alertas (máx. 5000, configurable).
  • accounts.json: por cuenta — países, redes (ASN), dispositivos vistos (se eliminan a los 365 días), última IP/país/coordenadas; las IP recientes se eliminan a las 24 h.
  • secrets.json (modo 600, fuera de la configuración del servidor): token de Telegram, contraseña SMTP, URL del webhook, clave de MaxMind.
  • Listas de Tor/Spamhaus, bases de datos geoip/*.mmdb.
  • El plugin comprueba si existe el archivo de restablecimiento de contraseña del servidor, sin leerlo; compara la versión del servidor con una tabla de vulnerabilidades incluida (sin conexión).

Nunca enviados: contraseñas, tokens de sesión, contenido multimedia. Nada va a un canal que no hayas activado.

Compatibilidad con clientes

Completamente en el servidor: las alertas proceden de los eventos y el registro del servidor, sea cual sea la app que use el usuario o el atacante.

  • Jellyfin Web / medialab Server: ✅ de extremo a extremo 34/34.
  • Entrega verificada: webhook JSON, correo (SMTP local), registro de actividad ✅; Telegram, Discord, Slack, ntfy y Gotify reales: ❔ no probados (el formato de Discord tiene pruebas unitarias).
  • Apps nativas de Jellyfin, Kodi, Infuse etc.: 🟢 independiente del cliente; ❔ no probadas una por una.
  • Limitaciones: los inicios de sesión fallidos se detectan a partir de respuestas 401/403 (Jellyfin no emite ningún evento para usuarios desconocidos). El SMTP por el puerto 465 (TLS implícito) puede no funcionar — usa 587/STARTTLS (sin verificar).

Leyenda: ✅ verificado (prueba de extremo a extremo o en el dispositivo) · 🟢 en el servidor, funciona con cualquier cliente (por diseño, sin prueba específica para cada cliente) · ➖ no aplicable · ❔ no probado.

Licencia

El plugin es de código abierto (GPL-3.0). Las compilaciones listas para instalar son públicas, igual que el código fuente. Lo que compras es la suscripción: la licencia para usar el plugin en un servidor de Jellyfin, las actualizaciones que incluye tu plan y el soporte: cada actualización mientras la suscripción esté activa, a través de tu repositorio privado de plugins, y ayuda cuando algo no funcione. El plugin comprueba la clave de suscripción una vez al día; sin una suscripción válida se detiene hasta que renueves (no se borra nada). Mensual, anual o de por vida (la de por vida incluye un año de actualizaciones), o incluido en el paquete para Jellyfin. 30 días de prueba gratis.

Código fuente. Para cada versión, el código fuente correspondiente completo es público, junto a la compilación, en el registro de cambios, y también en tu cuenta (Cuenta → Licencias, Código fuente); cada archivo comprimido contiene el texto completo de la GPL-3.0 (LICENSE). Si necesitas el código fuente de una versión que ya no puedes descargar, pídenoslo y te lo enviamos. Consulta la sección 10 del EULA.

Funciona mejor con medialab Server

Este plugin funciona en Jellyfin oficial 12.2 o posterior. En medialab Server, nuestro servidor basado en Jellyfin con los mismos datos, bibliotecas, usuarios y apps, funciona mejor:

  • Verified – medialab. El servidor comprueba la firma de nuestros plugins y te muestra que los archivos son exactamente los que publicamos. Si un plugin se modifica después de publicarse, se marca.
  • Integrado en la interfaz. Los plugins pueden añadir botones y enlaces al menú de tus usuarios (por ejemplo, "TV", "Share") sin configurar nada a mano en la web.
  • Prioridad de forma predeterminada. Los plugins de medialab aparecen primero donde importa: sintonizadores de TV en directo, fuentes de guía y proveedores de subtítulos. El orden lo decides tú: puedes cambiarlo en cualquier momento.
  • El catálogo de medialab.works incluido, con instalación sin confirmaciones adicionales.
  • Actualizaciones desde la interfaz web, sin terminal (con Self-Update de MediaLab): comprueba, actualiza y vuelve a la versión anterior desde el panel de control; si una versión nueva no arranca, el servidor vuelve por sí solo a la anterior con tus datos intactos.
  • El mismo Jellyfin, al día. medialab Server sigue cada semana las versiones estables de Jellyfin 12.x; una versión nueva solo se publica después de superar todas las pruebas, incluidas las de nuestros plugins.

Las apps de Jellyfin (Android, iOS, TV, web) se conectan exactamente igual que a Jellyfin oficial.

Para instalarlo, ejecuta la imagen del contenedor (guía) o, en Debian 12, los paquetes apt, que sustituyen a jellyfin-server y jellyfin-web y conservan tus datos donde están (guía).

medialab Server es software libre (GPL-2.0), basado en Jellyfin. El código fuente es público: medialab-server y medialab-server-web.

Requisitos

  • Jellyfin Server 12.2 o posterior (Linux, Windows o Docker)
  • Código abierto (GPL-3.0): el código fuente de cada versión está en tu cuenta

Última versión

0.1.4
publicada el 20 oct 2026
Ver todos los cambios →

La compilación es pública; para usar el plugin necesitas una licencia o la prueba gratuita de 30 días.