this post was submitted on 03 Oct 2025
107 points (98.2% liked)

Selfhosted

52011 readers
1229 users here now

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:

  1. Be civil: we're here to support and learn from one another. Insults won't be tolerated. Flame wars are frowned upon.

  2. No spam posting.

  3. 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.

  4. Don't duplicate the full text of your blog or github here. Just post the link for folks to click.

  5. Submission headline should match the article title (don’t cherry-pick information from the title to fit your agenda).

  6. No trolling.

Resources:

Any issues on the community? Report it using the report flag.

Questions? DM the mods!

founded 2 years ago
MODERATORS
 

Some services run really good behind a reverse proxy on 443, but some others can really become an hassle.. And sometimes just opening other ports would be easier than to try configuring everything to work through 443.

An example that comes to my mind is SSH, yeah you can use SSLH to forward requests coming from 443 to 22, but it's so much easier to just leave 22 open..

Now, for SSH, if you have certificate authentication or a strong password, I think you can feel quite safe, but what about other random ports? What risks I'm exposing my server to if I open some of them when needed for a service? Is the effort of trying to pass everything through 443/80 worth it?

top 50 comments
sorted by: hot top controversial new old
[–] Smokeydope@lemmy.world 8 points 1 day ago* (last edited 1 day ago)

Less danger than OPsec nerds hype up but enough of a concern you want at least a reverse proxy. The new FOSS replacement for cloudflare on the block is Anubis https://github.com/TecharoHQ/anubis, while Im not the biggest fan of seeing chibi anime funkopop girl thing wag its finger at me for a second or two as it test connection, I cannot deny the results seem effective enough that all the cool kids on the FOSS circle all are switching to it over cloudflare.

I just learned how to get my first website and domain and stuff setup locally this summer so theres some network admin stuff im still figuring out. I don't have any complex scripting or php or whatever so all the bots that try scanning for admin pages are never going to hit anything it just pollutes the logs. People are all nuts about scraping bots in current year but when I was a kid allowing your sites to be indexed and crawled was what let people discover it through engines, I don't care if botnets scan through my permissively licensed public writing.

[–] bigfondue@lemmy.world 10 points 1 day ago* (last edited 1 day ago) (1 children)

If you can disable IPv4 on sshd then it really isn't an issue. I know, security through obscurity isn't robust, but when I had sshd with IPv4 enabled, I was getting around 6 - 10 failed login attempts a minute. People iterate through all the IPv4 addresses since there are only 4,294,967,296 possible addresses. There are 340,282,366,920,938,463,463,374,607,431,768,211,456 possible IPv6 addresses, so the chance of someone randomly stumbling upon your address is fucking astronomically tiny. When I disabled IPv4 a couple years ago I've had exactly zero failed logins that weren't me being a sloppy typist.

[–] ganymede@lemmy.ml 3 points 1 day ago (1 children)

People iterate through all the IPv4 addresses since there are only 4,294,967,296 possible addresses. There are 340,282,366,920,938,463,463,374,607,431,768,211,456 possible IPv6 addresses

i love your thinking!!

do you have a backup in case you accidentally find yourself locked out from an ipv4-only network?

[–] bigfondue@lemmy.world 3 points 1 day ago* (last edited 1 day ago)

Not really. My home network doesn't have any port forwarding so nothing is exposed. I have a VPS, but nothing really important is on there, and I pretty much exclusively use it from home. Anyway all those failed logins were just trying defaults like user admin password admin. If you have a strong password or ssh key it really doesn't matter, but I just hated knowing people were trying to get in, even if it was just half-assed attempts to find a unsecured machine.

If I really needed to use IP4 to get in, I could always just log onto Vultr's web console and enable IP4 again.

[–] horse@feddit.org 2 points 1 day ago

Personally I don't forward ports for anything that only I am supposed to access (such as SSH). Instead I connect to my home network via VPN and establish the connection from the inside. I just have an allow all from the VPN subnet to my main one, but you could also allow things selectively if you don't want everything accessible via VPN. Using the VPN has the added bonus of ensuring everything is going through a secure tunnel if I'm connecting from a public network.

[–] sadfitzy@ttrpg.network 11 points 2 days ago (3 children)

Opening ports essentially allows other computers on the internet to initiate a connection with yours.

It's only dangerous if a service running on those ports can be exploited.

[–] ganymede@lemmy.ml 2 points 1 day ago

to reduce attack-surface, if there's no reason for the port to be open, don't open it.

[–] roofuskit@lemmy.world 3 points 2 days ago (1 children)

"If" is not the correct word choice. It's only dangerous when a service on the port gets exploited.

[–] metaStatic@kbin.earth 2 points 1 day ago (1 children)

Driving a car is only dangerous when you die in a traffic accident.

your logic doesn't check out.

[–] roofuskit@lemmy.world 1 points 1 day ago

If it's exposed to the internet it's a matter of when, not if, it is compromised.

[–] medem@lemmy.wtf 1 points 1 day ago

This, coupled with the fact that firewalls are protocol-agnostic. You can, for instance, use 'port https' in your Packet Filter config instead of 'port 443', but that simply means that PF will block/pass traffic to whatever service is bound to that particular port, and NOT https connections in general.

Move the port to a high port. Install fail2ban and set it to ban quickly. The downside of that is if you fat finger your login more than a couple of times it might ban you. I have whitelist on mine of the IP addresses I know I will be logging in from. I also run TCP wrappers which far too many people screech about it being depreciated. it works and also if set up properly logs all login attempts. I get about three or four a month on my random high port. Of course most of this depends on you trying to gain access from known addresses or subnet.

I only have the ssh login as a backup. I run wireguard with the ports set to something other than the default port. It allows me to gain access to my home network quickly. While its always possible there might be some bug that would allow someone to access it in the future it works as well as any other solution.

[–] ryokimball@infosec.pub 32 points 2 days ago* (last edited 2 days ago) (10 children)

If you are trying to access several different services through the internet to your home network, you are better off setting up a home VPN than trying to manage multiple public facing services. The more you publish directly to the public, the more difficult it is to keep up with everything; It is likely needlessly expanding your threat exposure. Plus you never know when a new exploit gets published against any of the services you have available.

[–] 0x0@lemmy.zip 11 points 2 days ago (1 children)

setting up a home VPN then trying to manage multiple public facing services.

You mean than? Not being anal it but does change the meaning.

[–] ryokimball@infosec.pub 7 points 2 days ago

You're correct, imma let voice-to-text take the blame there.

load more comments (9 replies)
[–] blargh513@sh.itjust.works 3 points 1 day ago (1 children)

Get a WAF. Sophos firewall is free if you want to diy. If not, use cloudflare.

Opening ports, logging, monitoring, nailing up allow listed IP addresses and dicking around with fail2ban is such a timesuck. None of that crap will stop something from exploiting a vulnerability.

Some things are worth farming out to a 3rd party. Plus, you can just point your DNS entry over and be mostly done. No more dynamic IP bs.

[–] sfjvvssss@lemmy.world 4 points 1 day ago* (last edited 1 day ago) (1 children)

A WAF won't magically solve your problems and free you from your attack surface. To be effective it needs contect of the application and a lot of tuning. Your public facing services should be treated, configured and maintained as such. I am not sure if you include a WAF in the stuff that won't stop exploitation of vulns, but it definitely belongs there. Yes, it can decrease volume and make exploitation a bit harder but that's it usually. Also don't just include proprietary third party stuff and hope it solves your problems.

[–] blargh513@sh.itjust.works 3 points 1 day ago (1 children)

It isn't a magic solution, no, but you have a lot more control than crummy layer 3 firewall rules and endless lists.

The big players have far more data about what bad looks like. Either we can play whack a mole with outdated tools and techniques or get smart and learn to use what is available.

Self hosting doesn't mean we go backward in terms of the sophistication and difficulty, it means embracing modern solutions.

In the dinosaur days, we had primitive tools, but so did the attackers. We cannot hope to self host with any measure of security if we bring piss to a shitfight.

[–] sfjvvssss@lemmy.world 1 points 1 day ago

I tested WAFs in the past, also ones from the big players and while they might block some cheesy stuff on the application layer, as long as they are not heavily tailored towards your application, they stop bein effective against most manual stuff.
Everything lower than application layer ist not a WAF btw, so I am not sure if you mean WAF or some Firewallish stuff.

Just stick to best practices and expose only what you really need to expose. When putting third parties in front of your stuff this als has data protection implications. If using it makes you feel better okay but it should not feel you more secure if you expose vulnerable stuff.

[–] lorentz@feddit.it 13 points 2 days ago

It is not just a matter of how many ports are open. It is about the attack surface. You can have a single 443 open with the best reverse proxy, but if you have a crappy app behind which allows remote code execution you are fucked no matter what.

Each port open exposes one or more services on internet. You have to decide how much you trust each of these services to be secure and how much you trust your password.

While we can agree that SSH is a very safe service, if you allow password login for root and the password is "root" the first scanner that passes will get control of your server.

As other mentioned, having everything behind a vpn is the best way to reduce the attack surface: vpn software is usually written with safety in mind so you reduce the risk of zero days attacks. Also many vpn use certificates to authenticate the user, making guessing access virtually impossible.

[–] skankhunt42@lemmy.ca 21 points 2 days ago (3 children)

It's not so much about the ports, its about what you're running that's accessible to the public.

If you have a single website on 443 and SSH on 22 (or a non-standard port like 6543) you're generally considered safe. This is 2 services and someone would need to attack one of the two to get in.

If you have a VPN on 4567 and everything behind the VPN then someone would need to hack the VPN to get in.

If you have 100 different things behind 443 then someone just needs to find a hole in one to get in.

Generally ssh, nginx, a VPN are all safe and they should be on their own ports.

[–] sfjvvssss@lemmy.world 11 points 2 days ago

Sorry to nitpick but I feel like beimg precise here is important. Nginx is a project, ssh a protocol and VPN an overlay network, so more of a concept. All 3 can be run somewhere on the spectrum between quite secure and super insecure. Also safe and secure are two different things, I guess you meant secure so no big deal.

[–] ryannathans@aussie.zone 13 points 2 days ago (11 children)

Exposing SSH is not recommended, it's a hot attack target. Expose a VPN and use that to SSH in.

load more comments (11 replies)
[–] rumba@lemmy.zip 9 points 2 days ago

Everything you expose is fine until somebody finds a zero day.

Everything these days is being built from a ton of publically maintained packages. All it takes is for one of those packages to fall into the wrong hands and get updated which happens all the time.

If you're going to expose web yourself, use anubus and fail2ban

Put everything that doesn't absolutely need to be public open behind a VPN.

Keep all of your software updated, constant vigilance.

[–] vane@lemmy.world 4 points 2 days ago* (last edited 2 days ago) (1 children)

you can reverse proxy other ports than 443 and ex. upstream ssh, the advantage of having reverse proxy over everything is to have traffic in one place so you can manage it, that's why for example kubernetes have ingress server, example nginx / openresty upstream ssh, you can restrict traffic to limited amount of IP etc.

stream {
    upstream ssh {
        server          127.0.0.1:22;
    }

    server {
        listen          2222;
        ssl_preread     on;
        proxy_pass      ssh;
    }
}
[–] dontblink@feddit.it 1 points 1 day ago (2 children)

As far as I knew reverse proxies could only reverse proxy stuff coming in from 443 or 80, I didn't know they could listen other ports as well!

Main reason why I was using a reverse proxy at first is because I had everything behind cloudflare, and cloudflare can only proxy and give you an SSL encryption for stuff that goes through 443, so I could make Caddy listen to 443 and then forward to interested ports.

But this leaves out everything that needs to go in some other places than 443, and requires its own standalone ssl certificate, which is a bit cumbersome. Pheraps these can be proxied with other proxies than cloudflare, hopefully giving SSL to everything..

I'm not sure I understood the upstream ssh thing, what do you actually do?

[–] Lem453@lemmy.ca 1 points 22 hours ago

Traekif can reverse proxy just about anything include ssh.

That being said I don't. For stuff like ssh I connect with wireguard first then ssh. For stuff like immich I directly expose that behind traefik so I can share images with others. For stuff like vaultwarden I have that behind traefik but internal only so you need wireguard first then you connect to vaultwarden.local.domain.com

[–] vane@lemmy.world 1 points 1 day ago* (last edited 1 day ago)

this is nginx / openresty config - upstream is just definition of server / bunch of servers if you do loadbalancing - you can specify load balancing strategies and stuff. Or when want to separate server layer from proxy layer.

stream {
  upstream something {
     server xxx:123;
     server yyy:321;
  }
  server {
     listen 666;
     proxy_pass something;
  }
}

https://docs.nginx.com/nginx/admin-guide/load-balancer/tcp-udp-load-balancer/

I use openresty with autossl, it renews certificates automatically. The only problem is maintaining subdomain allowance otherwise bots will ddos letsencrypt with random domain names, after some quota they will soft ban you for a week to create certificates for new domains / subdomains.

[–] Sanctus@anarchist.nexus 13 points 2 days ago

It just widens your attack surface for the ghost army of bots that roam the net knocking on ports, you don't want to be someone else's sap. I would imagine most home attacks fall into three categories: script kiddies just war driving, targeted attacks on someone specific, or just plain ol' looking for sensitive docs for identity theft or something. Its still the net, man. If you leave your ass hanging out someone's gonna bite it in a new way every time.

[–] possiblylinux127@lemmy.zip 11 points 2 days ago (1 children)

With SSH it is easier to do key authentication. Certificate authentication is supported but it is a little more hassle. Don't use password authentication as it is deprecated and not secure.

The key with SSH (openssh specifically) is that it is heavily audited so it is unlikely to have any issues. The problem is when you start exposing self hosted services with lots of attack surface. You need to be very careful when exposing services as web services are very hard to secure and can be the source of a compromise that you may or may not be aware of.

It is much safer to use a overlay VPN or some other frontend for authentication like mTLS or an authenticated reverse proxy.

[–] cmnybo@discuss.tchncs.de 7 points 2 days ago (3 children)

Be sure to keep everything up to date too. Even openssh has had multiple vulnerabilities just this year.

load more comments (3 replies)
[–] Onomatopoeia@lemmy.cafe 4 points 2 days ago

About 5 years ago I opened a port to run a test.

Within hours it was getting hammered (probably by scripts) trying to figure out what that port was forwarded to, and trying to connect.

I closed the port about a week later, but not before that poor consumer router was overwhelmed with the hits.

I closed the port after a week. For the next 2 years I'd get hammered with scans occasionally.

There are tools out there continually looking for open ports, they probably get added to a database and hackers/script kiddies, whoever, will try to get in.

Whats interesting is I did the same thing around 2000 with a DSL connection (which was very much a static address) and it wasn't an issue even though there were fewer always-on consume connections.

[–] tvcvt@lemmy.ml 5 points 2 days ago

There’s definitely nothing magic about ports 443 and 80. The risk is always that the underlying service will provide a vulnerability through which attackers could find a way. Any port presents an opportunity for attack; the security of the service is the is what makes it safe or not.

I’d argue that long tested services like ssh, absent misconfiguration, are at least as safe as most reverse proxies. That doesn’t mean to say that people won’t try to break in via port 22. They sure will—they try on web ports too.

[–] 0x0@lemmy.zip 3 points 2 days ago

Firewalls, containers, separate subnets (or VLANs if possible), VPNs.
Keep really public stuff in a VPS though, and the private in your home server. Connect them via wireguard (using e.g. headscale).

load more comments
view more: next ›