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.

  • Decronym@lemmy.decronym.xyzB
    link
    fedilink
    English
    arrow-up
    9
    ·
    edit-2
    10 months ago

    Acronyms, initialisms, abbreviations, contractions, and other phrases which expand to something larger, that I’ve seen in this thread:

    Fewer Letters More Letters
    DNS Domain Name Service/System
    HTTP Hypertext Transfer Protocol, the Web
    IP Internet Protocol
    SSH Secure Shell for remote terminal access
    UDP User Datagram Protocol, for real-time communications
    VPN Virtual Private Network
    VPS Virtual Private Server (opposed to shared hosting)
    nginx Popular HTTP server

    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]

  • James@lemmy.ca
    link
    fedilink
    English
    arrow-up
    8
    ·
    2 years ago

    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.

    • devtimi@lemmy.world
      link
      fedilink
      English
      arrow-up
      4
      ·
      2 years ago

      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.

      • Sleepkever@lemm.ee
        link
        fedilink
        English
        arrow-up
        1
        ·
        2 years ago

        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.

    • JubilantJaguar@lemmy.world
      link
      fedilink
      English
      arrow-up
      0
      arrow-down
      3
      ·
      2 years ago

      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.

  • u_tamtam@programming.dev
    link
    fedilink
    English
    arrow-up
    3
    ·
    2 years ago

    Or, you know, just use key auth only and fail2ban. Putting sshd behind another port only buys you a little time.

    • nomadjoanne@lemmy.world
      link
      fedilink
      English
      arrow-up
      2
      ·
      2 years ago

      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.

      • marcos@lemmy.world
        link
        fedilink
        English
        arrow-up
        3
        ·
        2 years ago

        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.

        • aard@kyu.de
          link
          fedilink
          English
          arrow-up
          1
          ·
          2 years ago

          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.

    • MangoPenguin@lemmy.blahaj.zone
      link
      fedilink
      English
      arrow-up
      1
      ·
      2 years ago

      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.

      • u_tamtam@programming.dev
        link
        fedilink
        English
        arrow-up
        0
        ·
        2 years ago

        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

          • u_tamtam@programming.dev
            link
            fedilink
            English
            arrow-up
            0
            ·
            2 years ago

            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)

  • notabot@lemm.ee
    link
    fedilink
    English
    arrow-up
    3
    ·
    2 years ago

    You really shouldn’t have something kike SSHD open to the world, that’s just an unnecessary atrack surface. Instead, run a VPN on the server (or even one for a network if you have several servers on one subnet), connect to that then ssh to your server. The advantage is that a well setup VPN simply won’t respond to an invalid connection, and to an attacker, looks just like the firewall dropping the packet. Wireguard is good for this, and easy to configure. OpenVPN is pretty solid too.

    • douglasg14b@lemmy.world
      link
      fedilink
      English
      arrow-up
      2
      ·
      2 years ago

      You say this and are downvoted.

      While we are coming off the tail of Def Con where there where a plethora or small talks and live examples of taking advantage and abusing just this.

      • teawrecks@sopuli.xyz
        link
        fedilink
        English
        arrow-up
        2
        ·
        2 years ago

        Just trying to parse your comment, I assume your first “this” and second “this” are referring to different things, right?

      • TheLemming@feddit.de
        link
        fedilink
        English
        arrow-up
        0
        ·
        2 years ago

        I don’t understand your comment, what you are saying. Could you elaborate a bit, please? I’m interested why it’s a bad idea what previous comment suggested.

        Of course I can dig into DefCon videos and probably would do if needed, but perhaps you know what exactly the issue is

        • MaggiWuerze@feddit.de
          link
          fedilink
          English
          arrow-up
          1
          ·
          2 years ago

          The first this means the comment he answered to and the second one means ssh being used as an attack surface, being described in defCon talks

    • JDubbleu@programming.dev
      link
      fedilink
      English
      arrow-up
      0
      ·
      2 years ago

      I usually just run a ZeroTier client on my Pi connected to a private P2P network to solve this issue, and then have ProtonVPN over Wireguard for all internet traffic in and out of the Pi.

  • Feathercrown@lemmy.world
    link
    fedilink
    English
    arrow-up
    3
    ·
    2 years ago

    I opened a raw text channel on the Telnet port for a personal game engine project and someone tried to enable commands and do some shady stuff. Unfortunately for them, that’s not a valid chess move.

  • spagnod@lemmy.world
    link
    fedilink
    English
    arrow-up
    3
    ·
    2 years ago

    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.

  • z3bra@lemmy.sdf.org
    link
    fedilink
    English
    arrow-up
    2
    ·
    2 years ago

    I get what you say, and you’re definitely not wrong to do it. But as I see it, you only saved ~80Kib of ingress and a few lines of logs in the end. From my monitoring I get ~5000 failed auth per day, which account for less than 1Mbps average bandwidth for the day.

    It’s not like it’s consuming my 1Gbps bandwidth or threatening me as I enforce ssh key login. I like to keep things simple, and ssh on port 22 over internet makes it easy to access my boxes from anywhere.

    • aesir@lemmy.worldOP
      link
      fedilink
      English
      arrow-up
      1
      ·
      edit-2
      2 years ago

      ssh -p 12345 would leave your boxes accessible from anywhere too. Other blocks of IPs receive 10 times or more requests, as scanners can focus on blocks of ips from major providers.

      • z3bra@lemmy.sdf.org
        link
        fedilink
        English
        arrow-up
        0
        arrow-down
        1
        ·
        2 years ago

        Yeah I know, I just don’t really care about that traffic to bother changing it :) Also, I’m talking about a server hosted on Hetzner, so I feel like it’s scanned a lot.

    • oatscoop
      link
      fedilink
      English
      arrow-up
      1
      ·
      edit-2
      2 years ago

      I don’t get why people leave interfaces the public doesn’t need access to open to the public – especially SSH.

      Use a VPN if you need access to those interfaces from the “outside”. They’re stupidly easy to set up these days, particularly with Wireguard.

      • z3bra@lemmy.sdf.org
        link
        fedilink
        English
        arrow-up
        0
        arrow-down
        1
        ·
        2 years ago

        A VPN is easy to setup (and I have it setup by the way), but no VPN is even easier. SSH by itself is sufficiently secure if you keep it up to date with a sane configuration. Bots poking at my ssh port is not something that bother me at all, and not part of any attack vector I want to be secure against.

        Out of all the services I expose to the clear web, SSH is probably the one I trust the most.

        • GreenBottles@lemmy.world
          link
          fedilink
          English
          arrow-up
          0
          ·
          edit-2
          2 years ago

          I would generally agree with this a strong password and SSH without keys has never gone sideways for me and over 15 years of having public Linux servers. but I also make sure to install all security updates on a regular basis on any server no matter what SSH configuration is.

        • oatscoop
          link
          fedilink
          English
          arrow-up
          0
          ·
          edit-2
          2 years ago

          Defense in depth – maybe I’m paranoid, but just because something is unlikely doesn’t mean an extra layer of security isn’t advantageous. Particularly when I already have a VPN, so there’s little reason not to use it.

          Plus, my logs are easily checked as a side effect.

          • z3bra@lemmy.sdf.org
            link
            fedilink
            English
            arrow-up
            0
            ·
            2 years ago

            To each their own ! Security is a complex topic which usually resolves to adjusting the “security/annoyance” cursor to the best position.

            In my case the constraints of using a VPN simply outweighs the security benefits.

  • Clou42@feddit.de
    link
    fedilink
    English
    arrow-up
    2
    arrow-down
    1
    ·
    2 years ago

    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.

  • MoshpitDaddy@lemmy.world
    link
    fedilink
    English
    arrow-up
    1
    ·
    2 years ago

    I don’t know if it was mentioned already but how could I check if my ports are under “attack”? OPs graphic looks really nice

    • aesir@lemmy.worldOP
      link
      fedilink
      English
      arrow-up
      1
      ·
      2 years ago

      Hi, to check attacks you should look at the logs. In this case auth.log. Being attacked on port 22 is not surprising neither really troublesome if you connect via key pair.

      My graph was showing egress traffic, on any kind of server the traffic due to these attacks would have been invisible but on a backup server which has (hopefully) only ingress you can clearly see the volume of connections from attackers from bytes teansmitted

  • SheeEttin@lemmy.worldBanned
    link
    fedilink
    English
    arrow-up
    0
    ·
    2 years ago

    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.

    • lungdart@lemmy.ca
      link
      fedilink
      English
      arrow-up
      0
      ·
      2 years ago

      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.

      • ActionHank@sopuli.xyz
        link
        fedilink
        English
        arrow-up
        0
        ·
        edit-2
        2 years ago

        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.

  • Entheon@lemmy.world
    link
    fedilink
    English
    arrow-up
    0
    ·
    2 years ago

    What software did you use you monitor this? I am newish to self hosting and would like to secure my connection better.

    • aesir@lemmy.worldOP
      link
      fedilink
      English
      arrow-up
      0
      ·
      2 years ago

      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”

  • axum@kbin.social
    link
    fedilink
    arrow-up
    0
    ·
    2 years ago

    ITT: People who don’t understand Tailscale or are allergic to it for ‘reasons’

    • Don Corleone@lemmy.world
      link
      fedilink
      English
      arrow-up
      0
      ·
      2 years ago

      I have wireguard for other purposes but I also have ssh open on a different port. I don’t much understand the argument of exchanging ssh for wireguard. In the end, we’re just trading an attack vector for another.

      My ssh only allows connections from my user. If I’m using password auth, I also request a 2FA.

      Tail scale is also a good idea but I don’t like having my control plane under someone else’s control.

      • FrederikNJS@lemm.ee
        link
        fedilink
        English
        arrow-up
        1
        ·
        2 years ago

        The reason a VPN is better to expose than SSH, is the feedback.

        If someone tries connecting to your SSH with the wrong key or password, they get a nice and clear permission denied. They now know that you have SSH, and which version. Which might allow them to find a vulnerability.

        If someone connects to your wireguard with the wrong key, they get zero response. Exactly as if the port had not been open in the first place. They have no additional information, and they don’t even know that the port was even open.

        Try running your public IP through shodan.io, and see what ports and services are discovered.

      • 486@kbin.social
        link
        fedilink
        arrow-up
        1
        ·
        2 years ago

        There is quite a significant difference. An ssh server - even when running on a non-default port - is easily detectable by scanning for it. With a properly configured Wireguard setup this is not the case. As someone scanning from the outside, it is impossible to tell if there is Wireguard listening or not, since it simply won’t send any reply to you if you don’t have the correct key. Since it uses UDP it isn’t even possible to tell if there is any service running on a given UDP port.

    • entropicdrift@lemmy.sdf.org
      link
      fedilink
      English
      arrow-up
      0
      ·
      2 years ago

      Right? PiVPN is easy AF and uses WireGuard. No reason not to set up something yourself if you’re already selfhosting.

      • glasgitarrewelt@feddit.de
        link
        fedilink
        English
        arrow-up
        1
        ·
        2 years ago

        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?

        • entropicdrift@lemmy.sdf.org
          link
          fedilink
          English
          arrow-up
          0
          ·
          2 years ago

          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.

            • hatedbad@lemmy.sdf.org
              link
              fedilink
              English
              arrow-up
              0
              ·
              2 years ago

              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.