Un server Jellyfin pus în spatele Cloudflare înseamnă de obicei o duzină de pași manuali în două locuri și o greșeală ușor de făcut: video trimis prin CDN-ul Cloudflare, ceea ce termenii Cloudflare pentru planurile Free, Pro și Business nu permit. Edge Shield pentru Cloudflare® face toată configurarea din tabloul de bord Jellyfin, cu propriul tău token API Cloudflare, și lasă fluxurile video să meargă direct la serverul tău.
Ce face
- Conectare: un token API restrâns la zona ta, păstrat criptat (AES-256-GCM) pe server și niciodată afișat din nou în browser; alegerea zonei și verificarea fiecărei permisiuni de care are nevoie tokenul.
- „Stream offload” (modul recomandat): gazda aplicației (de exemplu
media.example.com) trece prin proxy-ul Cloudflare pentru interfața web, API și conectare, iar cererile de video, audio și descărcare sunt redirecționate (307) spre o gazdă de streaming (de exempludirect.example.com) „DNS only”, care merge direct la serverul tău. Există și un mod „Doar DNS” pentru cine nu vrea proxy. - DNS: înregistrările A / AAAA ale celor două nume, cu IP-ul public detectat și actualizat automat (DDNS).
- TLS în Cloudflare: SSL Full (strict), Always Use HTTPS, versiunea TLS minimă, TLS 1.3, HSTS opțional.
- Certificat Let's Encrypt pentru ambele nume prin ACME DNS-01 (cu același token, fără portul 80), reînnoit automat cu 30 de zile înainte de expirare și pus în Jellyfin ca fișier
.pfx. - Reguli Cloudflare potrivite pentru planul Free: redirecționarea fluxurilor, fără cache pe căile media, lista de blocare, blocarea antetelor IP trimise de client, țările permise, limită la login și portul de origine (de exemplu când routerul folosește în exterior 2096). Regulile tale rămân neatinse; Scoate regulile Edge Shield șterge doar ce a creat plugin-ul.
- IP-ul real al clienților: intervalele IP Cloudflare sunt scrise în proxy-urile cunoscute ale Jellyfin și reîmprospătate zilnic, așa că Jellyfin vede adresa vizitatorului și nu poate primi una falsă.
- Gazda de streaming acceptă doar căile media: orice altă cerere pe acel nume primește 403, iar IP-urile blocate sunt refuzate și de Jellyfin însuși, inclusiv pe gazda directă.
- Protecție dinamică: un IP cu prea multe conectări eșuate (implicit 5 în 10 minute) intră în lista Cloudflare
medialab_blockedși e blocat la margine 24 de ore, ×4 la fiecare recidivă (cel mult 30 de zile); intrările expiră singure. Listă de excepții, blocare și deblocare manuală și comutator Under Attack temporizat, care se oprește singur. - Stare și remediere: fiecare punct verificat, cu buton Remediază pe fiecare rând și Remediază tot; comenzile de firewall pentru restricționarea portului sunt afișate, gata de copiat.
- În română și engleză.
Ce trimite și unde
- La Cloudflare, prin API-ul lui și cu tokenul tău: setările zonei, înregistrările DNS (cu IP-ul public al serverului), regulile și adresele IP de blocat. Comentariul unei intrări din lista de blocare conține momentul expirării și motivul (numărul de conectări eșuate sau „manual” cu nota scrisă de tine la o blocare manuală). Din 0.1.1 numele de utilizator încercat nu mai ajunge la Cloudflare: rămâne doar pe serverul tău, în lista de blocări și în jurnalul din pagina plugin-ului.
- Pentru IP-ul public (DDNS), serverul citește
https://www.cloudflare.com/cdn-cgi/trace; lista intervalelor IP Cloudflare se citește zilnic din API-ul public Cloudflare. - La Let's Encrypt: cererea de certificat pentru cele două nume de gazdă (și adresa de e-mail, dacă o scrii). Cheia privată se creează pe serverul tău și nu pleacă de acolo.
- Tokenul e păstrat doar criptat pe server și nu se trimite niciodată în browser.
- La medialab.works nu ajunge nimic în afară de verificarea licenței.
Detaliile complete pentru fiecare produs, inclusiv ce rămâne pe serverul tău: Licențe, confidențialitate și compatibilitate.
Compatibilitate cu clienții
Edge Shield lucrează la nivelul serverului și al rețelei, deci se aplică tuturor aplicațiilor. Ce s-a verificat până acum:
- Jellyfin Web și medialab Server: redare reală prin „stream offload”, fără niciun octet video prin Cloudflare.
- Aplicațiile Jellyfin (Android, Android TV, Swiftfin, Findroid, Kodi/JellyCon, Infuse, Streamyfin) și browserele TV: netestate încă. În modul „stream offload” o aplicație trebuie să urmeze redirecționarea 307 pentru media; dacă una nu o urmează, folosește modul „DNS only”.
- Edge Shield a fost verificat pe un simulator al API-ului Cloudflare; verificarea pe API-ul real Cloudflare este încă în curs.
Cerințe
- Jellyfin Server 12.2 sau mai nou.
- Un cont Cloudflare cu zona domeniului tău; planul Free este suficient.
- Un token API Cloudflare („Custom token”, restrâns la zona ta) cu: 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. Pagina plugin-ului le arată și le verifică.
- Pentru „stream offload”: porturi HTTPS redirecționate din router spre Jellyfin pentru gazda aplicației și pentru gazda de streaming.
Limite
- Gazda de streaming e „DNS only”, deci IP-ul public al serverului e vizibil pentru oricine îl caută. Pe ea Jellyfin răspunde doar la cererile media, care cer în continuare un token Jellyfin valid.
- Under Attack cere fiecărui vizitator o verificare JavaScript: aplicațiile native (Android TV, Roku, iOS, Kodi…) nu trec de ea și nu se conectează cât timp e activ. Folosește-l doar în timpul unui atac, pentru scurt timp.
- Fără Cloudflare Tunnel și fără certificat Origin CA în această versiune: ambele ar trece video prin Cloudflare sau ar cere un certificat în care browserele nu au încredere pe gazda directă.
- Jellyfin își citește setările de rețea la pornire: certificatul, HTTPS și intervalele Cloudflare din proxy-urile cunoscute intră în vigoare după repornirea Jellyfin.
Licență
Plugin-ul este cu sursă deschisă (GPL-3.0). Versiunile gata de instalat sunt publice, ca și codul sursă. Ce cumperi este abonamentul: licența de folosire a plugin-ului pe un server Jellyfin, actualizările incluse în planul tău și suportul: toate actualizările cât timp abonamentul e activ, prin depozitul tău privat de plugin-uri, și ajutor când ceva nu merge. Plugin-ul verifică cheia o dată pe zi; fără un abonament valabil se oprește până la reînnoire (nu se șterge nimic). Lunar, anual sau lifetime (lifetime include un an de actualizări), sau inclus în Pachetul Jellyfin. 30 de zile de probă gratuită.
Codul sursă. Pentru fiecare versiune, sursa completă corespunzătoare este publică, lângă versiunea gata de instalat, în istoricul versiunilor, și se găsește și în cont (Cont → Licențe, Cod sursă); fiecare arhivă conține textul complet al GPL-3.0 (LICENSE). Dacă ai nevoie de sursa unei versiuni pe care nu o mai poți descărca, ne scrii și ți-o trimitem. Vezi secțiunea 10 din EULA.
Cod propriu, scris de la zero de MediaLab Works; nu conține cod de la terți. Cloudflare este o marcă înregistrată a Cloudflare, Inc.; Edge Shield nu este afiliat cu Cloudflare și nu este aprobat de Cloudflare.
