So I’m relatively new to server hosting. (But experienced with remote web hosting from providers.) After about a year of fighting to run Nextcloud on a hosting company and finally losing everything from the cPanel vulnerability a few months ago, I broke down and launched my own home server. I’m looking for advice to maximize security.

CachyOS Linux with ClamAV Docker via Portainer Nextcloud (E2EE), Immich, DocuSeal and NoteTrace Routed through a domain and subdimains via Zero Trust Cloudflare Tunnel and Cloudflare DNS.

I have regular redundant backups both onsite and offsite with Duplicati.

My passwords for OS and all admin dashboards are extremely long, unique, random strings managed by Bitwarden.

I know just enough about this stuff to get into trouble. What else should I setup? I have little to no monitoring going on and don’t know much about that direction.

  • foggy@lemmy.world
    link
    fedilink
    English
    arrow-up
    8
    ·
    6 days ago

    Use authelia for 2fa

    Disable root ssh

    Disable password authentication for ssh. Keys only.

    Set up Fail2ban

    That’s about all that’s left; 2fa and brute force protection. Good job.

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

    What I did was setting up two routers. The outer one is a big filter, and the only packets coming in went through it.

    If someone would have managed to take over this outer router, the next step would have been to probe the inner router. For this, they would send packets originating at the outer router to anything on the inside net.

    This would trigger an alert on the inner router that switches a relay, cutting the power on the outer router.

  • JupiterSnarl@lemmy.worldOP
    link
    fedilink
    English
    arrow-up
    2
    ·
    5 days ago

    Thank you all for your advice and tips. I am very overwhelmed by the sheer amount of information that’s been given and I’m going to spend some time digesting and reading up on these things. Lots of terminology is over my head at this point and I have a lot of learning to do.

  • Trucule@lemmy.world
    link
    fedilink
    English
    arrow-up
    2
    ·
    5 days ago

    For monitoring, I’d start with alerts on changes you didn’t make. Save a baseline of listening ports with ss -tlnp and of running containers with docker ps --format '{{.Names}} {{.Image}}', then have a daily cron job compare both against the baseline and push any difference to your phone with ntfy.

    Keep the baseline files outside your Docker volumes.

    Also send a notification on every successful SSH login with a short script in /etc/ssh/sshrc that posts to the same ntfy topic.

    Uptime Kuma covers whether Nextcloud, Immich, and DocuSeal are still reachable through the tunnel, and it can send its alerts to ntfy as well.

    Drafted with AI.

    • NormDeplume@lemmy.world
      link
      fedilink
      English
      arrow-up
      1
      ·
      5 days ago

      This is an elegant and brilliant idea and I love it. Finding a way to formalize a baseline and then get notified for deviations from that baseline is a fundamental requirement for having things running smoothly.

      I’ve been working on a way to automate daily log parsing to get to the same state but including performance metrics and network traffic would definitely round out the signal.

      • Trucule@lemmy.world
        link
        fedilink
        English
        arrow-up
        2
        ·
        3 days ago

        I’d use the same baseline approach for logs and compare counts instead of reading lines. Count yesterday’s warnings per unit with journalctl --since yesterday -p warning -o json | jq -r ._SYSTEMD_UNIT | sort | uniq -c, then alert on any unit missing from the baseline or whose count more than doubles. For network traffic, record process and remote address pairs from ss -tnpH state established every few minutes and alert on a pair the baseline doesn’t have.

        Drafted with AI.