In the past two weeks I set up a new VPS, and I run a small experiment. I share the results for those who are curious.
Consider that this is a backup server only, meaning that there is no outgoing traffic unless a backup is actually to be recovered, or as we will see, because of sshd.
I initially left the standard “port 22 open to the world” for 4-5 days, I then moved sshd to a different port (still open to the whole world), and finally I closed everything and turned on tailscale. You find a visualization of the resulting egress traffic in the image. Different colors are different areas of the world. Ignore the orange spikes which were my own ssh connections to set up stuff.
Main points:
there were about 10 Mb of egress per day due just to sshd answering to scanners. Not to mention the cluttering of access logs.
moving to a non standard port is reasonably sufficient to avoid traffic and log cluttering even without IP restrictions
Tailscale causes a bit of traffic, negligible of course, but continuous.
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!
ITT: People who don’t understand Tailscale or are allergic to it for ‘reasons’
Whys this a problem disable password auth and wish em good luck lol.
Acronyms, initialisms, abbreviations, contractions, and other phrases which expand to something larger, that I’ve seen in this thread:
7 acronyms in this thread; the most compressed thread commented on today has 8 acronyms.
[Thread #42 for this sub, first seen 14th Aug 2023, 15:55] [FAQ] [Full list] [Contact] [Source code]
Good bot!
Great bot
And yet it is more likely that tailscale get owned since the reward is much higher. I take my chances with my secured openssh server at port 22 vs a 3rd party company who controlls the access.
Just setup a wireguard system that’s pretty bulletproof
So is SSH
Wireguard doesn’t respond but I agree open-ssh is pretty solid. Can’t speak for any of the other ssh implementations. It can also be poorly configured. Like you could use a password
The benefit of Wireguard is that if you screw it up, it just won’t work. It basically enforces security.
Well, unless you tried to use the original PFSense module.
I’ll take that tiny amount of traffic telling scanners there’s no password auth over having to remember port settings for ssh, scp and rsync any day.
My configs remember stuff for me.
vim ~/.ssh/config
deleted by creator
Fair point. These logs are only useless chatter anyway for everyone with proper key auth.
For me it’s not about the traffic, more the log spam.
Generally I’ll have :22 enabled internally, and anything non-standard is defined in
~/.ssh/config
and shared out so I don’t have to remember things.The best reason is reducing attack surface. It’s such an easy thing to do. I don’t know why people still expose services they don’t need to.
Moving the port doesn’t reduce attack surface. It’s the same amount of surface.
Tailscale is a bit controversial because it requires a 3rd party to validate connections, a 3rd party that is a large target for threat actors, and is reliant on profitability to stay online.
I would recommend a client VPN like wireguard, or SSH being validated using signed keys against a certificate authority your control, with fail2ban.
You can run headscale to do your own validation.
It reduces the probability that a drive by scanner is going to detect a vulnerable service. Camouflage isn’t a guarantee that you aren’t going to be sighted on a battlefield, but it’s still a good idea to reduce the probability of becoming a target in whatever ways you can.
For management ports, I set up a firewall on the VPS to only respond to connections from known IPs.
What software did you use you monitor this? I am newish to self hosting and would like to secure my connection better.
Sorry, it’s the built-in console of Google Cloud. But there are so many monitoring solution around that you can probably find one of your liking. Look on awesome-selfhosted for “monitoring”
I’d favour own VPN instead of relying on an additional third party
Right? PiVPN is easy AF and uses WireGuard. No reason not to set up something yourself if you’re already selfhosting.
Mine is quick enough to run remote desktop over
Same, I use Moonlight/Sunshine to stream my main gaming PC. I can even use wake on lan, so the big chungus isn’t drawing power unless I’m using it.
Do you have any tutorial that explains what you did? I’d love to try to better understand your setup
Well for PiVPN I just followed the docs to get it setup: https://docs.pivpn.io/
Then I port forwarded the port I use for Wireguard to that same port on my Pi with PiVPN on it.
For Sunshine: https://docs.lizardbyte.dev/projects/sunshine/en/latest/about/installation.html
So now when I want to remotely access my gaming PC, I use Wireguard on my phone, use the configured PiVPN setup on there which points to the domain name that I have setup with my DDNS, then I use a Wake On Lan app setup with my gaming PC’s MAC address to wake it, then I just log into it with Moonlight like normal
Do you use Linux if so, are you on Wayland ?
I use Linux Mint, so no Wayland, but Sunshine/Moonlight works on both X11 and Wayland, generally speaking.
Isn’t port forwarding dangerous?
Oh, something new to try, thanks
Please ELI5: How does this solution work? You tunnel yourself in your home network with a VPN on your PI? How is that safer, isn’t there still a port open?
I have a port open, yes, but it’s not port 22. The problem with Tailscale is you’re trusting a third party. With my setup, it’s just me connecting directly to my Pi. Thanks to port forwarding the only open port pointing to my Pi is the one that I use for WireGuard.
I already have a DDNS and domain name pointing to my house, so there’s effectively no added risk compared to my existing setup with a couple webapps being reverse proxied behind Caddy on a different device.
Thanks! I think I get too hung up on the VPN-part. If I had a setup where I open one Port to a Pi which is set up as a nginx reverse proxy that redirects the connection to my different services depending on the URL - homeassistant.myserver.com, backup.myserver.com,… - would that be considered a VPN?
no, and that’s be a pretty bad idea, you’re opening up all your internal hosts to the public internet.
a VPN is specifically designed to keep all your internal hosts off the public internet. When you authenticate with the VPN server the remote device you are using effectively “joins” the internal network, using the VPN to act like a tunnel between you and your network.
it has the benefits of better security as well as the fact that once you set it up, you can access any services you host, not just HTTP ones.
That sounds good, I will read more about setting up a VPN. Thank you!
If you do want to open 22, and there are plenty of good reasons to want to, just implement something called port knocking and you can do it safely.
Note with this you still need good authentication. That means no passwords, key based auth only.
I have read elsewhere that port knocking is just security through obscurity and isn’t worth considering. I found it when searching for ways to set it up and that put me off.
Security through obscurity is a very valid way to secure something. It shouldn’t be the only way of securing something, but it can be a valid additional layer.
The knock sequence is a secret, just like a password. It may not be a particularly strong secret, but is is strong enough to keep out casual attackers. You’ll still need additional security, but sshd is well equipped to provide that.
If you want to go down that path, a password is only security by obscurity.
Port knocking is an extra layer of security, and one that can stop attackers from ever knowing your private server even exists. A random scanner won’t even see any open ports.
Always bear in mind that any random guy advising people not to use port knocking may be doing it with malicious intent. I’m sure there’s someone out there advising that random passwords are a waste of time, and everyone should just use monkey123.
It is and it isn’t. It prevents random scans from opening 22 and attempting to authenticate, that’s basically the entire purpose. You still need good authentication after because you’re right, it’s not a security measure, it’s just a way to keep your logs useful and to keep botnets from beating the hell out of 22.
By “good authentication” I mean a key pair based authentication. That is impossible to brute force. If you use a password on 22 you shouldn’t open it at all and you should rethink allowing any remote access.
Put another way: You’re the doorman at a speak easy. You can answer the little window with “what’s the password?” to every jack ass that approaches, and you’d be asking all the time. But if they don’t know they have to knock “shave and a haircut” first, your job gets a lot easier and you’re dealing with a lot fewer nuisance password promptings.
You can also use it to blacklist. If someone tries to hit 22 without knocking you can blacklist that IP entirely because you know it’s nuisance.
When you put it that way, it sounds beneficial and like something I’d like to use. Thank you!
The article may have been dissing it as a sole strategy.
It’s not uncommon for people to try using it as their sole authentication so that wouldn’t be a surprise. But for it’s purpose, it’s perfect.
Very good explanation. And the benefits are even greater: because there is absolutely no response until the entire secret knock is correctly used, the random guy trying to get in doesn’t even know if there’s anyone at that address. (In fact, set up correctly, they won’t even know if there’s really a door there or not)
Or, you know, just use key auth only and fail2ban. Putting sshd behind another port only buys you a little time.
I’ve noticed that a lot of the scans these days almost always switch IPs after 2-3 attempts, making IP blocking a lot more difficult.
Let’s say that you could ban for an indefinitely large amount of time after a single failure to authenticate, that’d make them run out of IPs much quicker than you’d run out of CPU/BW, so I don’t really see the issue
Potentially yeah, although a single failure means I might lock myself out by accident.
True, but very unlikely (once your ssh client is configured once and for all), and in that event you can always switch connection (use a data network, proxy, vpn, hop from another server you have ssh access, etc)
Yeah but the majority of bots out there are going after easy prey. Honestly, if you use public key authentication with ssh you should be fine, even if it is on port 22. But it does of course clog up access logs.
The majority of bots out there are stopped by just using a hard to guess password. It’s not them that you should be worried about.
The majority of bots doesn’t even show up in the logs if you disable password auth in the server config, as you typically should.
Exploring Go High Level:
What’s the Enthusiasm About?
Hello there! Are you familiar with Go High Level? If not, let’s break it down. Imagine managing multiple apps for marketing. Sounds busy. That’s where Go High Level comes in. It’s like that friend who has a solution for everything. Whether you are working on creating an outstanding sales funnel or sending out an email campaign, this platform has your back. The best part? They let you test drive everything with a 14-day free trial. It’s like trying out a new car but for your business. And if you ever need assistance, their support team is just a click away. Pretty exciting, huh?
So, How Much Does It Cost?
Alright, let’s talk about the financial side. Go High Level offers 3 main plans. The Agency Starter Plan is perfect if you’re just starting or have a small business. It’s loaded with all the essential tools, and it’s quite cost-effective. But if you’re looking to scale up, the Agency Unlimited Plan is your best choice. It’s like the VIP pass at a concert, giving you access to everything without any limitations. Not sure about committing? Remember that 14-day free trial I mentioned? It’s a great way to give it a try without any obligations. Lastly, they offer a Pro plan that includes “SaaS mode,” where you can white label the product under your brand. Fantastic!
Why Everyone’s Raving About It:
In a world full of sophisticated digital tools, Go High Level is like that all-in-one Swiss Army knife. There’s no need to switch between apps because it has everything under one roof. Whether you’re a newcomer or an experienced marketer, it’s super user-friendly. It’s not just about launching impressive campaigns; they ensure you understand their performance with top-notch analytics. There’s even a white-label feature for marketing agencies, so you can add your brand and impress your clients.
Here is a link to their 14-day free trial:
https://www.gohighlevel.com/?fp_ref=get-started-now.
Now try IPv6 only :P
Next time
Just do it properly and configure sshd securely. When you have a machine exposed to the internet, you should expect it to be attacked. If you really want to give the finger to bots, run endlessh on port 22 and keep sshd on a non-standard port. Stay safe.
Lmao thanks for this
yep… https://nullprogram.com/blog/2019/03/22/
reminds me of this
https://www.vice.com/en/article/d3b7na/the-story-of-lenny-the-internets-favorite-telemarketing-troll
Public key auth, and fail2ban on an extremely strict mode with scaling bantime works well enough for me to leave 22 open.
Fail2ban will ban people for even checking if the port is open.
Honest question, is there a good default config available somewhere or is what
apt install fail2ban
does good to go? All the tutorials I’ve found have left it to the reader to configure their own rules.Honestly the default config is good enough to prevent brute force attacks on ssh. Just installing it and forgetting about it is a definite option.
I think the default block time is 10 minutes after 5 failed login attempts in 10 minutes. Not enough to ever be in your way but enough to fustrate any automated attacks. And it’s got default config for a ton of services by default. Check your /etc/fail2ban/jail.conf for an overview.
I see that a recidive filter that bans repeat offenders for a week after 10 fail2ban bans in one day is also default now. So I’d say that the results are perfect unless you have some exotic or own service you need fail2ban for.
Yeah fail2ban has worked great for me
If Fail2Ban is so important, why the h*** does it not come installed and enabled as standard?!
Security is the number-1 priority for any OS, and yet stock SSHD apparently does not have Fail2Ban-level security built in. My conclusion is that Fail2Ban cannot therefore be that vital.