May I ask what do you guys have exposed to the internet?
I personally just have a wireguard VPN (single UDP port open) and everything is accessible through an internal reverse proxy. I just never felt the need to expose nothing ant least not web related.
One thing I need to publicly expose is my own instance of Mealie. It's a recipe manager that supports multiple users. I share it with family and friends, but also with more distant acquaintances. I don't want to have to provide and manage access to my network for each and every one of them.
I have Jellyfin and Jellyseerr open through cloudflare -> nginx over port 443 so i can share it with friends. Eventually I'll do the same with NextCloud probably.
That’s exactly how I have my setup, and on my client WireGuard configs I have it set to split route so I can connect to my home VPN without disrupting anything else.
I expose self-hosted bitwarden for my family to access through cloudflared tunnels and only allowing US IP via cloudlfare rules. Only the webUI is exposed and traffic has to go through cloudflare and nginx to be able to do anything.
Both. Some things are only resolvable internally or over wireguard. Some things are publicly accessible via a reverse proxy.
Overseerr, bitwarden, plex all have ports open or through the reverse proxy. Same with email and a few other services.
All the *arrs are accessible only on my network or over VPN.
Do you even need a reverse proxy if you're using Tailscale? What advantage does it give you over setting up your DHCP correctly such that you can access your services by hostname?
Because I have my own custom domain internally and don't use tailscale while on I'm on my network physically. But I get the best of both worlds, however I do have Tailscale setup with DNsMasq to set to my domain name anyway instead of using the Tailscale domain
I know cloudflare has a free tier and allows you to put rules like this in place. AFAIK you'd have to use them as DNS at least in order to use this feature. I use Cloudflare tunnels and access to facilitate remote access to my home-server, and I know I have this same rule in place.
Cloudflare DNS basically, but it can be implemented at nginx level using geoip2 modules (I do both, because some of my services don't play well with Cloudflare proxied DNS). The cumbersome part is keeping geoip database up to date but I'm sure there are plenty of tutorials online.
I’m using an nginx reverse proxy with maxminddb for geo filtering. I have it limited to my state instead of country. If I could reliably go more specific I would. I really only rely on external access to the reverse proxy for family. I could use a vpn myself but I’m not bothering with the inevitable and endless questions from family.
I don’t know if it’s realistic or not but I would love to use a client certificate to authenticate with the reverse proxy but I’m not sure of the compatibility with mobile devices or smart TVs. If it would work even a self signed cert that’s valid for years would be a nice layer.
I've got a reverse proxy for stuff I want to be able to hit from the outside. It's behind an SSO portal with 2fa (hardware token). Then for everything else I VPN in.
Probably the usual. 80/443, wireguard, a couple game servers.
For those of you who staunchly put your open ports on a VPS and wireguard tunnel it back to your home server, are you firewalling that wg connection to only allow specific traffic?
I like this approach, but I'm currently sitting in a foreign hotel who's wifi seems to block WG. Annoying. Keep a TLS-protected reverse proxy for things you might need through obscure networks.
A reverse proxy isn't a substitute for a VPN for access outside your network. And it isn't any less secure; you only need to open 1 port however all of your services will be accessible via that single port which is arguably less secure.
Currently I expose port 22 for SSH, 443 for Nginx and a couple extra for Syncthing (to mirror my media files between a Hetzner Storage Box and my NAS at home).
There's a specific setup I tried to build once but didn't manage:
Expose only Wireguard port from my VPS
make it so that when (and only when) a device is connected to the VPS via Wireguard, then mydomain.xyz will target the VPS' IP (and therefore hit my Nginx proxy which redirects to my various services at myservices.mydomain.xyz.
I tried by having a Adguard Home running on that same VPS, and setting its IP as the DNS in the wg0.conf that goes on the client device but it didn't work.
Caddy Reverse Proxy with Basic Auth for services which are critical like my 3d printer. Without auth for other services like my website or jellyfin and such. I use docker for everything so that's another layer of safety for me.
I have port 443 open and use subdomains for most stuff. Some other ports for non-HTTP services but I don't have any right now.
I use a self-hosted vpn, because I don't want to expose anything to the internet. The ones I do want to, I haven't set up yet since it would require reinstalling my pi. But I do have a reverse proxy set up on a vps that I will use once I get around to doing it.
Never open ports to the internet unless you want everybody to see it. Always use VPN to access your selfhosted stuff. If you've got a lot of VPN connections to set up, try generating a QR code for the connection. Makes it a bit faster to setup the client.
I use Wireguard for everything except a couple of ports that are open directly to Internet for Traccar (fleet management) because the GPS trackers don't support anything in the middle and I use Cloudflare Zero trust tunnel for Nextcloud (without any other security layer because the Android and Windows app don't support them) because my family use it too.
The Wireguard tunnel is always on both on my PCs and on my Android smartphone.
I never open any ports to the open Internet other than the two my friend client uses.
For remote access I use a P2P VPN called ZeroTier leaving it always running on the Pi, and switching it on for the remote device when needed. It's free for up to like 50 users and is very powerful, but dead simple.
Currently I expose port 22 for SSH, 443 for Nginx and a couple extra for Syncthing (to mirror my media files between a Hetzner Storage Box and my NAS at home).
There's a specific setup I tried to build once but didn't manage:
Expose only Wireguard port from my VPS
make it so that when (and only when) a device is connected to the VPS via Wireguard, then mydomain.xyz will target the VPS' IP (and therefore hit my Nginx proxy which redirects to my various services at myservices.mydomain.xyz.
I tried by having a Adguard Home running on that same VPS, and setting its IP as the DNS in the wg0.conf that goes on the client device but it didn't work.