Assuming the user will not be connecting over vpn, but is both remote and non-technical, how would you expose Jellyfin to them securely?

  • 8j1obzlb@piefed.social
    link
    fedilink
    English
    arrow-up
    0
    ·
    3 months ago

    I agree with the folks saying reverse proxy of some kind + WAF. That way end users don’t have to deal with the VPN, but your home system is not directly exposed.

    I’ve been doing something similar with SSH local port forwarding and a $5/month VPS. Haven’t come anywhere close to my network quotas, and performance has not been an issue for home use with 2-5 concurrent users most of the time. I forward the local caddy ports to unprivileged ports/user on the VPS, then use the firewall on the VPS to forward that port to 443 and lock down the rest.

    • FreedomAdvocate@lemmy.net.au
      link
      fedilink
      English
      arrow-up
      0
      ·
      2 months ago

      With a single year of those VPS costs you could have just bought a plex lifetime pass on sale lol

      Avoiding paying a one off fee or subscription by paying a different subscription for a more complex and worse product is amazing.

    • 8j1obzlb@piefed.social
      link
      fedilink
      English
      arrow-up
      0
      ·
      3 months ago

      That said, VPN would be much more manageable if I was trying to really push performance or scale out the network.

  • androidul@lemmy.world
    link
    fedilink
    English
    arrow-up
    0
    ·
    3 months ago

    afaik but I’m not sure, Jellyfin lacks support for OIDC AuthN which is a clear sign that you cannot expose this publicly.

  • Seefoo@lemmy.world
    link
    fedilink
    English
    arrow-up
    0
    ·
    2 months ago

    You can do a reverse proxy + authelia (or other auth service). It’s still more risky than a VPN IMO, buts wayyyy better than some of the other options in this thread

  • DecentM@lemmy.blahaj.zone
    link
    fedilink
    English
    arrow-up
    0
    ·
    3 months ago

    Not at all, there’s legal risk if you’re hosting your blurays. Cloudflare even explicitly forbids such use. VPN or nothing imo.

    • imhungry@leminal.spacedeleted by creator
      link
      fedilink
      English
      arrow-up
      0
      ·
      3 months ago

      Wow, Cloudflare is against piracy? Every single site I’ve ever seen in my life is registered with Cloudflare and uses their DNS with the exception of PTB I believe.

      • DecentM@lemmy.blahaj.zone
        link
        fedilink
        English
        arrow-up
        0
        ·
        3 months ago

        Not sure about that, I think it’s more just that they don’t want people streaming terabytes of traffic through their edge.

      • Bazoogle@lemmy.world
        link
        fedilink
        English
        arrow-up
        0
        ·
        edit-2
        2 months ago

        They have to be. They have to at least somewhat comply with laws to avoid lawsuits and fines

  • Encrypt-Keeper@lemmy.world
    link
    fedilink
    English
    arrow-up
    0
    ·
    2 months ago

    The biggest problem with that Jellyfin to this day is that you can’t.

    Seems like every new open source selfhosted app implements OIDC compatibility, but for some reason, I can only assume is technical debt, Jellyfin hasn’t.

    • Strit@lemmy.linuxuserspace.show
      link
      fedilink
      English
      arrow-up
      0
      ·
      2 months ago

      Jellyfin had a third party plugin for OIDC. It was archived recently, but I heard Jellyfin has plans to implement it directly into the software. 🤞

        • Strit@lemmy.linuxuserspace.show
          link
          fedilink
          English
          arrow-up
          0
          ·
          2 months ago

          Mobile clients should use QuickConnect for it (statement by the sso plugin maintainer). Else it should work with everything that uses the WebUI.

          • Encrypt-Keeper@lemmy.world
            link
            fedilink
            English
            arrow-up
            0
            ·
            2 months ago

            Quick connect is not SSO. Because the topic is about non-technical end user friendly solutions, this isn’t a great one because this requires your user to login using a web browser on a different device and then use that for the quick connect and it’s just more clunky than it should really be.

            It’s honestly easier in this situation to just configure your end users device with a mesh VPN like Tailscale or Netbird and then all they ever have to do is login with whatever password you gave them.

    • kiol@discuss.onlineOP
      link
      fedilink
      English
      arrow-up
      0
      ·
      2 months ago

      What exactly about jellyfin makes this oidc style access more difficult to manage?

      • Encrypt-Keeper@lemmy.world
        link
        fedilink
        English
        arrow-up
        0
        ·
        2 months ago

        Jellyfin just doesn’t have it, period. There’s a third party plugin that will kind of tack it on to the Webui, but none of the Jellyfin apps will work with it.

  • quips@slrpnk.net
    link
    fedilink
    English
    arrow-up
    0
    ·
    2 months ago

    A reverse proxy is what you are looking for. I recommend Caddy.

    You’ll also need a domain, but they can be had for very cheap.

  • frongt@lemmy.zip
    link
    fedilink
    English
    arrow-up
    0
    ·
    3 months ago

    See if there are any apps that will handle the VPN tunneling transparently, then provide the web interface, all in one.

    If you can’t find any that work like you want, I would put an authenticating reverse proxy in front of jellyfin. But last time I tried that, it only half worked. I don’t know if that’s changed.

    Worst case, a reverse proxy that only exposes the necessary endpoints. Or a WAF that can block known attacks.

    In any case, you should have a firewall rule as narrow as possible to only limit access to them. Static IP address if possible, then subnet, then ASN. Whatever is the most restrictive but still works.

  • pnelego@lemmy.world
    link
    fedilink
    English
    arrow-up
    0
    ·
    2 months ago

    To be totally honest I’m not sure you can harden jellyfin enough for public Internet exposure without also breaking basic functionality of the platform.

    This is why everyone is always pushing so hard for a VPN/Tailnet of some kind. The public internet is a bit to much of a wild west to be exposing arbitrary services to it unless you really know what you’re doing.

      • Evotech@lemmy.world
        link
        fedilink
        English
        arrow-up
        0
        ·
        2 months ago

        I just type the URL

        I have Cloudflare set up without Auth. Just region locked to my country

        So it’s just a solid reverse proxy with a bunch of features and an added layer with white listing.

        I know whitelisting isn’t security per say but it’s good enough

        • PeriodicallyPedantic@lemmy.ca
          link
          fedilink
          English
          arrow-up
          0
          ·
          2 months ago

          Idk if geo whitelisting is really good enough. I can’t speak for OP, but I’m in the same position and I don’t. I had high hopes for the post but everyone seems to just brush over the “secure” part

            • PeriodicallyPedantic@lemmy.ca
              link
              fedilink
              English
              arrow-up
              0
              ·
              2 months ago

              I’m afraid of security bugs in the software I’m using, so that containers don’t contain, read-only doesn’t prevent writing, mounting directories doesn’t restrict access to those directories, etc.

              I’m a nobody, I can’t imagine anyone targeting me or my random domain, but I can imagine getting swept up in a net of attacks of opportunities targeting hosted software with known vulnerabilities, or injected supply chain vulnerabilities, so I want to reduce my attack surface as much as I can (while still actually letting the people I want to access it actually access it)

    • BakedCatboy@lemmy.ml
      link
      fedilink
      English
      arrow-up
      0
      ·
      3 months ago

      How do you get apps through something like that? Do you have to open your browser and hit the URL periodically to handle auth there and it just remembers your IP?

        • BakedCatboy@lemmy.ml
          link
          fedilink
          English
          arrow-up
          0
          ·
          3 months ago

          Gotcha I see, just checking if I missed something since that was the issue last time I tried doing something like that. These days I just yolo it and expose jellyfin to the public Internet.

      • clb92@feddit.dk
        link
        fedilink
        English
        arrow-up
        0
        ·
        3 months ago

        If there was a Jellyfin app that supported adding a custom header to the server connection, you could set your reverse proxy to just let the connections with that secret key header through, and make everything else go through the extra auth middleware. But as far as I know, none of the Jellyfin apps have that feature, even though it has been requested. Lots of other selfhosted apps do have the feature though, and I use it in a few places as well.

      • anon_8675309@lemmy.world
        link
        fedilink
        English
        arrow-up
        0
        ·
        2 months ago

        Would you need to? Are apps a viable vector in? Basic auth in front of web ui does make sense though.

        • BakedCatboy@lemmy.ml
          link
          fedilink
          English
          arrow-up
          0
          ·
          2 months ago

          What do you mean viable? The web UI is just an app that is delivered to your browser, it makes more or less the same API requests as an app would make, so IDK why the risk would be lower with an app?

          If an attacker can access the login endpoint for example to brute force or dictionary attack, it doesn’t matter if the web UI is or isn’t accessible if the login endpoint it uses is exposed for an app. The attacker could serve their own copy of the web UI and proxy requests to the API your app connects to. Blocking the html from being served doesn’t make a difference.

            • BakedCatboy@lemmy.ml
              link
              fedilink
              English
              arrow-up
              0
              ·
              2 months ago

              That’s exactly the point I’m getting at. Putting an auth wall doesn’t work with many apps, and if you add exceptions to the API then you’re not really protecting anything.

                • BakedCatboy@lemmy.ml
                  link
                  fedilink
                  English
                  arrow-up
                  0
                  ·
                  2 months ago

                  Yes that’s what I would like to advocate for. I did something similar with LunaSea, but often people suggest doing that with Jellyfin and are not aware that almost no apps support it, and that adding exceptions for the API makes you basically as secure as not having it. But people tend to get very defensive when you try to tell them that something won’t work, so I try to phrase it as a question to see if I can get them to understand what the limitations are in a way that’s less confrontational.

      • halcyoncmdr@piefed.social
        link
        fedilink
        English
        arrow-up
        0
        ·
        3 months ago

        You can set pangolin to allow access to an entire resource or just certain paths without the front auth, instead relying on the built in auth.

        Your random plex/emby/jellyfin server isn’t going to be a huge target and the built in auth is good enough for the limited access your media system should have.

        • BakedCatboy@lemmy.ml
          link
          fedilink
          English
          arrow-up
          0
          ·
          3 months ago

          Wait so if you’re gonna allow access without authentication then why bother putting pangolin in front of jellyfin? Does it help in some other kind of way? I don’t really get how it helps without interfering with apps accessing jellyfin.

  • Depends on what you mean by “secure.” My personal setup is Jellyfin LXC on proxmox --> Wireguard to VPS -> Nginx reverse proxy on VPS.

    This setup relies somewhat on Jellyfin’s auth, but I’m comfortable with that risk. The LXC is blocked from sending local traffic on my network by firewall rules. Yes, someone could exploit a vulnerability in Jellyfin (though looking through the CVEs I’m not overly worried about that), then escape the LXC and fuck with my server. But that’s a lot of work for no profit.

    For more protection (in sense of reducing traffic that even interacts with your server), I’d recommend getting a wildcard cert for the domain so that the actual subdomain jellyfin is on is undisclosed to anyone not using your service.

    Security isn’t about making everything impregnable, it’s about making attacks more trouble than they’re worth. Otherwise, we’d all live in fortified bunkers surrounded by landmines. 🙃

    • eli@lemmy.world
      link
      fedilink
      English
      arrow-up
      0
      ·
      3 months ago

      How much bandwidth is used via the VPS in this instance? I’ve seen most VPS in the USA have a limit of 1TB of bandwidth.

      How many users are you sharing with?

      I know Hetzner does 20TB bandwidth, but that is only EU servers as far as I know.

      • I have a very cheap ($11/yr) us-based vps through racknerd I got via low end box. I’ve got 12 users but only 5 really active ones and I’ve never come close to hitting the 1tb transfer. I serve several services through that one vps (all just reverse proxy to my homelab).

        I did just pick up another u.s. based vps through low end box the other day- $12/yr and unmetered Gbps. 1 CPU only, but a reverse proxy doesn’t need a lot of compute. :)

    • atzanteol@sh.itjust.works
      link
      fedilink
      English
      arrow-up
      0
      ·
      3 months ago

      Your vps isn’t doing anything useful security wise… it’s just sending traffic directly to jellyfin.

      You’d get the same protection with just port forwarding to a local proxy in front of jellyfin. Or you could even leave out the proxy if you didn’t need it.

      • I’m aware of this (that’s why I described a potential breach as Jellyfin -> LXC escape). What it does provide me is a static IP to point my domain at that I don’t have to worry about updating via whatever DDNS service and that isn’t tied to my home address. That and the wireguard tunnel gives me plausible deniability should my ISP ever decide to enforce its rules against hosting servers. 😀

  • INeedMana@piefed.zip
    link
    fedilink
    English
    arrow-up
    0
    ·
    3 months ago

    If they could be using web UI (I’m not sure how a client would work with auth like that) then it kind of depends on how much hassle they can live with and how secure you want to be

    Simplest would be to use https://doc.traefik.io/traefik/reference/routing-configuration/http/middlewares/basicauth/
    You set up username and password and share those with the user. But it can be brute-forced

    Something more secure but also a bit more demanding would be some kind of email otp
    https://docs.goauthentik.io/add-secure-apps/flows-stages/stages/authenticator_email/
    Set up authentik to send time-limited link to their email that well let them through. But they would have to authenticate every time they access

  • Decronym@lemmy.decronym.xyzB
    link
    fedilink
    English
    arrow-up
    0
    ·
    edit-2
    3 months ago

    Acronyms, initialisms, abbreviations, contractions, and other phrases which expand to something larger, that I’ve seen in this thread:

    Fewer Letters More Letters
    HTTP Hypertext Transfer Protocol, the Web
    IP Internet Protocol
    Plex Brand of media server package
    VPN Virtual Private Network
    nginx Popular HTTP server

    4 acronyms in this thread; the most compressed thread commented on today has 13 acronyms.

    [Thread #311 for this comm, first seen 23rd May 2026, 22:30] [FAQ] [Full list] [Contact] [Source code]

  • rando@lemmy.ml
    link
    fedilink
    English
    arrow-up
    0
    ·
    3 months ago

    headscale + tailscale. U will need a very small vps for headscale though.

  • skeevy_scallops@feddit.online
    link
    fedilink
    English
    arrow-up
    0
    ·
    3 months ago

    call me crazy but I just use a couldflare tunnel since my domain is already provided through them. They make it really easy to add sub-domains attached to specific ports on the local machine and automatically adds the proper DNS entries. Additionally they have a ton of domain security/anti-bot measures you can set up.