• 3 Posts
  • 35 Comments
Joined 3 months ago
cake
Cake day: March 27th, 2025

help-circle
  • A while back there was a situation where outsiders could get the name of the contents of your Jellyfin server, which would incriminate anyone. I believe it’s patched now, but I don’t think Jellyfin is winning any security awards. It’s a selfhosted media server. I have no frame of reference for knowing whether or not any of my information was overkill and I’m sure there are even some out there that would say I didn’t go far enough, even.






  • Vanilla_PuddinFudge@infosec.pubtoSelfhosted@lemmy.worldJellyfin over the internet
    link
    fedilink
    English
    arrow-up
    42
    arrow-down
    6
    ·
    edit-2
    20 hours ago

    Jellyfin isn’t secure and is full of holes.

    That said, here’s how to host it anyway.

    1. Wireguard tunnel, be it tailscale, netbird, innernet, whatever
    2. A vps with a proxy on it, I like Caddy
    3. A PC at home with Jellyfin running on a port, sure, 8096

    If you aren’t using Tailscale, make your VPS your main hub for whatever you choose, pihole, wg-easy, etc. Connect the proxy to Jellyfin through your chosen tunnel, with ssl, Caddy makes it easy.

    Since Jellyfin isn’t exactly secure, secure it. Give it its own user and make sure your media isn’t writable by the user. Inconvenient for deleting movies in the app, but better for security.

    more…

    Use fail2ban to stop intruders after failed login attempts, you can force fail2ban to listen in on jellyfin’s host for failures and block ips automatically.

    More!

    Use Anubis and yes, I can confirm Anubis doesn’t intrude Jellyfin connectivity and just works, connect it to fail2ban and you can cook your own ddos protection.

    MORE!

    SELinux. Lock Jellyfin down. Lock the system down. It’s work but it’s worth it.

    I SAID MORE!

    There’s a GeoIP blocking plugin for Caddy that you can use to limit Jellyfin’s access to your city, state, hemisphere, etc. You can also look into whitelisting in Caddy if everyone’s IP is static. If not, ddns-server and a script to update Caddy every round? It can get deep.

    Again, don’t do any of this and just use Jellyfin over wireguard like everyone else does(they don’t).







  • there are a lot of other solutions to this

    Jellyfin servers don’t connect to eachother, or relay themselves to anything else beyond simple reverse proxies. I looked over the entire thread and didn’t see anything but ldap and tailscale/wireguard suggestions.

    You said there were a lot of other solutions, so wherever those solutions are, I’m sure they’ll work out. Good luck!🙃






  • the VPS uses the pi-hole through the tunnel

    The VPS is Pihole, the dns for the server side is 127.0.0.1. 127.0.0.1 is also 10.x.x.1 for the clients, so they connect to that as the dns address.

    server dns - itself

    client dns - the server’s wg address

    On the local side, the pi-hole is the DNS for all the services on that subnet and each service automatically populate their host name on pi-hole. I can configure the DNS server in my router/firewall (OPNSense in my case)

    Only if your router/firewall can directly connect to wg tunnels, but I went for every machine individually. My router isn’t aware I host anything at all.

    So when I ping service.example.com, it goes through the VPS, which queries the pi-hole through the tunnel and translates the address to the local subnet IP if applicable.

    Pihole (in my case) can’t see 192.x.x.x hosts. Use 10.x.x.x across every system for continuity.

    So when I have the wg connection active and my pi-hole is the DNS, every web request will go through the pi-hole. If the IP address is inside the range of AllowedIPs, the connection will go through the tunnel to the service, otherwise, the connection will go through outside the wg tunnel.

    Allowed ips = 10.x.x.0/24 - only connects the clients and server together

    Allowed ips = 0.0.0.0/0 - sends everything through the VPN, and connects the clients and server together.

    Do the top one, that’s how TS works.