How do you all handle security and monitoring for your publicly accessible services?
-
HA had 2 security audits. I would not worry too much. Always depends on what you can control with it. https://www.home-assistant.io/blog/2023/10/19/security-audits-of-home-assistant/
-
Wazuh
Active responses are like fail2ban but better
-
If you are just using a self signed server certificate anyone can connect to your services. Many browsers/applications will fail to connect or give a warning but it can be easily bypassed.
Unless you are talking about mutual TLS authentication (aka mTLS or two way ssl). With mutual TLS in addition to the server key+cert you also have a client key+cert for your client. And you setup your web server/reverse proxy to only allow connections from clients that can prove they have that client key.
So in the context of this thread mTLS is a great way to protect your externally exposed services. Mutual TLS should be just as strong of a protection as a VPN, and in fact many VPNs use mutual TLS to authenticate clients (i.e. if you have an OpenVPN file with certs in it instead of a pre-shared key). So they are doing the exact same thing. Why not skip all of the extra VPN steps and setup mTLS directly to your services.
mTLS prevents any web requests from getting through before the client has authenticated, but it can be a little complicated to setup. In reality basic auth at the reverse proxy and a sufficiently strong password is just as good, and is much easier to setup/use.
Here are a couple of relevant links for nginx. Traefik and many other reverse proxies can do the same.
-
I've tried different approaches with fail2ban, crowdsec, VPNs, etc. What I settled on is to divide the data of my services in two categories: confidential and "I can live with it leaking".
The ones that host confidential data is behind a VPN and has some basic monitoring on them.
The ones that are out in the public are behind a WAF from cloudflare with pretty restrictive rules.
Yes, cloudflare suck etc., but the value of stopping potential attacks before they reach your services is hard to match.
Just keep in mind: you need layers of different security measures to protect your services (such as backups, control of network traffic, monitoring and detection, and so on).
-
I'll look into it, thank you
-
has some basic monitoring on them.
What monitoring software are you using?
I feel like the other measures you talked about (backups, condom of network traffic, etc) I'm doing ok on. Its really just the monitoring where I'm stuck. There's so many options
-
There’s also something to be said about some services being cordoned off in a VPN while leaving some public with security. I don’t necessarily want everyone within my full network if all I want is to share one service with them.
-
For that, you can restrict access to a single service with iptables.
-
Just out of curiosity, why do you disconnect from your home VPN?
-
There should be an option in your phone VPN setup to reconnect if app X is being used.
-
Yah, it's just a hobby for you, but it's also a hobby for script kiddies to use Shodan to find people with out of date web interfaces and pop them. I tell you right now, the Immich team would be the first to say not to put their application publicly accessible.
Just don't get into this practice, it ends in tears and is way more maintenance to stay protected than just setting up tailscale and using that.
-
If somebody needs to have services accessible by someone else besides him, that service can’t be behind a VPN
Again, this is the reason VPS' exist. If that person needs access, then setup Wireguard...
It's like saying you don't need a front gate with an access code because then you would have to give out your own access code. But I mean, the lock has the ability to setup more access codes. And you're saying the only viable option is the leave the gate open and hire a guard to manage access. It's just... Weird and wrong.
-
Why not swap from nginx-proxy-manager to Caddy2, which can handle everything? SSL and reverse_proxy?
-
Again, this is the reason VPS’ exist.
What? What's the difference between a VPS and your home server?
You may say that's a good practice to separate things, so maybe have a a VM with public facing services and another with more private stuff reachable only with a VPN. But for something like Nextcloud, it needs to be public (if you're not the only one using it), but it contains personal stuff and then comes the OP request! -
Yeah, I'm not gonna tell the 50 users of my plex server to set up wireguard on their devices so they can request movies and TV series on my overseer, when I can instead just use NPM to make it publically accessible with a password prompt
-
Your use case, and OPs, are completely different scenarios. I can't tell if you're being purposefully disingenuous or just flippantly stupid.
-
You may say that’s a good practice to separate things
You're missing the point. VPS isn't about separating anything... I'm not even sure what you mean by that. VPS is the accepted practice here. Unquestionably. You create private services, and for security you only expose them to the least amount of people possible. You authenticate via VPS connections. You only have to maintain a single database of users to access any number of services, even tens of thousands.
OP is specifically talking about hosting local content that they want to protect. VPS is the solution here.
-
This is effectively the same damn thing with a single exception. If your VPN is down, there's no access to your server. If for whatever reason your firewall is down, there's unrestricted access to your server...
VPN is unquestionably the correct choice 100 times out of 100.
-
There is. It's called VPN Split Tunneling.
If you want to proxify your connection between you and a service, you enable the split. If you don't care, or want to not use the VPN, then disable it for that application. So it's effectively "proxify all connections to this app," which is the same as your use case.
-
If for whatever reason your firewall is down, there’s unrestricted access to your server…
I don't know what kind of firewall you use, but if my firewall is down there is NO traffic at all passing through!
And by the way, since I've replied to someone that don't want to use VPN because he doesn't want to give access to the whole network, I meant that he could use a VPN AND iptables to restrict the guest access to single services instead of the whole network.