基于 ssh 密钥的身份验证有多安全

信息安全 SSH RSA 打开sh centos
2021-08-28 20:35:46

我有一个新安装(和更新)的用于测试的 Centos 7 服务器。

我为 ssh 实现了基于 RSA 密钥的身份验证并设置PermitRootLoginwithout-password

当我今天早上登录时,我跑过去netstat -plant在 22 端口上发现了来自中国和法国的几个已建立的连接。

我很难相信一个 4096 位的 rsa 密钥可以在一个晚上的时间内被破解。

是否有任何利用/漏洞可用于规避 OpenSSH 的基于密钥的身份验证?

基于密钥的身份验证是允许使用 SSH 访问的最佳选择吗?有哪些替代方案?

3个回答

当我今天早上登录时,我运行了 netstat -plant 并在 22 端口上发现了几个来自中国和法国的已建立连接。

你看到他们多久了?

如果您在 Internet 上有一台 SSH 服务器,人们将不断地扫描它并尝试对常用密码进行字典攻击。因此系统将连接,尝试多个密码,并在尝试之间强制延迟,因为您的系统想要限制暴力攻击。

这意味着 TCP 连接“建立”了几秒钟甚至几分钟。它们不是经过身份验证的 SSH 会话,它们只是 TCP 连接。

来,看:

$ netstat -tn | grep :22 | egrep -v "[my address]"
tcp        0   1080 192.168.1.2:22         123.183.209.136:25690   ESTABLISHED
tcp        0      1 192.168.1.2:22         123.183.209.136:40117   FIN_WAIT1

几分钟后:

$ netstat -tn | grep :22
tcp        0   1080 192.168.1.2:22         123.183.209.136:48456   ESTABLISHED

在第一个快照中,我们看到有一个已建立的会话,而一个仍在被拆除。几分钟后,有一个新会话(注意客户端端口已更改为 48456)。所以这个人不断地打开一个 TCP 连接,试图进行身份验证,当这个连接因尝试次数过多而关闭时,他们只会打开另一个连接。

我很难相信一个 4096 位的 rsa 密钥可以在一个晚上的时间内被破解。

是否有任何利用/漏洞可用于规避 OpenSSH 的基于密钥的身份验证?

基于密钥的身份验证是允许使用 SSH 访问的最佳选择吗?有哪些替代方案?

不要惊慌。观察连接;除非您在很长一段时间内看到最后一个,否则您可能不必担心。

您还可以检查last输出以查看是否有人实际登录,并关联他们的源地址(例如,不要担心从登录的 IP 登录):

$ last
gowenfawr pts/0        192.168.1.3      Thu Aug  3 18:55   still logged in
gowenfawr pts/0        172.16.43.21     Thu Aug  3 03:29 - 03:29  (00:00)
gowenfawr pts/0        172.16.43.21     Thu Aug  3 03:19 - 03:29  (00:09)
gowenfawr pts/0        172.16.43.21     Thu Aug  3 03:04 - 03:06  (00:02)
gowenfawr pts/1        192.168.1.3      Wed Aug  2 19:44 - 21:09  (01:25)

wtmp begins Wed Aug  2 19:44:26 2017

当然,如果有人确实last破坏了您的系统,那么您无论如何都无法信任netstat

在可预见的未来,RSA 密钥已经足够安全了,4096 位甚至可能是矫枉过正

如果你担心你可以考虑设置类似fail2ban的东西,但如果你不允许密码验证并且你有> = 2048位的RSA密钥,你很好。

我希望如果您检查您的身份验证日志,您会从这些地址中发现很多身份验证失败,这很正常。现在我面向公众的 ssh 服务器有一个 14MB 的身份验证日志,有超过 82,000 次失败的 root 登录尝试:

sudo grep -i root /var/log/auth.log -c
82023

只要您正确设置它,密钥就不会被破解。

如果它们只出现在 netstat 中,那么它们可能只是在 SSH 登录提示符上。

确保在您的文件中禁用隧道明文密码,/etc/ssh/sshd_config以防止正常密码登录。如果您丢失了密钥,请确保您有其他方法可以进入您的服务器。

PermitRootLogin应设置为no您不应该以 root 身份登录,尤其是通过 SSH。使用另一个具有 sudo 访问权限的帐户。

SSH 密钥身份验证是对 SSH 服务器进行身份验证的最佳方式,尤其是向 Internet 公开的 SSH 服务器。还有一些软件可以使用 Google Authenticator 对 SSH 登录实现双重身份验证。这是值得研究的事情。