Hello. I have just recently started with self hosting my media with Jellyfin… and I am LOVING it! I had been carrying around media players for decades, with everyone looking at me like an insane crank for not giving up on my hundreds of gigs of media for SAS things like spotify… now they’re jealous! We’ve come full circle!

Annnyway. Obviously, I want to access the server anywhere, and don’t want to just raw-dog an open port to the internet- yikes!

There are SO MANY ways and guides and thoughts on this, I’m a bit overwhelmed and looking for your thoughts on the best way to start off… it doesn’t have to be ‘fort knox’ and I am sure I’ll adjust and pivot as I learn more… but here are the options I know of (did I miss any?):

  • Tailscale VPN connection

  • Reverse Proxy with Caddy or similar (this is recommended as easy in the jellyfin official guides and thus is my current leading contender!)

  • Docker/VM ‘containerized’ server with permissions/access control

What are your thoughts on the beginner-friendly-ness and ease of setup/management of these? This is exclusively for use by me and my family, so I don’t need something that’s easy for anyone to access with credentials… just our handful of devices.

Please don’t laugh, but I’m currently hosting on a Raspberry Pi5 with a big-ass harddrive attached (using CasaOS on a headless Ubuntu Server). I know this is JANK as far as self-hosting goes, and plan to upgrade to something like NAS in the future, but I’m still researching and learning, and aside from shitty video transcoding, it’s working fine for now… Thank you in advance for your advice, help and thoughts!

  • buffing_lecturer@leminal.space
    link
    fedilink
    English
    arrow-up
    0
    ·
    5 days ago

    I don’t mean to question the sincerity of your post when I ask this. Did you use a LLM, like chatgpt, to edit/phrase your question? This style of writing is also used by humans, so I absolutely could be wrong. I am just checking my AI detection calibration.

    • Profligate_parasite@lemmy.worldOP
      link
      fedilink
      English
      arrow-up
      0
      ·
      2 days ago

      umm, no. This is just the way I write. I get what you mean, reading over it. It’s something about tone. Sadly, here we are where any generically “cheery” writing style seems suspect.

    • BlueÆther@no.lastname.nz
      link
      fedilink
      English
      arrow-up
      0
      ·
      5 days ago

      Look for the double em dash, chatGPT loves it.

      I have no real issue with someone passing a post through a LLM to expand on a thought or to help with English writing (as someone with dyslexia this can be very handy)

  • ohshit604@sh.itjust.works
    link
    fedilink
    English
    arrow-up
    0
    ·
    edit-2
    7 days ago

    I opted to remove Jellyfins default login form and require Keycloak for SSO, my Jellyfin instance is technically facing the internet but my reverse proxy has Fail2Ban in front of it blocking non-whitelisted IP’s, makes it easier to share with other people this way compared to having to explain VPN’s to non-tech savvy people,

  • ksyko@lemmy.world
    link
    fedilink
    English
    arrow-up
    0
    ·
    7 days ago

    I use netbird. I found it easy to setup and they also have an android app. You also get a neat URL for each device. I havent tried any other options apart fromthis and wireguard. Wireguard wasnt easy to setup for me.

  • non_burglar@lemmy.world
    link
    fedilink
    English
    arrow-up
    0
    ·
    7 days ago

    I think the big deciding factor is how many folks will be watching remotely.

    For my case, I use a VPN to tunnel back to my network and watch jellyfin that way. My son also lives away and watches jellyfin, but for him I simply punch a hole in my firewall for only his public ip, which doesn’t change much.

    This works for me, but had to host for any more ppl, I would likely go the caddy route.

  • bootstrap@slrpnk.net
    link
    fedilink
    English
    arrow-up
    0
    ·
    7 days ago

    I have used Tailscale for about a year now. Flawless for a small ecosystem and couple of people and doesnt expose anything.

    Bonus of routing all my traffic through pi-hole at home and then through VPN client on router

    • modular950@lemmy.zip
      link
      fedilink
      English
      arrow-up
      0
      ·
      7 days ago

      tailscale here as well. it’s honestly 2ezpz to set up, and that’s about it! this also allows you to access other services you may be hosting.

      you can also specify an exit node that your traffic will route through if you are connected to your tailnet. for example, if you had a VPN client on your home router, you could set a PC on that network as your exit node and your remote traffic through tailscale would ultimately hit your home network and then out through your PC -> VPN -> Internet setup.

    • thejml@sh.itjust.works
      link
      fedilink
      English
      arrow-up
      0
      ·
      7 days ago

      I second this. Especially for the PiHole access. Its also handy as it covers any of my self-hosted stuffs.

        • Quokka@mastodon.au
          link
          fedilink
          arrow-up
          0
          ·
          7 days ago

          @Profligate_parasite @thejml #PiHole sits in your network replacing your existing DNS server you may have configured. By using a specified blocklist(s) it’s mostly used to block adverts and malware sites. Can be very effectives. Can take a little tinkering, for example one side-effect for me was it blocking a local TV streaming app.
          To start with I put one on a free cloud provider, with a VPN from my router to it and played with it until I was happy.

  • ctry21@sh.itjust.works
    link
    fedilink
    English
    arrow-up
    0
    ·
    7 days ago

    I’ve tried tailscale and cloudflare tunnels in the past and ended up just using PiVPN to set up a WireGuard VPN on my Pi5. Tailscale for some reason was very slow for me, and cloudflare tunnels have a 100mb limit iirc which isn’t ideal for streaming. PiVPN is quite straightforward, it sets everything up for you and all you have to do is forward a UDP port. That was the bit I was most worried about, but, unless I’ve misunderstood something, because a UDP port will just ignore invalid requests to the outside world it will appear closed so it’s not very risky. It then generates a key for each device which you can scan from a QR code onto your VPN client. I have my phone set to auto-connect to the tunnel when I disconnect from my home wifi network and the tunnel is fast enough that I’ve accidentally turned off my phone’s wifi connection before and streamed a TV show through the tunnel over mobile data and not noticed any difference in speed.

    • bread@sh.itjust.works
      link
      fedilink
      English
      arrow-up
      0
      ·
      7 days ago

      I hadn’t thought to automate connecting to Wireguard when not on my home network, that’s a good call. I’ve just set up Tasker on my phone and tablet.

  • BaroqueInMind@piefed.social
    link
    fedilink
    English
    arrow-up
    0
    ·
    edit-2
    7 days ago

    I hide it behind Cloudflare. I assume that since most of the world pays them for domain security, and if Cloudflare goes down so does half the internet, I thought to try them out. Best decision I’ve made. They blocked substantial DDoS attempts on my IP, a fuck ton of malicious web scrapers that attempt CVEs, and they also allow me to have very specific users access to my domain using complex allow lists, zero-trust, and DNS over HTTPS.

      • Spaz@lemmy.world
        link
        fedilink
        English
        arrow-up
        0
        ·
        7 days ago

        Others have recently reported being been banned if more than 1 streaming. Fyi

        • Spaz@lemmy.world
          link
          fedilink
          English
          arrow-up
          0
          ·
          7 days ago

          Others have recently reported being been banned if more thab 1 streaming. Fyi

      • AmazingAwesomator@lemmy.world
        link
        fedilink
        English
        arrow-up
        0
        ·
        7 days ago

        not the person you replied to, but i have been using cloudflare zero trust for my streaming needs; have not gotten a complaint yet.

        just make sure you have the upload bandwidth.

        • Spaz@lemmy.world
          link
          fedilink
          English
          arrow-up
          0
          ·
          7 days ago

          Others have recently reported being been banned if more than 1 streaming. Fyi

  • glizzyguzzler@piefed.blahaj.zone
    link
    fedilink
    English
    arrow-up
    0
    ·
    7 days ago

    Reading jellyfin’s issues it’s clear it’s web ui and API cannot be allowed to talk to the general internet.

    I’d push for a VPN solution first. Tailscale or wireguard. If you’re happy with cloudflare sniffing all traffic and that they make take it away suddenly someday use their tunnel with authentication.

    The only other novel solution I’d suggest is putting jellyfin behind an Authentik wall (not OIDC, though you can use OIDC for users after the wall). That puts security on Authentik, and that’s their only job so hopefully that works. I’d use that if VPN (tailscale or wireguard) are problematic for access. The downside is that jellyfin apps will not be able to connect, only web browsers that can log into the Authentik web ui wall.

    Flow would go caddy/other reverse proxy -> Authentik wall for jellyfin -> jellyfin

    I’d put everything in docker, I’d put caddy and Authentik in a VM for a DMZ (incus + Zabbly repo web ui to manage the VM), I’d set all 3 in the compose to read-only, user:####:####, cap-drop all, no new privileges, limited named networks.

    Podman quadlets would be even better security than docker, but there’s less help for that (for now). Do docker and get something working to start, then grow from there

    • Profligate_parasite@lemmy.worldOP
      link
      fedilink
      English
      arrow-up
      0
      ·
      7 days ago

      Thanks for your comment. There are several things/products/methods you mention that I’m not familiar with and/or don’t understand:

      Authentik Wall OIDC DMZ Incus Zabbly “in the compose” cap-drop all Podman quadlets

      As I mentioned, I’m new here. I could just put each of these in duckduckgo in succession, but do you have a particular guide or link that describes any of this for someone less familiar with the process than yourself?

      • glizzyguzzler@piefed.blahaj.zone
        link
        fedilink
        English
        arrow-up
        0
        ·
        6 days ago

        Other user summarized very well.

        No I have accrued knowledge of those things over time, no one stop shop that I know of. But knowing these things exist and their general use are half the battle!

        I was lazy with the “Authentik wall” because I couldn’t remember what they called it. It is the “proxy” option in their “provider” section https://docs.goauthentik.io/add-secure-apps/providers/proxy/ . There are many guides for Authentik at least, it’s complicated but you only need to do specific things for it to work - and most tell you and the rest are applicable via matching similar looking things.

        OIDC is an open login protocol many things support. I think jellyfin can use it with a plugin, but keep in mind that regular user creation still exists so it’s not a security and convenience feature like for most things, it’s just a convenience feature.

        DMZ is de militarized zone. I used the acronym to mean a gap between your system and a system that deals directly with the outside Internet. That gap is the VM separation. LXC containers and docker containers do not have that separation, I deploy Internet-facing stuff in a VM as extra insurance in case they get zero-day-hacked; it means the rest of my server will hopefully not get ransomwared.

        Incus is an alternative to proxmox, but less needy since it doesn’t require its own Linux kernel. Zabbly is a package source (vs built-in Debian sources) that has the web ui in it. See their documentation for installation, it tells you how to add the Zabbly package; use the “stable” version if you do use incus.

        “In the compose” means in the docker-compose.yml file.

        ‘Cap-drop: all’ is an entry you can make in the docker-compose file. It increases security. All of the ones I listed are entries you can add to the docker-compose file. You’ll likely need a

        tmpfs: /tmp

        In the compose file you use read only.

        Podman is the superior alternative to docker, and Podman quadlets are a way to deploy containers (they have a couple ways, like docker does - you don’t need a docker-compose.yml file to run docker containers). But it’s new and doesn’t have the community knowledge support via searching like docker does.

        Hope that helps!

      • MaggiWuerze@feddit.org
        link
        fedilink
        English
        arrow-up
        0
        ·
        6 days ago

        The general jist is, do not expose Jellyfin to the internet. Neither via a port nor through a reverse proxy. Its simply not build secure enough for that.

        Use docker to make the setup easier, then use tailscale or whatever VPN solution to allow users from outside your network to access it.

        All of the additional authentication solutions mentioned break client compatibility. Then you could only watch through a browser.

        Install docker, deploy Jellyfin to it, test it. They both have good guides on their respective websites.

    • Possibly linux@lemmy.zip
      link
      fedilink
      English
      arrow-up
      0
      ·
      edit-2
      7 days ago

      I’m working on deploying Client side certificates that are validated by Caddy

      Do you know if that will break applications?

      • glizzyguzzler@piefed.blahaj.zone
        link
        fedilink
        English
        arrow-up
        0
        ·
        7 days ago

        I am not familiar with deploying client side certificates unfortunately. I hope it works, if the certificate is at the OS level and the application will use it, I feel it will work… not sure, in-browser feels straight forward at least

  • nfreak@lemmy.ml
    link
    fedilink
    English
    arrow-up
    0
    ·
    7 days ago

    Pangolin with an Authentik login required. Jellyfin’s set up with OIDC too but that’s more for convenience than security (especially since password auth doesn’t seem possible to disable, so it’s just hidden with CSS which does jack shit for security).

    I’m paranoid so I only expose 3 services total without Pangolin/Authentik in front of them: Authentik itself, headscale, and navidrome’s rest endpoint (the last one skeeves me a bit but it’s mandatory for it to work remotely in the situations I want it, like a web player on work machines). Anything else I personally need remote access to, I can get through tailscale - Pangolin for me covers friends and family usage and a few niche situations.

  • Egonallanon@feddit.uk
    link
    fedilink
    English
    arrow-up
    0
    ·
    7 days ago

    Caddy + crowd sec + some kind of auth solution is what I’m aiming for though I haven’t got authentik working with it yet so I haven’t opened it up yet. I wouldn’t want to do jellyfish without the auth solution though as there local stuff isn’t so robust.

    VPN in and a few local users would be the most secure if you haven’t got too many folks connecting.