De ce un server Jellyfin expus are nevoie de un supraveghetor
Dacă serverul tău Jellyfin răspunde pe o adresă publică, este scanat în fiecare zi. Boții încearcă /.env, wp-login și trucuri de path traversal, testează parole în rafală, încearcă o listă de conturi de la aceeași adresă și uneori reușesc după o serie lungă de eșecuri. Alții caută o cale de intrare printr-un administrator nou, o cheie API sau o setare modificată.
Citirea jurnalelor după fapt este lentă. Notificări de securitate urmărește evenimentele și jurnalul serverului și transformă aceste semnale în alerte pe canalul la care te uiți deja — Telegram, e-mail, webhook (Discord, Slack, ntfy, Gotify sau JSON simplu) ori jurnalul de activitate Jellyfin. Acest tutorial îl configurează pentru munca de securitate jellyfin: să primești alerta potrivită, cu suficient context ca să acționezi, fără un potop de zgomot.
fail2ban rămâne util și complementar: blochează la nivel de rețea cei care repetă. Notificări de securitate îți spune ce se întâmplă și cine face asta, inclusiv lucruri pe care fail2ban nu le vede, cum ar fi un administrator nou sau o ștergere în masă.
Cerințe preliminare
- Jellyfin Server 12.2 sau mai nou, pe Linux, Windows sau Docker.
- Un cont MediaLab Works cu o licență care acoperă plugin-ul: un abonament activ, o licență pe viață în fereastra ei de actualizare, pachetul Jellyfin sau perioada de probă gratuită de 30 de zile.
- Pentru Telegram: un bot. Pentru e-mail: un server SMTP (se recomandă portul 587 cu STARTTLS). Pentru webhook: adresa endpoint-ului tău Discord, Slack, ntfy sau Gotify, ori orice URL care acceptă JSON.
- Opțional, dar recomandat: fail2ban deja pornit în fața serverului.
Pasul 1 — Instalează plugin-ul
Cea mai curată cale este depozitul tău privat de plugin-uri, astfel încât Jellyfin să instaleze și să actualizeze plugin-ul singur:
- În contul MediaLab Works deschide Licenses → Jellyfin plugin repository, apasă Create address și copiaz-o. Este privată (conține un token), așa că nu o partaja; o poți regenera sau revoca oricând.
- În Jellyfin deschide Dashboard → Plugins → Repositories, apasă +, dă-i un nume (de exemplu MediaLab Works), lipește adresa și salvează.
- În Dashboard → Plugins → Catalog găsește Security Notifications by MediaLab, apasă Install, apoi repornește Jellyfin.
Poți instala și din catalogul public (https://medialab.works/jellyfin/manifest.json) sau manual dintr-un fișier zip în folderul de plugin-uri (/var/lib/jellyfin/plugins/ la o instalare Linux din pachet, /config/plugins/ în volumul de configurare Docker, %ProgramData%\Jellyfin\Server\plugins\ pe Windows). Ghidul are pașii exacți pentru fiecare variantă.
Pasul 2 — Activează licența
Deschide Dashboard → Plugins → Security Notifications by MediaLab și apasă Open License page. Lipește cheia de licență și apasă Activate with key: plugin-ul leagă cheia de acest server și afișează licența ca Active. Nu ai încă o cheie? Introdu e-mailul pe aceeași pagină pentru a începe perioada de probă de 30 de zile.
Licența este verificată o dată pe zi și la fiecare pornire a Jellyfin; fără internet, plugin-ul funcționează încă 7 zile după ultima verificare reușită. Sarcinile din fundal rulează doar cu o licență validă și cu plugin-ul activat.
Pasul 3 — Conectează un canal și trimite un test
Deschide Security Notifications din meniul dashboard-ului și mergi la fila Channels. Fiecare canal este oprit implicit; pornește ce vrei și setează o gravitate minimă pentru fiecare.
- Telegram: introdu token-ul botului, trimite
/startbotului (sau adaugă-l într-un grup), apoi apasă Find pentru a completa chat-ul. - E-mail: adaugă destinatari și serverul tău SMTP. Se recomandă portul 587 cu STARTTLS; portul 465 cu TLS implicit nu este acceptat. Dacă este instalat Registration by MediaLab, poți reutiliza serverul lui SMTP.
- Webhook: alege Discord, Slack, ntfy, Gotify sau JSON și lipește adresa. Adresa conține token-ul și este stocată separat de setări. Pentru Gotify, adaugă
?token=…la adresa/message. - Jellyfin activity log: alertele apar și în lista de activitate a dashboard-ului.
Apasă Send a test pe fiecare canal înainte să te bazezi pe el. Apoi deschide Settings și alege o sursă de Location: DB-IP Lite (gratuită, fără cont) sau MaxMind GeoLite2 (id-ul contului și cheia de licență). Geolocalizarea se face local; adresele IP nu sunt trimise nicăieri. Fără locație, regulile pentru țară nouă, călătorie imposibilă și rețea nouă nu pot funcționa.
Pasul 4 — Spune-i plugin-ului despre rețeaua ta
Tot în Settings, adaugă rețelele tale de încredere (CIDR) — propriul VPN, de exemplu. Rețelele private și cele din setările de rețea ale Jellyfin sunt incluse automat. Dacă Jellyfin stă în spatele nginx, Caddy, Traefik sau similar, pornește The server is behind its own proxy ca să fie așteptate antetele forwardate; Cloudflare este recunoscut de la sine. Astfel rămâne relevantă regula pentru antete de proxy falsificate.
Lasă pornite Bad IP lists: nodurile de ieșire Tor sunt reîmprospătate la fiecare oră, iar Spamhaus DROP zilnic. Ambele sunt doar descărcări.
Pasul 5 — Reglează cele 20 de reguli
Deschide fila Rules. Fiecare regulă are propriul comutator, o gravitate și, unde se aplică, praguri. Regulile acoperă patru grupuri:
- Atacuri asupra conturilor: rafale de parole greșite de la o adresă, multe conturi încercate de la aceeași adresă (password spraying), o conectare reușită după multe eșecuri, un cont blocat.
- Conectări neobișnuite: o țară nouă sau o călătorie imposibilă; un administrator care se conectează de pe un dispozitiv nou, dintr-o rețea nouă, din afara rețelei locale sau la o oră neobișnuită; conectări de pe un nod de ieșire Tor sau dintr-o rețea rău famată.
- Schimbări sensibile și daune: un administrator nou, o schimbare de parolă, un cont șters, o cheie API creată sau ștearsă, un plugin instalat sau eliminat, setări critice modificate (acces la distanță, HTTPS, proxy de încredere, porturi, UPnP), ștergere în masă dintr-o bibliotecă, un cont folosit din prea multe locuri deodată.
- Semne de compromitere: scanări și sondări (
/.env,wp-login, path traversal), antete de proxy falsificate, folosirea „Forgot password”, fișiere backdoor în folderul de plugin-uri, o versiune de server cu vulnerabilități publicate.
Începe cu valorile implicite, apoi ajustează. Setează pragul pentru parole greșite la câte eșecuri în câte minute consideri normal pentru utilizatorii tăi și setează orele obișnuite ale administratorului, ca conectările de admin în afara programului să iasă în evidență. Crește gravitatea pentru regulile la care ai acționa mereu, cum ar fi un administrator nou sau o conectare reușită după multe eșecuri.
Pasul 6 — Reduce zgomotul
În fila Channels, setările No spam decid cât de des auzi de la plugin: cât de des poate repeta aceeași alertă, rafalele grupate într-un singur mesaj, orele de liniște (doar alertele critice pleacă imediat, restul ajung într-un rezumat când se termină) și un rezumat zilnic opțional pentru alertele medii și informative. Dacă Telegram devine aglomerat, ridică gravitatea minimă pentru acel canal și păstrează jurnalul de activitate pentru restul.
Utilizare zilnică și depanare
- Overview arată alertele recente și starea plugin-ului; History listează fiecare alertă cu filtre și export CSV. Istoricul alertelor păstrează până la 5000 de intrări (configurabil).
- Nu ajunge niciun mesaj de test? Verifică gravitatea minimă pentru acel canal și folosește din nou Send a test. Pentru e-mail, treci la portul 587 cu STARTTLS dacă ai folosit 465.
- Nu se găsește niciun chat Telegram? Trimite mai întâi
/startbotului, apoi apasă Find. - Prea multe alerte de conectare? Adaugă rețelele tale de încredere și confirmă setarea de proxy; fără date de locație, regulile pentru țară nouă și călătorie imposibilă rămân tăcute din principiu.
- Utilizatorii necunoscuți nu declanșează eșecuri? Conectările eșuate sunt detectate din răspunsurile 401/403, pentru că Jellyfin nu emite niciun eveniment pentru utilizatorii necunoscuți.
- După o actualizare ceva se strică? Pe pagina de licență, Roll back to x.y.z revine la versiunea anterioară; repornește Jellyfin după aceea. Reține că actualizările automate sunt apoi oprite pentru acest plugin până când folosești Install update.
- Ține fail2ban pornit. Lasă-l să blocheze scanerele gălăgioase; lasă Notificări de securitate să îți spună ce s-a întâmplat, de unde și ce să verifici.
Concluzie
Un server Jellyfin public va fi sondat. Cu Notificări de securitate instalat, semnalele care contează — password spraying, călătorie imposibilă, sondări /.env, un admin nou — ajung ca alerte cu contul, adresa, țara, dispozitivul și un indiciu despre ce să verifici. Configurează un canal, trimite un test, reglează regulile o săptămână și vei avea un supraveghetor liniștit în locul unui jurnal pe care nu îl citești niciodată.
Mai multe detalii găsești în ghidul utilizatorului, în changelog și în Bază de cunoștințe. Ai întrebări? Contactează-ne.
Pagina produsului: /products/jf-securitynotifications