Warum ein öffentlich erreichbarer Jellyfin-Server einen Wächter braucht
Wenn dein Jellyfin-Server unter einer öffentlichen Adresse antwortet, wird er täglich gescannt. Bots suchen nach /.env, wp-login und Path-Traversal-Tricks, probieren Passwörter in Schüben durch, testen eine Liste von Konten von einer Adresse aus (Passwort-Spraying) und haben nach einer langen Reihe von Fehlversuchen manchmal Erfolg. Andere suchen den Weg hinein über einen neuen Administrator, einen API-Schlüssel oder eine geänderte Einstellung.
Logs erst im Nachhinein zu lesen dauert zu lange. Security Notifications beobachtet die Events und das Log des Servers und macht aus diesen Signalen Warnungen auf dem Kanal, den du ohnehin im Blick hast: Telegram, E-Mail, Webhook (Discord, Slack, ntfy, Gotify oder reines JSON) oder das Aktivitätsprotokoll von Jellyfin. Dieses Tutorial zeigt, wie du das für deine jellyfin sicherheit einrichtest: die richtige Warnung, mit genug Kontext zum Handeln und ohne Flut an Rauschen.
fail2ban bleibt sinnvoll und ergänzt das Ganze: Es blockt Wiederholungstäter auf Netzwerkebene. Security Notifications sagt dir, was passiert und wer dahintersteckt, auch Dinge, die fail2ban nicht sieht, etwa ein neuer Admin oder eine Massenlöschung.
Voraussetzungen
- Jellyfin Server 12.2 oder neuer, unter Linux, Windows oder Docker.
- Ein MediaLab-Works-Konto mit einer Lizenz, die das Plugin abdeckt: ein aktives Abo, eine Lifetime-Lizenz innerhalb ihres Update-Fensters, das Jellyfin-Bundle oder die kostenlose 30-Tage-Testversion.
- Für Telegram: ein Bot. Für E-Mail: ein SMTP-Server (Port 587 mit STARTTLS empfohlen). Für einen Webhook: die Adresse deines Discord-, Slack-, ntfy- oder Gotify-Endpunkts oder eine beliebige URL, die JSON annimmt.
- Optional, aber empfohlen: fail2ban läuft bereits vor dem Server.
Schritt 1 — Plugin installieren
Am saubersten geht es über dein privates Plugin-Repository, dann installiert und aktualisiert Jellyfin das Plugin selbst:
- Öffne in deinem MediaLab-Works-Konto Lizenzen → Jellyfin-Plugin-Repository, klicke auf Adresse erstellen und kopiere sie. Sie ist privat (enthält einen Token), teile sie also nicht; du kannst sie jederzeit neu erzeugen oder widerrufen.
- Öffne in Jellyfin Dashboard → Plugins → Repositories, klicke auf +, gib einen Namen ein (zum Beispiel MediaLab Works), füge die Adresse ein und speichere.
- Suche unter Dashboard → Plugins → Katalog nach Security Notifications by MediaLab, klicke auf Installieren und starte Jellyfin neu.
Du kannst auch aus dem öffentlichen Katalog installieren (https://medialab.works/jellyfin/manifest.json) oder manuell aus einer Zip-Datei in den Plugins-Ordner (/var/lib/jellyfin/plugins/ bei einer Linux-Paketinstallation, /config/plugins/ im Docker-Config-Volume, %ProgramData%\Jellyfin\Server\plugins\ unter Windows). Die genauen Schritte für jede Variante stehen im Leitfaden.
Schritt 2 — Lizenz aktivieren
Öffne Dashboard → Plugins → Security Notifications by MediaLab und klicke auf Lizenzseite öffnen. Füge deinen Lizenzschlüssel ein und klicke auf Mit Schlüssel aktivieren: Das Plugin bindet den Schlüssel an diesen Server und zeigt die Lizenz als Aktiv an. Noch kein Schlüssel? Gib auf derselben Seite deine E-Mail ein, um die 30-Tage-Testversion zu starten.
Die Lizenz wird einmal täglich und bei jedem Jellyfin-Start geprüft; ohne Internet arbeitet das Plugin nach der letzten erfolgreichen Prüfung noch 7 Tage weiter. Hintergrundaufgaben laufen nur mit gültiger Lizenz und aktiviertem Plugin.
Schritt 3 — Kanal verbinden und Test senden
Öffne Security Notifications im Dashboard-Menü und wechsle zum Tab Kanäle. Jeder Kanal ist standardmäßig aus; aktiviere, was du willst, und lege für jeden eine Mindeststufe fest.
- Telegram: Bot-Token eingeben,
/startan den Bot senden (oder ihn zu einer Gruppe hinzufügen) und dann auf Suchen klicken, um den Chat einzutragen. - E-Mail: Empfänger und deinen SMTP-Server eintragen. Port 587 mit STARTTLS ist empfohlen; Port 465 mit implizitem TLS wird nicht unterstützt. Wenn Registration by MediaLab installiert ist, kannst du dessen SMTP-Server wiederverwenden.
- Webhook: Discord, Slack, ntfy, Gotify oder JSON wählen und die Adresse einfügen. Die Adresse enthält den Token und wird getrennt von den Einstellungen gespeichert. Bei Gotify hängst du
?token=…an die/message-Adresse an. - Jellyfin-Aktivitätsprotokoll: Warnungen erscheinen zusätzlich in der Aktivitätsliste des Dashboards.
Klicke bei jedem Kanal auf Test senden, bevor du dich darauf verlässt. Öffne dann Einstellungen und wähle eine Standort-Quelle: DB-IP Lite (kostenlos, kein Konto) oder MaxMind GeoLite2 (deine Account-ID und dein Lizenzschlüssel). Die Geolokalisierung läuft lokal; IP-Adressen werden nirgendwohin gesendet. Ohne Standort können die Regeln für neues Land, unmögliche Reise und neues Netz nicht arbeiten.
Schritt 4 — Dem Plugin dein Netz erklären
Füge weiterhin unter Einstellungen deine vertrauenswürdigen Netze (CIDR) hinzu, etwa dein eigenes VPN. Private Netze und die in den Netzwerkeinstellungen von Jellyfin werden automatisch berücksichtigt. Wenn Jellyfin hinter nginx, Caddy, Traefik oder ähnlichem läuft, aktiviere Der Server steht hinter seinem eigenen Proxy, damit Forwarded-Header erwartet werden; Cloudflare wird von selbst erkannt. So bleibt die Regel für gefälschte Proxy-Header aussagekräftig.
Lass die Schlechte-IP-Listen an: Tor-Exit-Nodes werden stündlich aktualisiert, Spamhaus DROP täglich. Beides sind reine Downloads.
Schritt 5 — Die 20 Regeln einstellen
Öffne den Tab Regeln. Jede Regel hat einen eigenen Schalter, eine Schweregrad-Stufe und, wo es zutrifft, Schwellenwerte. Die Regeln decken vier Gruppen ab:
- Angriffe auf Konten: Schübe falscher Passwörter von einer Adresse, viele getestete Konten von derselben Adresse (Passwort-Spraying), eine erfolgreiche Anmeldung nach vielen Fehlversuchen, ein gesperrtes Konto.
- Ungewöhnliche Anmeldungen: neues Land oder unmögliche Reise; ein Administrator, der sich von einem neuen Gerät, aus einem neuen Netz, von außerhalb des lokalen Netzes oder zu einer ungewöhnlichen Stunde anmeldet; Anmeldungen von einem Tor-Exit oder aus einem bekannten schlechten Netz.
- Sensible Änderungen und Schäden: ein neuer Administrator, eine Passwortänderung, ein gelöschtes Konto, ein erstellter oder gelöschter API-Schlüssel, ein installiertes oder entferntes Plugin, geänderte kritische Einstellungen (Fernzugriff, HTTPS, vertrauenswürdige Proxies, Ports, UPnP), Massenlöschung aus einer Bibliothek, ein Konto, das gleichzeitig von zu vielen Orten genutzt wird.
- Anzeichen einer Kompromittierung: Scans und Sondierungen (
/.env,wp-login, Path Traversal), gefälschte Proxy-Header, genutztes "Passwort vergessen", Backdoor-Dateien im Plugins-Ordner, eine Serverversion mit veröffentlichten Schwachstellen.
Starte mit den Standardwerten und passe dann an. Setze die Schwelle für falsche Passwörter danach, wie viele Fehlversuche in wie vielen Minuten bei deinen Nutzern normal sind, und lege die üblichen Zeiten des Administrators fest, damit Anmeldungen außerhalb dieser Zeiten auffallen. Erhöhe den Schweregrad bei Regeln, auf die du immer reagieren würdest, etwa ein neuer Administrator oder eine erfolgreiche Anmeldung nach vielen Fehlversuchen.
Schritt 6 — Rauschen reduzieren
Im Tab Kanäle legen die Einstellungen unter Kein Spam fest, wie oft du vom Plugin hörst: wie oft sich dieselbe Warnung wiederholen darf, Schübe zu einer Nachricht zusammengefasst, Ruhezeiten (nur kritische Warnungen gehen sofort raus, der Rest kommt in einer Zusammenfassung, wenn sie enden) und eine optionale tägliche Zusammenfassung für mittlere und informative Warnungen. Wenn Telegram zu viel wird, erhöhe die Mindeststufe für diesen Kanal und behalte das Aktivitätsprotokoll für alles andere.
Alltag und Fehlersuche
- Übersicht zeigt aktuelle Warnungen und den Status des Plugins; Verlauf listet jede Warnung mit Filtern und CSV-Export. Der Warnungsverlauf speichert bis zu 5000 Einträge (einstellbar).
- Keine Testnachricht kommt an? Prüfe die Mindeststufe für diesen Kanal und nutze erneut Test senden. Bei E-Mail wechsle auf Port 587 mit STARTTLS, falls du 465 verwendet hast.
- Kein Telegram-Chat gefunden? Sende zuerst
/startan den Bot und klicke dann auf Suchen. - Zu viele Anmeldewarnungen? Füge deine vertrauenswürdigen Netze hinzu und bestätige die Proxy-Einstellung; ohne Standortdaten bleiben die Regeln für neues Land und unmögliche Reise bewusst still.
- Unbekannte Nutzer lösen keine Fehlversuche aus? Fehlgeschlagene Anmeldungen werden aus 401/403-Antworten erkannt, weil Jellyfin für unbekannte Nutzer kein Event auslöst.
- Nach einem Update funktioniert etwas nicht? Auf der Lizenzseite bringt dich Auf x.y.z zurücksetzen zur vorherigen Version zurück; starte Jellyfin danach neu. Beachte, dass automatische Updates für dieses Plugin dann aus sind, bis du Update installieren nutzt.
- Lass fail2ban weiterlaufen. Es soll die lauten Scanner bannen; Security Notifications sagt dir, was passiert ist, von wo und was du prüfen solltest.
Fazit
Ein öffentlicher Jellyfin-Server wird sondiert. Mit installiertem Security Notifications kommen die Signale, auf die es ankommt – Passwort-Spraying, unmögliche Reise, /.env-Sondierungen, ein neuer Admin – als Warnungen mit Konto, Adresse, Land, Gerät und einem Hinweis, was zu prüfen ist. Richte einen Kanal ein, sende einen Test, justiere die Regeln eine Woche lang, und du hast einen stillen Wächter statt eines Logs, das du nie liest.
Mehr Details stehen im Benutzerhandbuch, im Changelog und in unserer Wissensdatenbank. Fragen? Kontaktiere uns.
Produktseite: /products/jf-securitynotifications