Hi all,

I am running proxmox on a mini PC with a handful of services in my stack. I also run NPM in an LXC to reach my services through my domain name (service.domain.tld).

For my Arr related stuff, I use Usenet, and everything runs through a VPN.

I have three services which are public. Jellyfin, Seer and BookOrbit (for syncing Kobos).

Currently I have no security besides the built in login managers from the services, but I am considering setting up Authentik. I know I’m asking for trouble with my current set up.

I have elderly and extremely tech averse family members who live in two countries other than me, so tech support can be a challenge.

A lot of people suggest running a VPN, but it would be difficult for my family and I don’t know how to make it work syncing our Kobos with BookOrbit.

I’ve also seen some posts about tunneling to a VPS somewhere and users can connect to the VPS without a VPN.

I feel this question has been asked several times, and I tried searching here and on the internet in general, but my knowledge is not good enough to use the right terms and to get something that is idiot proof.

Any suggestions on best practices or links to guides you recommend would be much appreciated. Also, what EU based affordable VPS would you recommend?

  • wr2623@midwest.social
    link
    fedilink
    English
    arrow-up
    2
    ·
    19 hours ago

    Are your exposed services all on their own ports externally, or behind a reverse proxy?

    Putting them behind a reverse proxy makes sure that attackers at least need to know the correct hostname to access your service.

    This is security by obscurity which isn’t proper security but it means that all of the port scanners out there likely won’t know your jellyfin server exists when a vulnerability for jellyfin is released.

    If you use let’s encrypt or something similar be aware that all issues certs show up in a public log so attackers like to harvest that log as a list of valid domain names. Switch those certs to wildcards so that you aren’t advertising those valid hostnames.

    There are often options in reverse proxies, or sometimes your router to do geo based blocking. If you can limit connections to your local country only you eliminate huge portions of the botnets out there.

    Combining this with auto updates/reboots on your services is probably enough to keep you safe, but if you want to really secure things a separate DMZ vlan for your services to prevent an attacker from compromising additional services on your LAN.

    The more network segmentation you can do the better. An ideal setup is every app/container in its own network/ACL that only allows traffic to the specific network devices that it needs to talk to. This is a lot to manage if you do this with your router/vlans. Containers orchestrators (i.e. k8s) make this easier, but don’t protect you from kernel level exploits to break out of the containers. I believe proxmox has VM level ACLs now so you could skip the vlans and do your segmentation at that level instead.

    • neo2478@sh.itjust.worksOP
      link
      fedilink
      English
      arrow-up
      2
      ·
      19 hours ago

      I’m using NPM as a reverse proxy with let’s encrypt certs. I did not know about the public log.

      I have to look into hiwvto best segment my network given my hardware, and I think about deploying NetBird.

      Thanks a lot for the advice! Lot’s to read about.

  • heyeddi@lemmy.world
    link
    fedilink
    English
    arrow-up
    18
    arrow-down
    2
    ·
    7 days ago

    Get Jellyfin off the open internet. For family who’ll never install a VPN app, the setup that holds up is WireGuard on their router, or Tailscale on whatever TV box they use, set up before it ever ships to them. They never see it. If something has to stay public, CrowdSec plus Pocket-ID is a lot lighter than Authentik for three users. I’m building a home box that ships locked down like this by default, so I’m curious: which broke first for your family, remote access or the logins?

      • Appoxo@lemmy.dbzer0.com
        link
        fedilink
        English
        arrow-up
        4
        ·
        6 days ago

        Agreed.
        Secure it properly and you wont be pwned instantly.
        My setup:
        WAN -> OPNsense -> CrowdSec on FW and docker server -> Traefik -> Authelia middleware -> Jellyfin.

        I also have a geoblock active on the Cloudflare domain and directly on my opnsense.
        Most datacenter ASNs are also blocked. They don’t need to connect to me.

        Yes, first party apps are broken but the browser works good enough and if I meed it, I have a VPN for myself.
        Relatives get web browser or I’ll consider a S2S VPN setup.

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

      How would you handle a mother in law at a retirement community with a Roku and no access to the router that serves the condo?

  • peregus@lemmy.world
    link
    fedilink
    English
    arrow-up
    4
    ·
    5 days ago

    Never call yourself an idiot. Not a good IT engineer? (Just saying, I don’t know you) That doesn’t make you stupid at all.

  • Seldon@discuss.tchncs.de
    link
    fedilink
    English
    arrow-up
    11
    ·
    7 days ago

    I use Pangolin on a kinda cheap VPS on Hetzner (they’re now a bit too pricey), and route my services through Site Connectors (Newt, it’s called). Dealing with opening my firewall is a pain I don’t wanna think about, but Pangolin creates a websocket and can do NAT traversal from the Site Connector, so no swiss-cheesing your firewall.

    It’s nice because you can contain different services with VLANs to further segment and protect your network, and each Site Connector can work for many services (if there’s no firewall rules restricting it/VLANs) or you can put a Site Connector on each server individually, if segmentation is important to you.

          • Seldon@discuss.tchncs.de
            link
            fedilink
            English
            arrow-up
            3
            ·
            6 days ago

            Awesome, good to hear. Just a reminder that I forgot when I sent that link: double-check the Tutorial, it might have slightly outdated information. But a few lessons I learned when setting it up:

            Pangolin uses its own auth. You can use a OIDC provider if you like, but you have to set it up. I use TinyAuth in conjunction because I have so few users.

            To bypass auth on Pangolin, you must disable it and it will appear “Unprotected”. This helps with mobile apps, which don’t know how to deal with third-party login screens, but it leaves the login screen of whatever server you’re running (like Jellyfin) accessible by everyone. So something more hardened as your OIDC provider at the frontend help. Although lots of apps, again like Jellyfin, don’t have native OIDC login.

            The solution would be to route it with Private Resources, which are zero-trust connections. Great for a few people on your network, but it requires you setting up the Client app to access the Pangolin network. I’ve had issues with DNS on Android before, but your problems may vary.

            If you have any more questions, let me know. I’ve been using Pangolin for only about a year, but I think I learned enough to help.

    • neo2478@sh.itjust.worksOP
      link
      fedilink
      English
      arrow-up
      3
      ·
      6 days ago

      At least the backup part I think I got. I do local backups in the mini PC, which get replicated to my NAS, which get backedup to backblaze (encrypted, because my photos and documents are also backed up there)

  • MonkderVierte@lemmy.zip
    link
    fedilink
    English
    arrow-up
    7
    ·
    6 days ago

    So the public services are purely for private use, to sync your mobile devices? You can install Wireguard on Android, send them over there. Though for e-reader, since they are Kobos (basically Android), you can trick it to install the app. Or even another launcher/book reader.

    • neo2478@sh.itjust.worksOP
      link
      fedilink
      English
      arrow-up
      4
      ·
      6 days ago

      Kobo uses its own OS, not Android unfortunately. But I just found a tailscale plugin for it, so will try that

      • Evotech@lemmy.world
        link
        fedilink
        English
        arrow-up
        3
        ·
        5 days ago

        Install Koreader. Then install the bookorbit plugin

        It’s very easy and reversible. And its really good

      • MonkderVierte@lemmy.zip
        link
        fedilink
        English
        arrow-up
        1
        ·
        6 days ago

        Yeah, not “Android” like Amazons’ is not Android; all based on AOSP but not certified for Play Store. Or is it depending on the device in Kobo, do they use something else too? The ones i know (Leaf, Note) have the not-Android ROM.

        • PerogiBoi@lemmy.ca
          link
          fedilink
          English
          arrow-up
          3
          ·
          6 days ago

          Kobo runs a light linux software called NickelOS on an esp32 board. No android at all. No ability to instal apks. Its not even AOSP.

          One can install a custom OS over top called KOreader which expands its usability and offers tons of community led plugins.

          • surewhynotlem@lemmy.world
            link
            fedilink
            English
            arrow-up
            2
            ·
            6 days ago

            I hate our kobos. The app is shit. Total waste of money.

            But this gives me hope. I’m going to play with this.

            • PerogiBoi@lemmy.ca
              link
              fedilink
              English
              arrow-up
              4
              ·
              6 days ago

              I love my kobo precisely because there’s a huge community behind KOreader. Lots of YouTube tutorials, lots of flexibility. My kobo kept dying at like 50% battery and I just assumed it was a bad battery. Turns out NickelOS was trying to cache a book infinitely in the background so the battery calibration was wildly off because it never properly achieved a sleep state when powered down.

              I left it sitting for a year and a half. Charged it for a full day to balance the cells, copy pasted the files needed for KOreader, changed a config file so that NickelOS would not cache items in hidden folders, and then threw all my epubs onto a hidden folder called “. books” and boom.

              New life in my kobo. I use it daily now. Battery is accurate to 20% (then it sorta doesnt turn back on but whatever). Fair warning though because KOreader is so expansive that its a rabbit hole. UI takes getting used to but the customizability is huge and it runs more efficiently without bloat and you can even use LocalSend to wirelessly push epubs from any device that can run LocalSend to the Kobo so you never have to plug it in again.

              I sync book progress from my Xteink X4 pro to my Kobo Clara HD using KOSync and have my own little KOSync instance running on my homelab (but you can just use the public instances if you want).

    • Appoxo@lemmy.dbzer0.com
      link
      fedilink
      English
      arrow-up
      2
      ·
      edit-2
      6 days ago

      Issue:
      Most clients we instruct on homeoffice usage with vpns are already unable to remember the workflow: VPN -> (wait until green for connected) -> open work app -> Do work -> close work app -> disconnect vpn.

      Now you also may not want to tunnel all traffic (if you don’t have a VPS with symmetric Gbit and unlimited traffic) so you’d need to set up split-tunneling and/or limit the apps allowed for the tunnel (works in android).

      Honestly? It would be easier to set up a S2S split-tunnel VPN with wireguard on the relatives router.

      • unique_hemp@discuss.tchncs.de
        link
        fedilink
        English
        arrow-up
        4
        ·
        6 days ago

        You can just specify AllowedIPs in the wireguard client config to route only traffic to your services through the VPN, works great.

        • Appoxo@lemmy.dbzer0.com
          link
          fedilink
          English
          arrow-up
          3
          ·
          6 days ago

          Yes. Split-tunneling…
          But if you are really hardcore about restrictions and would need to update the profiles it will be a pita…
          Scheduling stuff is annoying ;-;

  • just_an_average_joe@lemmy.dbzer0.com
    link
    fedilink
    English
    arrow-up
    5
    ·
    6 days ago

    Not sure why nobody here recommended netbird reverse proxies. It has crowdsec out of the box plus blocking/allowing ip ranges. On top of it, it also support pin or password based auth, so you can have 2 layers of auth.

    But i haven’t hosted jellyfin yet, only opencloud and a couple others. Haven’t seen anybody pwning it based on the logs

  • phobiac@lemmy.world
    link
    fedilink
    English
    arrow-up
    4
    ·
    6 days ago

    For whatever it is worth to you I’ve hardened my jellyfin docker compose this way. I’m obscuring some things in this that are local to my network.

    The container is read only. It mounts the media read only. It should be fairly isolated from getting privileges it shouldn’t have. The only things lost in this setup are the ability to delete media from a jellyfin client (something I never do) and the ability to manipulate files directly stored with the media. I use bazarr for subtitles so don’t need jellyfin to download them and I don’t keep trickplay or any other jellyfin metadata related files alongside the media. I feel pretty confident with this that even if the jellyfin codebase had a serious 0 day that the worst I’d lose is metadata and server setup, and important config files I have backing up to another machine.

    I’m sure there’s things I’ve overlooked with this setup so I’m very open to being told there’s a better way to do something.

    services:
      jellyfin:
        image: jellyfin/jellyfin:latest
        container_name: jellyfin
        restart: unless-stopped
        mac_address: OBSCURED # see macvlan note below
        hostname: jellyfin
        user: ${PUID}:${PGID}
        group_add:
          - "992" # my render group id
        security_opt:
          - no-new-privileges:true
        cap_drop:
          - ALL
        read_only: true
        tmpfs:
          - /tmp:exec,nosuid,nodev # exec some plugins can write to /tmp, no-nosuid,nodev for security
        networks:
          macvlan:
            ipv4_address: OBSCURED
        healthcheck:
          test: [ "CMD", "curl", "-fsS", "http://127.0.0.1:8096/health" ]
          interval: 1m
          timeout: 10s
          retries: 3
          start_period: 30s
        environment:
          - TZ=${TZ}
          - JELLYFIN_PublishedServerUrl=OBSCURED
          - JELLYFIN_DATA_DIR=/config/data # consolidates these dirs under /config, migrated from linuxserver.io setup
          - JELLYFIN_CONFIG_DIR=/config
          - JELLYFIN_LOG_DIR=/config/log
          - JELLYFIN_CACHE_DIR=/config/cache
          - HOME=/config
        volumes:
          - ./jellyfin:/config
          - ${MEDIA}:/media:ro
        devices:
          - /dev/dri/renderD128:/dev/dri/renderD128 # isolate to just the renderD128 device
        device_cgroup_rules:
          - 'c 226:128 rw' # further limits access for the renderD128 device
    
    networks: # I went with macvlan to preserve mdns for local discovery, otherwise you need to use host level networking
      macvlan:
        driver: macvlan
        driver_opts:
          parent: OBSCURED # Replace with host network interface name (find via: ip route | grep default)
        ipam:
          config:
            - subnet: OBSCURED/24 # Your local LAN network CIDR
              gateway: OBSCURED # Your local router IP address
    
  • Treczoks@lemmy.world
    link
    fedilink
    English
    arrow-up
    4
    ·
    7 days ago

    Ask yourself: is there any service that really, really needs to be public? Or is this only about availability for you or a very limited group (family, friends), which could be implemented via a VPN solution?

    • neo2478@sh.itjust.worksOP
      link
      fedilink
      English
      arrow-up
      3
      ·
      7 days ago

      It’s just for family, but elderly family in two different very far away countries, across multiple devices.

      • Guiorgy@lemmy.ml
        link
        fedilink
        English
        arrow-up
        2
        ·
        6 days ago

        WireGuard is stateless, so running it “on” 24/7 is cheap, set it up once for them and leave it on, ideally they wouldn’t notice a thing.

      • Treczoks@lemmy.world
        link
        fedilink
        English
        arrow-up
        2
        ·
        7 days ago

        See that you get a solid VPN bridge, much better than trying to fix a ton of different services if things go awry.

  • GreenKnight23@lemmy.world
    link
    fedilink
    English
    arrow-up
    6
    arrow-down
    2
    ·
    7 days ago

    I have three services which are public. Jellyfin, Seer and BookOrbit (for syncing Kobos).

    1000004791

    don’t expose services to the internet. expose a proxy.

    Imagine if your house had doors to the outside for every room in your house. not very secure, right?

    I’m going to hope when you mentioned NPM you were referring to nginx proxy manager.

    also, use a separate host for your proxy that is firewalled off from everything else on your network other than the host with your services and only on those specific ports. it doesn’t have to be powerful, just has to have a fast network connection. I wouldn’t use anything less than 1gbps. you could vlan as well, but that would require advanced routing or a second NIC for your services host. don’t forget to firewall your services host off the rest of your network.

    finally, monitor the shit out of that proxy host. use SIEM tools like graylog, wazuh, splunk, etc. you cannot make an impenetrable fortress, it’s only a matter of time before you experience a penetration. setting up proper logging and alerting is imperative to securing your network.

    • neo2478@sh.itjust.worksOP
      link
      fedilink
      English
      arrow-up
      2
      ·
      7 days ago

      Yes everything goes through nginx proxy manager and I only forward port 443 in my router.

      I guess running NPM on a raspberryPi could work?

      • GreenKnight23@lemmy.world
        link
        fedilink
        English
        arrow-up
        2
        ·
        7 days ago

        it should as long as it’s got that 1gbps Ethernet. 100mbps just won’t be enough for video streaming with jellyfin.

        having it separate also allows you to patch routinely with minimal downtime.

  • airgapped@piefed.social
    link
    fedilink
    English
    arrow-up
    3
    ·
    7 days ago

    There is some great advice in here but I wanted to throw my two cents in by saying bollocks to Hetzner, they get circlejerked far too much. Go with Contabo instead, 4 core 8GB VPS with 100GB SSD is $5 a month right now and has a generous 30TB/month bandwidth allowance.

    • neo2478@sh.itjust.worksOP
      link
      fedilink
      English
      arrow-up
      1
      ·
      6 days ago

      Because you quoted in dollars I almost dismissed them for not being European, but then I saw they are German, but have servers all over the world. I’ll check them out, thanks.

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

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

    Fewer Letters More Letters
    AP WiFi Access Point
    DNS Domain Name Service/System
    NAS Network-Attached Storage
    NAT Network Address Translation
    SSD Solid State Drive mass storage
    SSH Secure Shell for remote terminal access
    VPN Virtual Private Network
    VPS Virtual Private Server (opposed to shared hosting)
    nginx Popular HTTP server

    9 acronyms in this thread; the most compressed thread commented on today has 8 acronyms.

    [Thread #151 for this comm, first seen 30th Oct 2026, 19:00] [FAQ] [Full list] [Contact] [Source code]

  • brewery@feddit.uk
    link
    fedilink
    English
    arrow-up
    3
    ·
    7 days ago

    Hetzner is great as a provider, highly recommend.

    I use authentik with fail2ban, crowdsec and ufw. I use netbird to act as a VPN between different servers - most services need users to login through there but have a couple on the internet. I also restrict countries to ones my clients are on and update when im going on holiday.

    I use caddy as my reverse proxy with rate limits and crowdsec. I moved from NPM just to try it and liked it.

    SSH is on a different port and restricted to keys only. I also setup ntfy to notify my phone if there are logins (to check it’s just me).

    I use unattended upgrades for security but try to upgrade frequently the servers and docker services.

  • Possibly linux@lemmy.zip
    link
    fedilink
    English
    arrow-up
    3
    arrow-down
    7
    ·
    7 days ago

    Don’t put them on the internet. Seriously, don’t put stuff on the internet. These days critical CVEs are coming out weekly and it is unlikely that you even detect the compromise.

    What is your use case? Maybe there is a better way

    • neo2478@sh.itjust.worksOP
      link
      fedilink
      English
      arrow-up
      2
      arrow-down
      1
      ·
      7 days ago

      Family members on two different countries connect to my Jellyfin server from several devices (phones and android boxes), seer for requests, and BookOrbit for their ereaders.

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

        You need a VPN. It will cause inconveniences but the way currently have it setup is highly vulnerable to attack. I would look into something like Netbird or just a plain Wireguard VPN. If they are connecting primarily from home you could always setup a simple proxy device that forwards connections over a VPN from the local network.

        Security should absolutely come first. If you can’t provide basic security I wouldn’t recommend hosting anything especially for other people.