Placer un serveur Emby derrière Cloudflare signifie habituellement une douzaine d’étapes manuelles en deux endroits, et une erreur facile : envoyer la vidéo via le CDN de Cloudflare, ce que les conditions de Cloudflare pour les formules Free, Pro et Business ne permettent pas. Edge Shield pour Cloudflare® fait toute la configuration depuis le tableau de bord Emby, avec votre propre jeton d’API Cloudflare, tout en gardant les flux vidéo en ligne directe vers votre serveur.
Ce qu’il fait
- Connexion : un jeton d’API limité à votre zone, stocké chiffré (AES-256-GCM) sur le serveur et jamais réaffiché dans le navigateur ; choix de la zone et vérification de chaque permission requise par le jeton.
- « Stream offload » (mode recommandé) : l’hôte de l’application (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 hôte de streaming (par exempledirect.example.com) en « DNS only », qui va droit à 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, version TLS minimale, TLS 1.3, HSTS optionnel.
- Certificat Let’s Encrypt pour les deux noms via ACME DNS-01 (avec le même jeton, sans avoir besoin du port 80), renouvelé automatiquement 30 jours avant son expiration et configuré dans Emby comme fichier
.pfx. - Règles Cloudflare compatibles avec la formule Free : la redirection de flux, l’absence de mise en cache des chemins médias, la liste de blocage, le blocage des en-têtes IP envoyés par les clients, les pays autorisés, une limite de débit de connexion et le port d’origine (par exemple quand votre routeur utilise 2096 à l’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 : Emby est configuré pour lire l’adresse transmise, et une règle Cloudflare bloque les requêtes qui apportent leurs propres en-têtes IP, de sorte qu’Emby ne peut pas se voir présenter une fausse adresse.
- Protection dynamique : une IP avec trop d’échecs de connexion (5 en 10 minutes par défaut) entre dans la liste Cloudflare
medialab_blockedet est bloquée en périphérie pendant 24 heures, ×4 à chaque répétition (au maximum 30 jours) ; les entrées expirent d’elles-mêmes. Liste d’autorisation, blocage et déblocage manuels, et interrupteur Under Attack temporisé qui se désactive tout seul. - État et correctifs : chaque point est vérifié, avec un bouton Fix par ligne et Fix everything ; les commandes de pare-feu pour restreindre le port sont affichées, prêtes à copier.
- En anglais et roumain.
Ce qu’il envoie où
- À Cloudflare, via son API et avec votre propre jeton : les paramètres 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 quotidiennement depuis l’API publique de Cloudflare. - À 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 jeton n’est stocké que chiffré sur votre serveur et n’est jamais envoyé au navigateur.
- Rien ne va vers medialab.works, sauf 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 à chaque application. Ce qui a été vérifié jusqu’à présent :
- Emby Web : lecture réelle en « stream offload », sans aucun octet vidéo via Cloudflare ; la page d’administration sur ordinateur et sur téléphone.
- Applications Emby (Android, iOS, Android TV, Samsung, LG, Roku, Apple TV) : pas encore testées. En mode « stream offload », une application doit suivre la redirection 307 pour les médias ; si l’une d’elles ne le fait pas, utilisez le mode « DNS only ».
- Edge Shield a été vérifié contre un simulateur de l’API Cloudflare ; la vérification contre la véritable API Cloudflare est toujours en cours.
Prérequis
- Emby Server 4.10.1 ou plus récent (Linux, Windows ou Docker).
- Un compte Cloudflare contenant la zone de votre domaine ; la formule Free suffit.
- Un jeton d’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 redirigés depuis votre routeur vers Emby pour l’hôte de l’application et pour l’hôte de streaming.
Limites
- L’hôte de streaming est en « DNS only », donc l’IP publique de votre serveur est visible de quiconque la recherche. Les flux nécessitent toujours un jeton Emby valide ; Emby n’offre aucun moyen aux plugins de filtrer les requêtes par hôte, donc sur Emby l’hôte de streaming est protégé par le verrouillage de connexion d’Emby lui-même et par le compte d’échecs de connexion (l’IP est quand même bloquée sur l’hôte de l’application).
- Under Attack demande à 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. Utilisez-le uniquement pendant une attaque, brièvement.
- Pas de Cloudflare Tunnel ni de certificat Origin CA dans cette version : l’un comme l’autre enverraient la vidéo via Cloudflare ou exigeraient un certificat auquel les navigateurs ne se fient pas sur l’hôte direct.
- Les paramètres du serveur qu’Edge Shield modifie (HTTPS, certificat, adresse transmise) prennent effet après le redémarrage d’Emby Server.
Licence
Une licence par serveur Emby. Mensuelle, annuelle ou à vie, ou incluse dans le pack Emby. Essai gratuit de 30 jours. Le plugin est concédé sous licence selon notre CLUF.
Edge Shield est notre propre code, écrit à partir de zéro par MediaLab Works ; il ne contient aucun code tiers et n’utilise que .NET et Emby. Cloudflare est une marque déposée de Cloudflare, Inc. ; Edge Shield n’est ni affilié à Cloudflare ni approuvé par cette société.
