如何保护 SSH?

Ali*_*Ali 17 linux ssh ddos

我检查 /var/log/secure 并且我有这些日志:

Jul  9 13:02:56 localhost sshd[30624]: Invalid user admin from 223.196.172.1 port 37566
Jul  9 13:02:57 localhost sshd[30624]: Connection closed by invalid user admin 223.196.172.1    port 37566 [preauth]
Jul  9 13:03:05 localhost sshd[30626]: Invalid user admin from 223.196.174.150 port 61445
Jul  9 13:03:05 localhost sshd[30626]: Connection closed by invalid user admin 223.196.174.150 port 61445 [preauth]
Jul  9 13:03:16 localhost sshd[30628]: Invalid user admin from 223.196.169.37 port 62329
Jul  9 13:03:24 localhost sshd[30628]: Connection closed by invalid user admin 223.196.169.37 port 62329 [preauth]
Jul  9 13:03:29 localhost sshd[30630]: Invalid user admin from 223.196.169.37 port 64099
Jul  9 13:03:30 localhost sshd[30630]: Connection closed by invalid user admin 223.196.169.37 port 64099 [preauth]
Jul  9 13:03:45 localhost sshd[30632]: Invalid user admin from 223.196.174.150 port 22816
Jul  9 13:03:46 localhost sshd[30632]: Connection closed by invalid user admin 223.196.174.150 port 22816 [preauth]
Jul  9 13:06:17 localhost sshd[30637]: Invalid user admin from 223.196.168.33 port 33176
Jul  9 13:06:17 localhost sshd[30637]: Connection closed by invalid user admin 223.196.168.33 port 33176 [preauth]
Jul  9 13:07:09 localhost sshd[30639]: Invalid user admin from 223.196.173.152 port 61780
Jul  9 13:07:25 localhost sshd[30641]: Invalid user admin from 223.196.168.33 port 54200
Jul  9 13:07:26 localhost sshd[30641]: Connection closed by invalid user admin 223.196.168.33 port 54200 [preauth]
...
Run Code Online (Sandbox Code Playgroud)

似乎有人试图通过 SSH 登录。我禁用 root 用户登录并启用公钥/私钥登录,但这是 DDoS 攻击吗?它是否使用 RAM/CPU?

我该怎么办?

Sim*_*ter 45

这只是人们扫描易受攻击的服务器时正常的互联网背景噪音。

您可以添加一个 iptables 规则来限制传入连接的速率(例如四分之四)以进行简单修复(但如果您打开太多连接或有人伪造源自您地址的 SYN 数据包,这也会将您锁定):

iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 240 --hitcount 4 --name ssh-v4 --mask 255.255.255.255 --rsource -j REJECT --reject-with tcp-reset
iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name ssh-v4 --mask 255.255.255.255 --rsource -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

正确的解决方案是使用像fail2ban这样的工具来解析登录失败的日志文件并按需创建防火墙规则——需要做更多的设置工作,但它需要一个已建立的连接和一个失败的身份验证才能触发,所以它会不会像简单的方法那样对伪造的连接尝试或成功登录做出反应。

  • @njzk2 只会给自己带来不便。机器人迟早会找到您的备用 ssh 端口。 (11认同)
  • 我有一个基础设施运营商向我推荐我很久以前更改了 sshd 端口,我认为这完全是垃圾,就像这里的许多评论一样,但我还是这样做了。我们仍然得到垃圾。但是与我们 _havent_ 改变的服务器相比,端口,它们实际上是空闲的。已经 15 年了,没有多少 Shodan-fu 将大量机器人指向我们的服务器。天啊。这是*不是*默默无闻的安全性。这只是默默无闻。安全性来自使用强 ssh 密钥进行身份验证而不是密码。也为fail2ban +1 :) (11认同)
  • @LinuxSecurityFreak,有 [shodan](https://shodan.io)。 (7认同)
  • 更改ssh端口怎么样? (4认同)
  • 需要做更多的工作吗?在 Debian 上,`apt-get install fail2ban` 将为您提供合理的默认值保护 (3认同)
  • @MichaelHampton 有 65535 个端口,我以某种方式怀疑机器人会占用这样的范围,但我可能错了。你知道这一点吗? (3认同)
  • @jonbentley 必须记住在要用于连接的每个客户端中更改它。默默无闻的安全根本没有安全性,您可以以不到 50 美元的价格租用几台 AWS 机器,它们将在几个小时内扫描整个 IPv4 地址空间。最好只是阻止罪犯而不是试图躲避他们 (3认同)
  • @hardillb“必须记住” - 这似乎非常特定于用例。我认为大多数人不会过于频繁地切换到新客户端(或者如果他们的配置可能在他们的控制范围内),并且可以简单地存储一次设置然后忘记它(如果您配置新机器,则使用例如 Ansible 或 Stow频繁地)。“隐匿的安全就是不安全”是一种常见的误解。*就其本身而言*它并不安全,但它是纵深防御的有效组成部分,如果使用得当,可以带来一些轻微的好处。 (2认同)

小智 9

正如@Simon Richter 所提到的,这只是互联网背景噪音,您不必担心。您必须确保以下几点:

更改端口将使问题消失,但它是通过默默无闻安全性,它可以在不提供任何安全的情况下产生安全错觉。

以下是一些围绕 SSH 的其他建议,以及对主流“最佳实践”论点的反驳论点。