Emby te dice quién está viendo, pero no mucho sobre quién está llamando a la puerta. Si tienes un servidor para la familia, amigos o una pequeña comunidad, tarde o temprano surge una pregunta sencilla: ¿quién ha iniciado sesión, desde dónde, con qué app y dispositivo, y alguien ha intentado adivinar una contraseña? Access Log responde a eso desde tu propio servidor, sin ningún servicio externo de geolocalización de por medio.
Access Log es un plugin que guarda el historial de accesos de tu servidor Emby. Registra cada autenticación e intento fallido y los muestra en una tabla: usuario, hora, dirección IP, dispositivo, app y el país y la ciudad aproximados a partir de una base de datos GeoLite2 local. Esa última parte es el objetivo de este tutorial: la consulta se hace en tu máquina, así que las direcciones IP nunca salen de ella.
Qué muestra Emby y qué se le escapa
Emby tiene sus propias vistas de actividad, y van bien para el día a día. Para lo que no están pensadas es para auditar. No puedes filtrar fácilmente por país, no tienes un historial estable por usuario con dispositivo y versión de la app uno al lado del otro, y los intentos fallidos cuesta revisarlos como patrón a lo largo del tiempo.
Access Log cubre ese hueco sin cambiar cómo usa nadie el servidor. La captura es del lado del servidor (los eventos de inicio de sesión y de sesión del servidor), así que funciona con cualquier cliente: Emby Web, apps nativas en Android, iOS, Android TV, Samsung, LG, Roku, Apple TV y navegadores de TV. El nombre de app y dispositivo que se muestra es el que declara el cliente. El plugin también lee el log local embyserver.txt para las cabeceras de las peticiones, así que puede distinguir si una sesión llegó directamente o a través de Cloudflare.
Requisitos previos
- Emby Server 4.10.1 o posterior.
- Una cuenta de MediaLab Works con licencia (mensual, anual, de por vida o el pack de Emby) o la prueba gratuita de 30 días.
- Opcional pero recomendable: una cuenta gratuita de MaxMind, para las bases de datos GeoLite2 City y ASN. Sin ella no se descarga ninguna base de datos y no obtienes datos de ubicación.
- Acceso a la carpeta de plugins de Emby y permiso para reiniciar el servidor.
Paso 1: Instalar el plugin
- Inicia sesión en tu cuenta de MediaLab Works, abre Licenses y descarga el DLL del plugin.
- Copia el DLL en la carpeta de plugins de Emby y reinicia Emby Server:
- Linux (paquete):
/var/lib/emby/plugins/ - Docker: la carpeta
pluginsdentro de tu volumen de configuración de Emby - Windows:
%AppData%\Emby-Server\programdata\plugins\
- Linux (paquete):
- Abre Emby Dashboard → Plugins, haz clic en el plugin, pega tu clave de licencia y guarda. El plugin contacta con el servidor de licencias, vincula la clave a este servidor Emby y muestra la licencia como Active.
La licencia se comprueba una vez al día y en cada arranque de Emby. Sin internet, el plugin sigue funcionando 7 días después de la última comprobación correcta; pasado ese plazo se detiene hasta que pueda volver a comprobarla. Mientras está detenido no se registran nuevos inicios de sesión, pero el log existente se conserva y todo se reanuda en cuanto la licencia vuelve a ser válida.
Paso 2: Añadir la base de datos GeoLite2
Abre Dashboard → Plugins → Access Log.
En GeoLite2, introduce tu clave de licencia de MaxMind (cuenta gratuita) para que el plugin descargue y actualice la base de datos City, o sube el archivo .mmdb manualmente. El Account ID de MaxMind va en la configuración del plugin; la clave de licencia se cifra en reposo en secrets.enc.json en la carpeta de datos del plugin y nunca se envía al navegador: la página solo muestra "set ✓".
La descarga es opcional y está desactivada por defecto. Si la activas, el plugin obtiene las bases de datos GeoLite2 City y ASN de download.maxmind.com, autenticándose con tu propia cuenta. No se envían direcciones IP ni datos de usuarios. Las bases de datos se refrescan cuando tienen más de 7 días (configurable). A partir de ahí, la geolocalización se hace localmente con la base de datos descargada; las direcciones privadas y locales no se consultan.
Paso 3: Configurar la retención y el tratamiento de los intentos fallidos
Todavía en Dashboard → Plugins → Access Log:
- Retención: cuántos días se conservan las entradas. Por defecto, 365. Los archivos mensuales se eliminan enteros, así que en disco puede quedar hasta aproximadamente un mes extra.
- Intentos fallidos: se registran por defecto. Opcionalmente puedes recibir un aviso tras N fallos desde una misma IP. Las alertas van solo al log de actividad local del servidor.
Piensa en la retención antes de acumular meses de datos. Un año es un valor por defecto razonable para un servidor doméstico; redúcelo si el espacio en disco o tus propias expectativas de privacidad lo aconsejan.
Paso 4: Leer el log
La página del plugin lista los inicios de sesión, los más recientes primero. Cada fila te da el usuario, la hora, la dirección IP, la app, el nombre y la versión del dispositivo, y la ubicación aproximada según GeoLite2. Haz clic en un usuario para ver solo su historial.
Usa los filtros (por usuario, período, país y dispositivo) para acotar la búsqueda. Filtrar por país es la forma más rápida de detectar inicios de sesión desde lugares que no esperas. Cuando necesites un registro fuera de la interfaz, exporta a CSV; la exportación la inicia el administrador.
Por dentro, todo se guarda en la carpeta de datos del plugin:
events/events-YYYY-MM.jsonl: cada inicio de sesión, fallo, reproducción y cambio de dirección, con hora, usuario, IP, ubicación (país, región, ciudad, coordenadas aproximadas, ASN/ISP), ruta de acceso (directa o vía Cloudflare, Host, User-Agent, cadena X-Forwarded-For), app, versión, dispositivo y sesión. La contraseña intentada nunca se almacena.events/known.json: dispositivos y países conocidos por usuario, sin caducidad.geoip/*.mmdb: las bases de datos de MaxMind.
Paso 5: Buscar señales de alarma
Con unas semanas de historial, los patrones se hacen visibles:
- Rachas de fallos de inicio de sesión desde una IP. Una serie de fallos contra uno o varios usuarios es el patrón clásico de adivinación. Si activaste la notificación, el log de actividad te avisa cuando se cruza el umbral.
- Países nuevos. Un usuario que normalmente entra desde un país y de repente aparece en otro merece una pregunta amable. El archivo de países conocidos por usuario facilita esta revisión.
- Dispositivos desconocidos. Un nombre de dispositivo que nunca habías visto asociado a una cuenta puede significar una contraseña compartida o filtrada.
- Contraseñas compartidas. La misma contraseña pasada de mano en mano se traduce en un usuario que inicia sesión desde varios países y dispositivos no relacionados en una ventana corta de tiempo. La vista por usuario y el filtro por país lo hacen visible sin conjeturas.
- Cabeceras falsificadas. Emby acepta
X-Forwarded-Forde cualquiera; el plugin marca las cabeceras falsificadas, así que una línea "vía Cloudflare" inventada no te engaña.
Consejos y solución de problemas
- ¿No hay ubicaciones? Comprueba que la base de datos GeoLite2 se ha descargado o subido. Sin una cuenta de MaxMind y sin un
.mmdbmanual, el plugin no tiene nada que consultar. - Las direcciones privadas no muestran ubicación. Es intencionado; las IP locales y privadas no se consultan.
- Nombre de app o dispositivo incorrecto. El plugin muestra lo que declara el cliente. La captura en sí no depende del cliente.
- La detección de Cloudflare no cuadra. "Vía Cloudflare / directa" depende de las líneas que Emby escribe en
embyserver.txt. Si cambias la configuración de tu proxy inverso, revisa unas cuantas entradas recientes. - Plugin detenido. Sus páginas y su API responden con el motivo, y solo la página License sigue funcionando. Corrige ahí la licencia; no se borra nada.
- Uso de disco. Los archivos mensuales más la retención implican un crecimiento predecible. Exporta a CSV y baja la retención si quieres ocupar menos.
Privacidad en un párrafo
La ubicación procede de la base de datos GeoLite2 almacenada en tu servidor. Las direcciones IP nunca se envían a ningún servicio externo. Las alertas van solo al log de actividad local del servidor. Las páginas no cargan scripts de CDN ni fuentes externas. El único tráfico saliente es la descarga opcional de MaxMind con tu propia cuenta y el cliente de licencias compartido por todos nuestros plugins; consulta Licensing and privacy in our plugins.
Conclusión
Access Log convierte el flujo de inicios de sesión de Emby en un rastro de auditoría que es realmente tuyo: cada autenticación e intento fallido, con IP, app, dispositivo y ubicación GeoLite2 local, filtrable por usuario, período, país y dispositivo, y exportable a CSV. Instálalo, apúntalo a una base de datos gratuita de MaxMind, configura la retención y revisa las señales de alarma de vez en cuando. Para los detalles de configuración y la referencia completa, consulta la página del producto y la guía de usuario; el changelog recoge los cambios y la base de conocimiento y las FAQ cubren el resto.