Selfhosted
A place to share alternatives to popular online services that can be self-hosted without giving up privacy or locking you into a service you don't control.
Rules:
-
Be civil: we're here to support and learn from one another. Insults won't be tolerated. Flame wars are frowned upon.
-
No spam posting.
-
Posts have to be centered around self-hosting. There are other communities for discussing hardware or home computing. If it's not obvious why your post topic revolves around selfhosting, please include details to make it clear.
-
Don't duplicate the full text of your blog or github here. Just post the link for folks to click.
-
Submission headline should match the article title (don’t cherry-pick information from the title to fit your agenda).
-
No trolling.
Resources:
- selfh.st Newsletter and index of selfhosted software and apps
- awesome-selfhosted software
- awesome-sysadmin resources
- Self-Hosted Podcast from Jupiter Broadcasting
Any issues on the community? Report it using the report flag.
Questions? DM the mods!
I use a reverse proxy and client certificate authentication for anything I expose. That requires me to pre install the client certificate on all of my devices first, but afterwards they can connect freely via a web browser with no further prompting to authenticate. Anybody without the client certificate gets a 403 before they even get past the proxy.
There are limitations to this and overhead of managing a CA and the client certificates for your devices.
I'm a network engineer and >15 years of experience in IT. It's never "safe". Not even in corporate IT. You're a home user and it's less likely you'll be targeted but bad actors do comb the internet for known vulnerabilities. Patch your shit, limit exposure, enable MFA on everything. I don't run it, but I feel slightly sketched out not behind something like a Palo Alto. But again I'm just a small potato in a big sea and I patch everything.
There will always be risk. Just do what feels right for you. Follow beat practices.
It all just depends on how much you trust the app, and how you've set up things when it does go wrong. Not every container needs to be able to access other containers on the system, lan, have access to whatever folder, read/write permissions, etc
A good practice for things like vaultwarden would be to only whitelist the country/state you're in to minimize your attack profile
fail2ban or crowdsec can also help with all the rats sniffing around
Limited container access is a good point. Noted.
I think the APP itself is fine, but would an API access give attackers a mean to brute force into it? Sorry no expert here.
The official wiki talks about securing password login with fail2ban. I guess this is not needed in my case, as it’s handled at the Authelia level.
It’s only bad practice if you don’t keep up on vulnerabilities/patching, don’t have any type of monitoring or ability to detect a potential breach, etc.
The nice thing about tucking everything behind a VPN is you only have one attack surface to really worry about.
I have many of my services open to the internet, but behind authelia w/2fa and a reverse proxy. I haven't had a security issue yet, been running this way for a few years.
I think it's pretty safe as long as you keep them up to date. I run backups weekly and do updates at least once a month.
Using geoip restrictions will also help a lot because you can block most of the scanner bots by denying connections from outside your geographic region. These bots detect what services are open to the internet and then add them to databases like shodan. If a security flaw is found in one of those services, hackers will search those databases for servers with those services running and try to exploit them. If you aren't in those databases they can't easily find you before you are able to patch.
Very good point regarding geoip, thanks!
My understanding is that it's just not as secure. Any open port can be considered a potential way for a hacker to get in. Of course, that doesn't mean it will 100% happen and you will get hacked, but at least in the case of Tailscale, it does it in a secure way that makes it so you don't have those open ports. Basically, it's not bad to just expose them to the internet, it's just not as secure as using tools like Tailscale.
If you use strong passwords and keep an eye on your logs you are no less safe than any other public facing entity. I've had a bunch of services exposed since 2020 so far no one has even bothered to brute the basic auth on Apache (though bot nets take a run at SSH a few times a year).
I thought I was fine, until I installed IDS/IPS on my OPNSense box, and noticed one of my servers trying to contact a malicious IP. Took everything offline that day and keep publically facing services on other peoples networks :~)
If you don't need to, then DON'T. I only expose my personal website, my CardDAV server, my Gitea instance and my SSH server. Update them regularly
If your application is insecure/old, use it behind a VPN
A number of people have touched on the perimeter security, but you can also look at your internal network too and whether you have the systems being exposed on vlans with firewalls preventing connectivity from those systems back to your other stuff that doesn’t need to be exposed. Could help cover you if a system is compromised due to bad config, zero day exploit, or whatever, by limiting the ability to then go sideways through your network to exploit other systems. Depending on what you are hosting there may be zero requirement for your externally facing server to need to talk to the majority of devices on your network, or the talk could be one way only (internal facing to external facing).
It's not bad per se, but you really just need to understand the risks involved and have an idea of how to secure your services properly. I personally won't expose anything if it doesn't have some sort of centralized auth solution (LDAP preferred) and 2FA to better secure accounts.
It's also good practice to have some way of mitigating brute-force attacks with something like fail2ban, and a way to outright block known bad IP addresses.
Here’s how I solved the problem: https://blog.lchapman.dev/self-hosting-foundations/
Not free, but pretty cheap. Been doing it for a year or so and I’m happy with the solution.