最近租了一台独立服务器,让技术人员帮助我安装了VMware ESXi,以便充分利用其性能。然而当我第二天尝试登录这台服务器的时候,却出现了密码错误的提示。无论是Web、客户端还是SSH,均提示密码错误。

排查流程

错误如图所示:

出现这一错误后,我最初判断是ESXi出现了故障。于是我立刻使用服务器提供商所提供的IPMI控制面板对服务器进行了重启,重启后立刻登录服务器,登录成功。

成功登录服务器后,我立即查看日志,发现了大量的登录失败事件:

(忽视时间,租的是二手服务器,BIOS电池可能没电了)

我猜想,ESXi是否有类似Fail2Ban这样的防暴力破解软件,导致了它在密码校验失败多次后,拒绝了所有的密码校验请求,并统一返回『密码错误』的提示。

原因

在查阅官方文档后,我的猜想得到了证实。

来自全球的攻击者们无时不刻地使用各种各样工具尝试爆破暴露22端口的服务器,在短短24小时内,我的服务器就接受了来自全世界近7000次的登录请求。不断地请求,使得ESXi的密码保护措施被持续触发,也就导致了我无法正常登录服务器。

ESXi 帐户锁定行为
从 vSphere 6.0 开始,系统将支持对通过 SSH 和通过 vSphere Web Services SDK 进行的访问进行帐户锁定。直接控制台界面 (DCUI) 和 ESXi Shell 不支持帐户锁定。默认情况下,允许最多 10 次尝试,当这些尝试均失败后,才会锁定帐户。默认情况下,帐户将在两分钟后解锁。

解决方案

注意,此处的解决方案仅限VMware ESXi 6.x,其他版本可能与以下所述有一定出入,具体操作请以官方知识库为准。

关闭SSH

这是最直接的方法。ESXi为我们提供了一套非常好用的Web控制面板,因此一般情况下我们并不需要SSH。
关闭SSH的方法很简单:
– 登录Web控制面板
– 点击操作->服务->禁用安全Shell(SSH)

将服务器与外网隔离

此方法最为安全,但是需要有足够的设备条件,因此在租用服务器的情况下,较难实现(云服务器会稍微好一点,但也会多花钱)。
如果设备允许,可以使用VPN的方式来连接服务器,这样子平衡了便捷与安全,是最佳选择。
搭建VPN也有几种方案:
– 利用ESXi本身的虚拟化功能,虚拟出一个VPN服务器
– 直接在ESXi上搭建一个VPN服务器
– 将ESXi置于内网中,不提供公网IP

具体使用哪种方案,需要依各位的实际情况而定。

配置IP白名单

此方法适用于有独立IP的情况(比如有一台固定IP的VPN服务器)。
配置IP白名单的方法:
– 登录Web控制面板
– 点击网络->防火墙规则
– 针对所需的端口配置白名单IP

关闭错误密码锁定机制

不推荐使用该方法
上面所提到的官方文档中,有调整错误密码重试行为的相关参数,将Security.AccountLockFailures设置为0即可关闭账户锁定机制。
关闭方法如下:
– 登录Web控制面板
– 点击管理->系统->高级设置
– 搜索Security.AccountLockFailures,将值修改为0