我的 Ubuntu 服务器上的 sshd 服务不断受到来自各种 IP 和用户 id 的攻击。
根据/var/log/auth.log
文件,未知 ID 和 IP 地址导致的失败有三种不同类型:
Disconnected from invalid user...
Connection closed by invalid user...
Connection closed by xxx.xxx.xxx.xxx
这三者之间有什么区别? 这些是否都表明登录成功(未经授权)? 特别是最后一个...
我是假设所有这些都是失败的尝试,因为我已将 SSH 服务器配置为需要来自非 LAN IP 的公钥,并且限制登录到只有一个非 root 用户 ID。
但事实上,我不知道如何验证这些安全预防措施是否设置正确,我的公钥是否被泄露,或者我的服务器密码认证机制是否被泄露。所以我不能肯定地说这些都是失败的尝试。
我尝试使用fail2ban
来阻止来自特定 IP 的重复攻击,但这次失败了。首先,不到 24 小时,攻击者就开始轮流使用数百个唯一 IP 地址。其次(更令人担忧的是)fail2ban
似乎没有承认导致的重复尝试Connection closed by xxx.xxx.xxx.xxx
。
答案1
消息:
Disconnected from invalid user
Connection closed by invalid user
两者都表示使用服务器上不存在的用户名登录失败。区别只是连接断开方式的一个微不足道的细节。
使用现有用户名的失败尝试将被记录为:
Connection closed by authenticating user
成功登录将被记录为:
Accepted publickey for
信息:
Connection closed by <ipaddress>
(未提及任何用户)表示连接到您的服务器的 ssh 端口时未尝试进行身份验证,即实际登录。这些扫描通常用于收集开放的 ssh 端口和他们使用的 ssh 服务器版本,以便查找具有已知漏洞的服务器。由于重复此类尝试不会增加风险,因此fail2ban
阻止它们没有多大意义。
答案2
与@tilman-schmidt 达成协议,我这边只有几点意见(关于 fail2ban 等)...
OpenSSH 人员不断改变日志记录行为,因此 fail2ban 默认不会考虑它(它还取决于断开连接发生的位置,例如在预认证阶段或提供用户名之后,以及您的 sshd 中允许哪些认证方法以及“入侵者”行为)。
我至少会在 sshd_config 中设置 LogLevel VERBOSE,如下所述/etc/fail2ban/filter.d/sshd.conf
不到 24 小时,攻击者就开始轮换数百个不同的 IP 地址
这与 fail2ban 的使用无关 - 扫描器在找到 sshd 侦听器后,会将其“发布”到其中的某个列表中,以便可以开始更深入的扫描(例如使用分布式僵尸网络)。这是任何向外部开放端口的服务器的悲惨命运。
您可以尝试将 ssh 端口更改为其他端口,但这只能避免一半的脚本小子(如果您禁止端口扫描尝试),基本上不是万能药。但您可以至少在短时间内(最多几个月)大幅减少入侵者的数量。在bantime.increment
fal2ban 中启用(用于 sshd jail 或默认情况下)肯定有帮助。
fail2ban 似乎无法确认导致连接被关闭的重复尝试
这不太正确。您必须设置mode = aggressive
jailsshd
以jail.local
允许 fail2ban 考虑任何类型的“攻击”(不仅仅是身份验证问题),端口扫描器和类似 DoS 的东西也会发生此类攻击。
您可以使用以下命令查看 fail2ban 使用当前过滤器究竟找到了什么(请注意matched
结果的最后一行):
fail2ban-regex /var/log/auth.log 'sshd[mode=aggressive]'
答案3
我将此行添加到 \etc\fail2ban\filter.d\sshd.conf
^Connection closed by <HOST>%(__on_port_opt)s%(__suff)s
你可以用这个来测试它:
fail2ban-regex 'Oct 30 15:10:58 ubuntu sshd[12211]: Connection closed by 0.0.0.0 port 33650 [preauth]' /etc/fail2ban/filter.d/sshd.conf