Edge Shield pour Jellyfin

Pour Jellyfin : configurez Cloudflare depuis le tableau de bord : DNS et DDNS, SSL Full (strict), un certificat Let’s Encrypt, des règles et le blocage des échecs de connexion.

Connect once with a Cloudflare API token limited to your zone: it is kept encrypted on the server and never shown again1 sur 8

Placer un serveur Jellyfin derrière Cloudflare demande en général une douzaine d’étapes manuelles à deux endroits, avec une erreur facile : envoyer la vidéo à travers le CDN de Cloudflare, ce que les conditions d’utilisation de Cloudflare pour les formules Free, Pro et Business ne permettent pas. Edge Shield pour Cloudflare® effectue toute la configuration depuis le tableau de bord de Jellyfin, avec votre propre token API Cloudflare, et garde les flux vidéo en direction directe de votre serveur.

Ce qu’il fait

  • Connexion : un token API limité à votre zone, stocké chiffré (AES-256-GCM) sur le serveur et ne plus jamais affiché dans le navigateur ; choix de la zone et vérification de chaque permission dont le token a besoin.
  • « stream offload » (mode recommandé) : le domaine d’application (app host, par exemple media.example.com) passe par le proxy Cloudflare pour l’interface web, l’API et la connexion, tandis que les requêtes vidéo, audio et de téléchargement sont redirigées (307) vers un domaine de streaming (streaming host, par exemple direct.example.com) en « DNS only », qui va directement à votre serveur. Un mode « DNS only » existe pour ceux qui ne veulent pas du proxy.
  • DNS : les enregistrements A / AAAA des deux noms, avec l’IP publique détectée et tenue à jour automatiquement (DDNS).
  • TLS dans Cloudflare : SSL Full (strict), Always Use HTTPS (toujours utiliser HTTPS), version TLS minimale, TLS 1.3, HSTS facultatif.
  • Certificat Let’s Encrypt pour les deux noms via ACME DNS-01 (avec le même token, sans avoir besoin du port 80), renouvelé automatiquement 30 jours avant son expiration et installé dans Jellyfin comme fichier .pfx.
  • Règles Cloudflare compatibles avec la formule Free : la redirection des flux, l’absence de mise en cache des chemins média, la liste de blocage, le blocage des en-têtes IP envoyés par le client, les pays autorisés, une limite de débit pour la connexion et le port d’origine (par exemple quand votre routeur utilise le port 2096 côté extérieur). Vos propres règles restent intactes ; Remove the Edge Shield rules ne supprime que ce que le plugin a créé.
  • IP client réelle : les plages d’IP de Cloudflare sont écrites dans les proxys connus de Jellyfin et actualisées chaque jour, pour que Jellyfin voie l’adresse du visiteur et qu’on ne puisse pas lui en présenter une fausse.
  • Le domaine de streaming n’accepte que les chemins média : toute autre requête sur ce nom reçoit un 403, et les IP bloquées sont également refusées par Jellyfin lui-même, y compris sur le domaine direct.
  • Protection dynamique : une IP avec trop d’échecs de connexion (5 en 10 minutes par défaut) entre dans la liste Cloudflare medialab_blocked et est bloquée en périphérie pendant 24 h, ×4 à chaque récidive (30 jours au maximum) ; les entrées expirent d’elles-mêmes. Liste d’autorisation (allowlist), blocage et déblocage manuels, et un commutateur Under Attack programmé dans le temps qui s’éteint tout seul.
  • Status and fixes : chaque point est vérifié, avec un bouton Fix par ligne et un Fix everything ; les commandes de pare-feu pour restreindre le port sont affichées, prêtes à copier.
  • En anglais et en roumain.

Ce qu’il envoie, où

  • Vers Cloudflare, via son API et avec votre propre token : les réglages de zone, les enregistrements DNS (avec l’IP publique de votre serveur), les règles et les adresses IP à bloquer. Le commentaire d’une entrée de la liste de blocage contient l’heure d’expiration et la raison (le nombre d’échecs de connexion, ou « manual » avec la note que vous avez écrite pour un blocage manuel). Depuis la version 0.1.1, le nom d’utilisateur tenté n’est plus envoyé à Cloudflare : il reste uniquement sur votre serveur, dans la liste de blocage et le journal de la page du plugin.
  • Pour trouver votre IP publique (DDNS), le serveur lit https://www.cloudflare.com/cdn-cgi/trace ; la liste des plages d’IP de Cloudflare est lue chaque jour depuis l’API publique de Cloudflare.
  • Vers Let’s Encrypt : la demande de certificat pour vos deux noms d’hôte (et l’adresse e-mail, si vous en saisissez une). La clé privée est créée sur votre serveur et ne le quitte jamais.
  • Le token n’est stocké que chiffré sur votre serveur et n’est jamais envoyé au navigateur.
  • Rien ne va vers medialab.works, si ce n’est la vérification de licence.

Détails complets pour chaque produit, y compris ce qui reste sur votre serveur : Licence, confidentialité et compatibilité.

Compatibilité des clients

Edge Shield agit au niveau du serveur et du réseau, donc il s’applique à toute application. Ce qui a été vérifié jusqu’ici :

  • Jellyfin Web et medialab Server : lecture réelle en mode « stream offload », sans aucun octet vidéo passant par Cloudflare.
  • Applications Jellyfin (Android, Android TV, Swiftfin, Findroid, Kodi/JellyCon, Infuse, Streamyfin) et navigateurs de téléviseurs : pas encore testés. En mode « stream offload », une application doit suivre la redirection 307 pour les médias ; si ce n’est pas le cas, utilisez le mode « DNS only ».
  • Edge Shield a été testé contre un simulateur de l’API Cloudflare ; le test contre la véritable API Cloudflare est toujours en cours.

Prérequis

  • Jellyfin Server 12.2 ou plus récent.
  • Un compte Cloudflare contenant la zone de votre domaine ; la formule Free suffit.
  • Un token API Cloudflare (« Custom token », limité à votre zone) avec : Zone · Zone · Read, Zone · DNS · Edit, Zone · Zone Settings · Edit, Zone · SSL and Certificates · Edit, Zone · Zone WAF · Edit, Zone · Single Redirect · Edit, Zone · Cache Rules · Edit, Zone · Origin Rules · Edit, Account · Account Filter Lists · Edit. La page du plugin les liste et les vérifie.
  • Pour le « stream offload » : des ports HTTPS transférés de votre routeur vers Jellyfin, pour le domaine d’application et pour le domaine de streaming.

Limites

  • Le domaine de streaming est en « DNS only » : l’IP publique de votre serveur est donc visible de quiconque la recherche. Sur ce nom, Jellyfin ne répond qu’aux requêtes média, qui nécessitent quand même un token Jellyfin valide.
  • Under Attack impose à chaque visiteur une vérification JavaScript : les applications natives (Android TV, Roku, iOS, Kodi…) ne peuvent pas la passer et ne se connecteront pas tant qu’il est actif. Ne l’utilisez que pendant une attaque, brièvement.
  • Pas de Cloudflare Tunnel ni de certificat Origin CA dans cette version : l’un et l’autre enverraient la vidéo via Cloudflare ou nécessiteraient un certificat non reconnu par les navigateurs sur le domaine direct.
  • Jellyfin lit ses réglages réseau au démarrage : le certificat, HTTPS et les plages Cloudflare dans les proxys connus ne prennent effet qu’après un redémarrage de Jellyfin.

Licence

Le plugin est open source (GPL-3.0). Les versions compilées prêtes à l’installation 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 incluses dans votre formule et le support : chaque mise à jour tant 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 inclut 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, demandez-nous et nous vous l’envoyons. Voir la section 10 de la Licence (CLUF).

Code écrit par nos soins, à partir de zéro, par MediaLab Works ; il ne contient aucun code tiers. Cloudflare est une marque déposée de Cloudflare, Inc. ; Edge Shield n’est ni affilié à Cloudflare ni approuvé par elle.

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)
  • Un compte Cloudflare avec la zone de votre domaine (le plan gratuit suffit)
  • Un jeton d’API Cloudflare restreint à la zone, avec les permissions indiquées sur la page du plugin
  • Pour le délestage des streams : ports HTTPS redirigés vers le serveur pour l’hôte de l’application et l’hôte de streaming
  • Open source (GPL-3.0) : le code source de chaque version est dans votre compte

Dernière version

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