I would like to set up a NAS/Home Server Combination. I am not particularly experienced with networking and this general area, although I can handle Linux well enough at the very least, so I have a few questions, particularly about security, but also other things.
So, here’s what I want, to provide a general idea of my plans:
I’d like
This isn’t a comprehensive list, but should provide a rough idea
So, my questions:
I am grateful for any tips, even if they’re not entirely related to my direct questions, so please feel free to dump all kinds of knowledge and tips on me, if it’s not too much of a bother for you!
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:
Any issues on the community? Report it using the report flag.
Questions? DM the mods!
I think entirely separate VMs in different VLANs might be a bit much for a beginner to setup correctly. The Isolation that Docker and it’s networking Provides might be enough to start, no?
I guess it depends on the person. I find starting with “real” VMs and VLANs makes it easier to get an understanding for what’s going on underneath the hood, even when you start using Docker containers and the like.
Well now I’m concerned. I have plans to do something similar, but I’m only spending a few hundred on my setup. By the time it’s done it’ll be:
Is that not going to be enough for pretty much the same use case?
Isn’t that motherboard alone a few hundred? 4 4TB Ironwolfs is also a few hundred.
I have a server exposed to the wan. some ideas:
have fun!
On that second point use actual random port numbers. Don’t be like oh this webapp defaults to port 443, I’ll use 4443. You have 65000 ports to pick from. Maybe good to avoid any number that ends in a well known port too. 23,22,25,80,443,8080,8081
you can find me on Port 70
Random ports are easy to discover and there are tools to discover what service is behind a port.
It’s annoying for the legitimate user and easy to bypass by an actual attacker.
Also, if you use a random port above 1024 it could be a security issue since any user could star listening if the legitimate process crashes.
See this
You’re advocating for running private services on the default ports?
Acronyms, initialisms, abbreviations, contractions, and other phrases which expand to something larger, that I’ve seen in this thread:
3 acronyms in this thread; the most compressed thread commented on today has 7 acronyms.
[Thread #472 for this sub, first seen 1st Feb 2024, 20:05] [FAQ] [Full list] [Contact] [Source code]
Theres so much to unpack…! But ill try and throw something in the mix.
I dont know if freenas/ truenas supports a lot of addons or whatever they call it but the moment you mentioned media and games my thought went to proxmox, though i suppose you might also be able to get away with a bunch of docker containers.
Soo… proxmox (or any hypervisor) will allow you to run multiple segregated VMs and containers.
On one vm you can install freenas/ truenas (whichever the good one is atm, im a little out of touch) and allocate the bulk storage drives to it.
Another vm for Plex/jellyfin
Another for minecraft, factorio, tf2
Another for nextcloud/ webserver
Nextcloud provides webdav/ caldav for calendar and contact syncing so sorted there. It also has a collabora app i think for collaborative document working.
In terms of security, you want to follow nextclouds secure configuration guide as a start.
The best way is to use a vpn to access your home network. Maybe give the others access if you trust them but you may then need to do some vlanning and segregation to protect the rest of your home network from them.
If you must expose to the net (which you may do with the games servers) then again, the config guide has you covered, use crowdsec, use https, use random ports, use strong passwords and mfa.
Do regular backups. 3 copies, 2 separate storage mediums, 1 offsite (3-2-1 rule).
Idk about the 8tb drive.
The above isnt the be all end all. Let it be the start of a discussion and your research journey
When you say the config guide has you covered. Where is this config guide?
here
I mean or docker containers for jellyfin would do fine. I think nextcloud has a docker container as well.
This is how I run all my services. I have a nice docker compose file, I always set my server computers up the same way so no editing will be necessary…
I was using podman, but like all Red Hat products, I found it to be unnecessarily complicated. Yes of course it has better security, but… Docker just works.
I was considering the VPN option, but as you mentioned for game servers that’s not reasonable, and for some of the collaborative tools I’d prefer being able to give people I don’t trust that much access, for instance people at work/university, to work together with them on whatever would be needed.
If I just decided to make the home server a home-only server, that would ease a lot of my worries. I guess I could get a personal one, with sensitive info but only home network access, and just rent a second one? It’s not like they’re that expensive if you’re just doing small-scale things and find a decent provider
You can always do both and expose some services outside your network and keep the others local only while still being able to access them yourself with a vpn.
More information here - https://blog.aiquiral.me/bypass-cgnat
For a newbie, cloudflare is fine. Relax.
Some security tips:
Firewall should block everything by default, and you start allowing incoming and outgoing connections when you need them or if something fails.
Disable passwords and root access in ssh daemon.
Use fail2ban or something similar to block bots failing to log-in.
Use random long passwords for everything (eg: like databases). And put then in a password manager. If you can remember the database password, it’s not strong enough. If you can remember the admin password for a public web service, it’s weak.
Don’t repeat the passwords. Everything should have its own random long password.
.env files and files with secrets should be readable only by its service user. Chmod them to 400.
Monitor logs from time to time to see if something funny is happening.