Background: 15 years of experience in software and apparently spoiled because it was already set up correctly.

Been practicing doing my own servers, published a test site and 24 hours later, root was compromised.

Rolled back to the backup before I made it public and now I have a security checklist.

  • JustEnoughDucks@feddit.nl
    link
    fedilink
    arrow-up
    6
    ·
    24 hours ago

    Lol ssh has no reason to be port exposed in 99% of home server setups.

    VPNs are extremely easy, free, and wireguard is very performant with openvpn also fine for ssh. I have yet to see any usecase for simply port forwarding ssh in a home setup. Even a public git server can be tunneled through https.

    • MonkeMischief@lemmy.today
      link
      fedilink
      arrow-up
      1
      ·
      edit-2
      10 hours ago

      Yeah I’m honest with myself that I’m a security newb and don’t know how to even know what I’m vulnerable to yet. So I didn’t bother opening anything at all on my router. That sounded way too scary.

      Tailscale really is magic. I just use Cloudflare to forward a domain I own, and I can get to my services, my NextCloud, everything, from anywhere, and I’m reasonably confident I’m not exposing any doors to the innumerable botnet swarms.

      It might be a tiny bit inconvenient if I wanted to serve anything to anyone not in my Tailnet or already on my home LAN (like sending al someone a link to a NextCloud folder for instance.), but at this point, that’s quite the edge case.

      I learned to set up NGINX proxy manager for a reverse proxy though, and that’s pretty great! I still harden stuff where I can as I learn, even though I’m confident nobody’s even seeing it.

      • JustEnoughDucks@feddit.nl
        link
        fedilink
        arrow-up
        2
        ·
        edit-2
        9 hours ago

        Honestly, crowdsec with the nginx bouncer is all you need security-wise to start experimenting. It isn’t perfect security, but it is way more comprehensive than fail2ban for just getting started and figuring more out later.

        Here is my traefik-based crowdsec docker composer:

        services:
          crowdsec:
            image: crowdsecurity/crowdsec:latest
            container_name: crowdsec
            environment:
              GID: $PGID
            volumes:
              - $USERDIR/dockerconfig/crowdsec/acquis.yaml:/etc/crowdsec/acquis.yaml
              - $USERDIR/data/Volumes/crowdsec:/var/lib/crowdsec/data/
              - $USERDIR/dockerconfig/crowdsec:/etc/crowdsec/
              - $DOCKERDIR/traefik2/traefik.log:/var/log/traefik/traefik.log:ro
            networks:
              - web
            restart: unless-stopped
        
          bouncer-traefik:
            image: docker.io/fbonalair/traefik-crowdsec-bouncer:latest
            container_name: bouncer-traefik
            environment:
              CROWDSEC_BOUNCER_API_KEY: $CROWDSEC_API
              CROWDSEC_AGENT_HOST: crowdsec:8080
            networks:
              - web # same network as traefik + crowdsec
            depends_on:
              - crowdsec
            restart: unless-stopped
        
        networks:
          web:
            external: true
        

        https://github.com/imthenachoman/How-To-Secure-A-Linux-Server this is a more in-depth crash course for system-level security but hasn’t been updated in a while.