Security Notifications pour Jellyfin

Recevez une alerte sur Telegram, par e-mail ou par webhook quand quelque chose de suspect se passe sur votre serveur Jellyfin : attaques par mot de passe, connexions inhabituelles, changements d’administrateur.

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

Security Notifications informe l’administrateur de votre serveur Jellyfin dès que quelque chose d’anormal ou touchant à la sécurité se produit : qui, d’où, pourquoi c’est suspect et quoi faire.

Ce qu’il surveille

20 règles, chacune avec son interrupteur, son seuil et sa sévérité :

  • Attaques contre les comptes : rafales de mots de passe incorrects depuis une adresse, de nombreux comptes essayés depuis la même adresse (password spraying), une connexion réussie après de nombreux échecs, un compte verrouillé.
  • Connexions inhabituelles : un nouveau pays pour le compte ou un « voyage impossible » (deux endroits trop éloignés en trop peu de temps) ; un administrateur se connectant depuis un nouvel appareil, un nouveau réseau, l’extérieur du réseau local ou à une heure inhabituelle ; des connexions depuis une sortie Tor ou un réseau réputé mauvais (Spamhaus DROP).
  • Changements sensibles : un nouvel administrateur ou des droits sensibles accordés, un mot de passe modifié, un compte supprimé, une clé d’API créée ou supprimée, un plugin installé, mis à jour ou supprimé, des réglages critiques modifiés (accès à distance, HTTPS, proxys de confiance, ports, UPnP).
  • Dommages et abus : suppression massive dans une bibliothèque, un compte utilisé depuis trop d’endroits à la fois, une session active d’un compte désactivé.
  • Signes de compromission : scans et sondes (/.env, wp-login, traversal de chemins), en-têtes de proxy falsifiés, utilisation de « Forgot password », fichiers ou DLL de porte dérobée connus qui apparaissent dans le dossier des plugins sans installation depuis le catalogue, une version du serveur avec des vulnérabilités publiées.

Notifications

  • Canaux : Telegram, e-mail (SMTP), webhook (Discord, Slack, ntfy, Gotify ou JSON simple) et le journal d’activité Jellyfin. Chaque canal a sa sévérité minimale et un bouton de test.
  • Pas de spam : la même alerte au plus une fois par intervalle, les rafales regroupées en un seul message, des heures de silence (seules les alertes critiques partent immédiatement, les autres arrivent dans un résumé à la fin), un résumé quotidien facultatif.
  • Contenu : ce qui s’est passé, quel compte, d’où (adresse, pays, ville, réseau, appareil), pourquoi c’est suspect et quoi vérifier. Les noms envoyés par un attaquant (appareil, application, compte) sont transmis en texte brut.
  • History de toutes les alertes sur la page du plugin, avec filtres et export CSV.

Prérequis

  • Jellyfin Server 12.2 ou plus récent.
  • Pour les alertes Telegram, e-mail ou webhook : un bot Telegram, un serveur SMTP ou une adresse de webhook. Le journal d’activité Jellyfin fonctionne sans aucun d’eux.

Questions fréquentes

Jellyfin peut-il m’avertir quand quelqu’un tente de s’introduire dans mon serveur ? Oui, avec Security Notifications : des mots de passe incorrects répétés, du password spraying, une connexion après de nombreux échecs, un nouveau pays ou un administrateur connecté depuis un nouvel appareil vous envoient une alerte sur les canaux choisis. Voir le guide.

Est-ce la même chose qu’Access Log ? Non. Access Log conserve l’historique complet des connexions et des appareils pour que vous puissiez le consulter ; Security Notifications surveille les événements et changements suspects et vous alerte immédiatement. Ils fonctionnent bien ensemble.

Ce qu’il envoie et où

Toutes les tâches d’arrière-plan ne tournent qu’avec une licence valide et le plugin activé.

  • Base de données de géolocalisation (téléchargement uniquement, rien n’est envoyé) : DB-IP Lite par défaut (download.db-ip.com, sans compte, CC BY 4.0 — « IP Geolocation by DB-IP », actualisée environ tous les 35 jours) ; alternativement MaxMind GeoLite2 (download.maxmind.com, avec votre compte, tous les 7 jours) ou « off ». La géolocalisation des IP se fait localement ; les adresses IP ne sont jamais envoyées nulle part.
  • Listes de menaces (activées par défaut, téléchargement uniquement) : nœuds de sortie Tor (check.torproject.org, chaque heure) et Spamhaus DROP (www.spamhaus.org, chaque jour). Peuvent être désactivées.
  • Canaux de notification — tous désactivés par défaut, choisis par l’administrateur :
    • Telegram (api.telegram.org) : le texte de l’alerte vers votre discussion, avec votre jeton de bot ; le bouton « detect chats » lit les mises à jour récentes du bot.
    • Webhook (votre URL : Discord, Slack, ntfy, Gotify ou JSON générique) : texte de l’alerte, nom du serveur, sévérité, heure.
    • E-mail : via le SMTP du plugin Registration (s’il est installé) ou votre propre serveur SMTP (STARTTLS par défaut), vers les destinataires configurés.
    • Le journal d’activité du serveur (local, activé par défaut).
  • Contenu de l’alerte : titre et détail, le compte concerné, l’adresse IP avec ville/pays/FAI (ASN), appareil et application, sévérité, règle, nom du serveur, heure. Les noms saisis par un attaquant sont envoyés en texte brut (les mentions Discord sont désactivées).
  • Les pages ne chargent aucune ressource externe.
  • Plus le client de licence, le même dans chaque plugin : voir Licences et confidentialité dans nos plugins.

Stocké localement (dossier de données du plugin) :

  • state/alerts.json : historique des alertes (5000 maximum, configurable).
  • accounts.json : par compte — pays, réseaux (ASN), appareils vus (supprimés après 365 jours), dernière IP/pays/coordonnées ; les IP récentes sont supprimées après 24 h.
  • secrets.json (mode 600, en dehors de la configuration du serveur) : jeton Telegram, mot de passe SMTP, URL du webhook, clé MaxMind.
  • Listes Tor/Spamhaus, bases de données geoip/*.mmdb.
  • Le plugin vérifie si le fichier de réinitialisation du mot de passe du serveur existe, sans le lire ; il compare la version du serveur à une table de vulnérabilités incluse (hors ligne).

Jamais envoyés : mots de passe, jetons de session, contenu multimédia. Rien ne va vers un canal que vous n’avez pas activé.

Compatibilité avec les clients

Entièrement côté serveur : les alertes proviennent des événements et du journal du serveur, quelle que soit l’application utilisée par l’utilisateur ou l’attaquant.

  • Jellyfin Web / medialab Server : ✅ de bout en bout 34/34.
  • Livraison vérifiée : webhook JSON, e-mail (SMTP local), journal d’activité ✅ ; vrais Telegram, Discord, Slack, ntfy, Gotify : ❔ non testé (format Discord testé en unitaire).
  • Applications Jellyfin natives, Kodi, Infuse, etc. : 🟢 indépendant du client ; ❔ non testés individuellement.
  • Limites : les connexions échouées sont détectées à partir des réponses 401/403 (Jellyfin n’émet aucun événement pour les utilisateurs inconnus). Le SMTP sur le port 465 (TLS implicite) peut ne pas fonctionner — utilisez 587/STARTTLS (non vérifié).

Légende : ✅ vérifié (test de bout en bout ou sur l’appareil) · 🟢 côté serveur, fonctionne avec tout client (par conception, sans test propre à un client) · ➖ non applicable · ❔ non testé.

Licence

Le plugin est open source (GPL-3.0). Les versions compilées prêtes à installer sont publiques, comme le code source. Ce que vous achetez, c’est l’abonnement : la licence d’utilisation du plugin sur un serveur Jellyfin, les mises à jour comprises dans votre formule et le support : chaque mise à jour pendant que l’abonnement est actif, via votre dépôt de plugins privé, et de l’aide quand quelque chose ne fonctionne pas. Le plugin vérifie la clé d’abonnement une fois par jour ; sans abonnement valide, il s’arrête jusqu’au renouvellement (rien n’est supprimé). Mensuel, annuel ou à vie (la licence à vie comprend un an de mises à jour), ou inclus dans le pack Jellyfin. Essai gratuit de 30 jours.

Code source. Pour chaque version, le code source complet correspondant est public, à côté de la version compilée, dans l’historique des versions, et aussi dans votre compte (Compte → Licences, Code source) ; chaque archive contient le texte intégral de la GPL-3.0 (LICENSE). Si vous avez besoin du code source d’une version que vous ne pouvez plus télécharger, écrivez-nous et nous vous l’envoyons. Voir la section 10 de la Licence (CLUF).

Fonctionne au mieux avec medialab Server

Ce plugin fonctionne sur Jellyfin officiel 12.2 ou plus récent. Sur medialab Server, notre serveur basé sur Jellyfin, avec les mêmes données, bibliothèques, utilisateurs et applications, il fonctionne mieux :

  • Verified – medialab. Le serveur vérifie la signature de nos plugins et vous montre que les fichiers sont exactement ceux que nous avons publiés. Un plugin modifié après sa publication est signalé.
  • Intégré à l’interface. Les plugins peuvent ajouter des boutons et des liens dans le menu de vos utilisateurs (par exemple « TV », « Share ») sans configuration web manuelle.
  • Prioritaire par défaut. Les plugins medialab passent en premier là où cela compte : tuners TV en direct, sources de guide et fournisseurs de sous-titres. L’ordre reste le vôtre : vous pouvez le modifier à tout moment.
  • Le catalogue medialab.works inclus, avec une installation sans confirmations supplémentaires.
  • Mises à jour depuis l’interface web, sans terminal (avec Self-Update de MediaLab) : vérifiez, mettez à jour et revenez en arrière depuis le tableau de bord ; si une nouvelle version ne démarre pas, le serveur revient de lui-même à la version précédente, avec vos données intactes.
  • Le même Jellyfin, à jour. medialab Server suit chaque semaine les versions stables de Jellyfin 12.x ; une nouvelle version n’est publiée qu’après avoir réussi tous les tests, y compris ceux de nos plugins.

Les applications Jellyfin (Android, iOS, TV, web) se connectent exactement comme à Jellyfin officiel.

Pour l’installer, lancez l’image de conteneur (guide) ou, sur Debian 12, les paquets apt, qui remplacent jellyfin-server et jellyfin-web en conservant vos données en place (guide).

medialab Server est un logiciel libre (GPL-2.0), basé sur Jellyfin. Le code source est public : medialab-server et medialab-server-web.

Configuration requise

  • Jellyfin Server 12.2 ou plus récent (Linux, Windows ou Docker)
  • Open source (GPL-3.0) : le code source de chaque version est dans votre compte

Dernière version

0.1.4
publiée le 20 oct. 2026
Voir toutes les modifications →

La version compilée est publique ; l’utilisation du plugin nécessite une licence ou l’essai gratuit de 30 jours.