Por qué tu servidor Jellyfin necesita una auditoría de inicios de sesión
Si tienes Jellyfin para la familia o los amigos, seguramente hayas repartido unas cuantas cuentas y luego hayas dejado de pensar en ellas. El problema es que una cuenta puede acabar usándose por más gente de la que pretendías: una contraseña compartida con un vecino, un móvil antiguo que sigue con la sesión abierta o alguien probando combinaciones en tu página de login a las tres de la mañana.
Jellyfin registra actividad, pero un historial de auditoría dedicado es más fácil de leer y de usar para actuar. Access Log registra cada inicio de sesión, cada contraseña incorrecta y cada sesión con el usuario, la dirección IP, la app y el dispositivo, y añade país, ciudad y proveedor de internet desde una base de datos GeoLite2 local. Lo importante para quienes autoalojan: las direcciones IP nunca se envían a un servicio externo de geolocalización. Las consultas se hacen en tu servidor, en la base de datos descargada.
Este tutorial recorre la instalación del plugin, la configuración de la base de datos de ubicación local y la lectura del registro para que puedas detectar de verdad una contraseña compartida o un ataque. Se da por hecho que ya tienes Jellyfin en marcha y que te manejas con el panel de administración.
Requisitos previos
- Jellyfin Server 12.2 o superior, en Linux, Windows o Docker.
- Una cuenta de MediaLab Works con una licencia que cubra el plugin (una suscripción activa, una licencia de por vida dentro de su ventana de actualizaciones, el bundle de Jellyfin o la prueba gratuita de 30 días).
- Una cuenta gratuita de MaxMind para las bases de datos GeoLite2 City y ASN. Sin ella, los eventos se siguen registrando, solo que sin ubicación.
- Acceso de administrador al panel de Jellyfin.
El plugin es de código abierto (GPL-3.0) y el código fuente de cada versión está disponible en tu cuenta.
Paso 1 — Instalar Access Log
La vía recomendada es tu repositorio privado de plugins, porque así Jellyfin instala y actualiza el plugin por su cuenta.
- En tu cuenta de MediaLab Works abre Licenses → Jellyfin plugin repository y haz clic en Create address. Cópiala. La dirección es privada (contiene un token), así que trátala como una contraseña; puedes regenerarla o revocarla en cualquier momento.
- En Jellyfin abre Dashboard → Plugins → Repositories, haz clic en +, ponle nombre (por ejemplo MediaLab Works), pega la dirección y guarda.
- Abre Dashboard → Plugins → Catalog, busca Access Log by MediaLab, haz clic en Install y reinicia Jellyfin.
Si prefieres el catálogo público, https://medialab.works/jellyfin/manifest.json lista todos los plugins publicados de MediaLab Works; puedes añadirlo de la misma forma y activar después la licencia o la prueba. También existe la instalación manual con zip, documentada en la guía por si la necesitas.
Paso 2 — Activar la licencia
- Abre Dashboard → Plugins → Access Log by MediaLab y haz clic en Open License page.
- Pega tu clave de licencia y haz clic en Activate with key. El plugin vincula la clave a este servidor y muestra la licencia como Active.
- ¿Todavía no tienes clave? Introduce tu correo en la misma página para empezar la prueba gratuita de 30 días o compra una licencia; el plugin se activa solo al completarse el pago.
La licencia se comprueba una vez al día y en cada arranque de Jellyfin. Sin internet, el plugin sigue funcionando 7 días después de la última comprobación correcta. Sin una licencia válida se pausa y solo queda disponible la página de licencia; no se borra nada.
Paso 3 — Configurar la base de datos GeoLite2 local
De aquí salen los datos de ubicación, y todo es opcional y está desactivado por defecto.
- Crea una cuenta gratuita en MaxMind (GeoLite2) y ve a Manage License Keys → Generate new license key.
- En Jellyfin abre Dashboard → Access Log → Settings. Introduce el account id y la license key y guarda. Las bases de datos GeoLite2 City y ASN se descargan al momento y se actualizan automáticamente (cuando tienen más de 7 días, configurable).
- En esa misma página de Settings, elige cuántos días se conservan los eventos, si se registran los inicios de reproducción y los cambios de IP, y qué alertas quieres.
Lo único que sale de tu servidor aquí es la petición de descarga autenticada a download.maxmind.com. No se envían direcciones IP ni datos de usuarios. Las direcciones privadas y locales no se consultan en absoluto.
Paso 4 — Leer el registro de actividad
Abre Dashboard → Access Log → Activity. Cada evento aparece con el más reciente primero: inicios de sesión correctos, contraseñas incorrectas (la contraseña intentada nunca se guarda), sesiones abiertas y cerradas, cambios de IP durante una sesión y, opcionalmente, inicios de reproducción.
Para cada evento tienes el usuario, la hora, la dirección IP, la app y su versión, el nombre e id del dispositivo, además de país, región, ciudad y proveedor de internet (ASN). Esa es la respuesta a "¿quién entra en mi servidor Jellyfin?": no solo un nombre de usuario, sino todo el contexto.
Usa los filtros por usuario, periodo, país y dispositivo para acotar, y la exportación CSV cuando quieras ver los datos en una hoja de cálculo o guardar un registro.
Hay dos vistas más que ayudan:
- Devices: los dispositivos conocidos de cada usuario, con primera y última conexión, número de sesiones y últimas direcciones.
- Users and countries: un resumen por usuario y por país, además de las direcciones con contraseñas incorrectas.
Paso 5 — Configurar alertas y retención
En Settings puedes activar alertas que van al registro de actividad de Jellyfin: un dispositivo nuevo, un país nuevo para un usuario y contraseñas incorrectas repetidas desde la misma dirección. Durante el primer día tras la instalación, los dispositivos y países se aprenden sin alertas, para que no recibas una avalancha el primer día.
La retención es de 365 días por defecto y es configurable. Se eliminan archivos mensuales completos, así que en disco puede quedar hasta aproximadamente un mes extra. Los datos viven en la carpeta de datos del plugin como events/events-YYYY-MM.jsonl, events/known.json y geoip/*.mmdb. Son datos personales (direcciones IP, ubicaciones, dispositivos): consérvalos solo el tiempo que necesites y avisa a los usuarios de tu servidor de que se registra el acceso.
Consejos y solución de problemas
- Todos los eventos muestran la misma dirección. Es tu proxy o Cloudflare. Añade el proxy a los Known proxies de Jellyfin en Dashboard → Networking para que Jellyfin transmita la dirección real del visitante.
- No hay ubicación en los eventos. Revisa el account id y la clave de MaxMind en Settings.
- Señales de alarma que buscar. Una ráfaga de contraseñas incorrectas desde una dirección, un inicio de sesión desde un país desde el que nunca se ha conectado ningún usuario o un dispositivo desconocido bajo un usuario conocido. Las vistas de resumen y las alertas están pensadas justo para esto.
- Clientes. La captura se hace en el servidor, así que funciona con cualquier cliente; el nombre de app y dispositivo que se muestra es lo que informa el cliente. Jellyfin Web está verificado de extremo a extremo; otras apps quedan cubiertas por diseño.
- Actualizaciones y rollback. Jellyfin puede actualizar el plugin desde el repositorio; la página de licencia también ofrece Install update y Roll back to x.y.z si algo deja de funcionar tras una actualización. Reinicia Jellyfin después de cualquiera de las dos.
Conclusión
Un historial de inicios de sesión solo es útil si es completo, legible y privado. Access Log te da cada inicio de sesión y cada intento fallido con IP, app, dispositivo y ubicación, mantiene la geolocalización en local mediante GeoLite2 y convierte el ruido en alertas sobre las que actuar. Instálalo, añade tu clave de MaxMind y dedica diez minutos a la vista Activity: puede que te sorprenda lo que encuentres.
Tienes más detalles en la página del producto, en la guía y en el changelog. Si algo no funciona, la base de conocimiento y las FAQ son buenos siguientes pasos, o contacta con nosotros.