• 0 Posts
  • 38 Comments
Joined 18 days ago
cake
Cake day: October 3rd, 2026

help-circle

  • None of my VM require sharing of data, so each gets their own. I don’t currently use ZFS in Proxmox, but do have snapshots and periodic backups to my NAS, so recovery is generally not an issue.

    Conceptually, mounting a host storage inside a VM requires the use of either virtiofsd or NFS daemon running on the host (depending whether you mount it as local or network storage), so if either of the two or the underlying filesystem has a vulnerability, it does in theory create an attack surface, which is not ideal. With that said, as I mentioned above, I have not research led this enough, since I haven’t had the need yet, so don’t quote me on that. At the end of the day, it’s all about where you personally draw the line, so if you are fine with that risk and absolutely can’t give up the feature than go for it, it’s your system.



    • Forgejo for private git repos, coz F GitHub (F as in paying respect obviously… :v)
    • Portainer, though don’t use much as of late as I got used to the CLI
    • qBittorrent for Linux ISOs. No, really, I use it to download Linux ISOs :v
    • WireGuard, several instances, some for accessing specific services, one for accessing GeoIP blocked content when traveling
    • Vaultwarden for managing passwords
    • Home Assistant for managing a couple of sensors
    • Nginx Proxy Manager for managing hosts
    • TeamSpeak 6, just playing around with the beta for now
    • Apache Subversion for private SVN repos
    • A handmade C# service for storing some MQTT data into a database
    • peaNUT a NUT dashboard for the UPS
    • RustDesk for remote management of desktops

    As for the hardware:

    • A Raspberry pi 4 running Docker containers
    • A Dell Wyse 5070 (16GB) running Proxmox with mainly Alpine Linux VMs

  • If you asked me 2 years ago, I’d say they give a decent level of isolation for cheap, but, at the end of the day, in the eyes of the kernel, containerized processes are just another process running on the same host, just with a different set of privileges. If you have public facing services, or untrusted binaries, I suggest moving those to VMs, local services can stay in containers. This is what I did after Copy Fail and Dirty Frag were discovered. Alpine Linux VMs are pretty lean, so I went with that, and to keep the migration simple, I run the services as containers inside the VMs.





  • You could spin a publicly exposed WireGuard daemon firewalled to allow peers access to the non-public SSH port only, which would result in double encryption, but would give you the peace of mind that an attacker would have to compromise both at the same time, which is very unlikely. Plus, WireGuard is very cheap to deploy and produces no logs. We use that model in my office to access our server.

    Edit: Otherwise, as others mentioned, you’d move the SSH daemon to a random port, disable password login and weaker keys and cyphers, setup Fail2ban, and optionally setup GeoIP blocking (only allow IPs from your region to connect).




  • For home Wi-Fi I use a strong password, but that’s because it’s something I input once in a blue moon. For guests I have a guest Wi-Fi with a simpler* (still reasonably secure and random, but shorter and without special characters) password and a QR code for simple use, though they are rate limited and have no access to any other network clients.


  • Yep, my network was set up before the ISPs here merged by a smaller one that did things simpler, so I dont even have an ISP modem, just my OpenWRT router and no CGNAT, and I’ve only had my IP change once so far (since I started caring about it at least). Everything newer around uses ISP modems and are behind CGNAT, on my mates modem, they wouldn’t even let him set up his Wi-Fi, he had to go with double NAT-ing and setting 2 APs next to each other (the ISP modem/router has some default trash Wi-Fi). I’m praying they never bother coming to me 🙏


  • Never expose the bare remote control endpoint publicly. For example, recently macOS had a critical vulnerability where an attacker could completely bypass authentication on their Screen Sharing daemon, and the researcher had estimates around 40k publicly exposed systems, and it was found out that the vulnerability was in fact being used in the wild. Exposing things like that publicly is asking for trouble.

    Personally I don’t like relying on 3rd party systems like Tailscale, so I just have a WireGuard peer running firewalled to only allow access to what is necessary, though you can skip the firewall part. This obviously assumes you have a routable public IP, i.e. no CGNAT, if that’s not the case Tailscale is probably what you want.


  • If we take the EFF wordlist commonly used to generate passphrases, we have 7776 words. If we take ASCII alphanumerics and special characters we have about 92. Assuming we generate a NIST compliant password of 15 characters in length we get 92^15=2.8*10^29 of combinations. To get the same level of security (same number of combinations) using the EFF wordlist we need (log(2.8)+29)/log(7776)=29.45/3.9=7.6 around 8 words. If we assume the words are 7 characters long on average, plus the separators, we get 7*8+6=62 characters long. If we start to also include Unicode characters like other scripts or emojis (something I’ve recommended to others) the required number of words grows even more. I don’t know about you, but I can’t be bothered to type that all out every time, a password manager works for me.



  • The way a reverse proxy works is to literally stand in the middle of a connection, so either side only sees them communicating with the proxy, oblivious to the actual endpoint. The only “solution” to this, though it’s more of a hack really, is to somehow send the original IP as additional data in a way that both sides agree on, e.g. the X-Forwarded-For header as others have mentioned, however, as I’ve said, both sides need to support and aggree with that, so you may have to find a setting/config to enable on the services behind the proxy. Think of it this way, if services blindly trusted that header and you weren’t using a reverse proxy, a bad actor could send a request to your service with that header included thereby spoofing their identity in your logs, therefore, this kind of thing is usually opt-in