![如何阻止 ssh 机器人尝试以 root 身份进行 SSH 连接](https://linux22.com/image/893121/%E5%A6%82%E4%BD%95%E9%98%BB%E6%AD%A2%20ssh%20%E6%9C%BA%E5%99%A8%E4%BA%BA%E5%B0%9D%E8%AF%95%E4%BB%A5%20root%20%E8%BA%AB%E4%BB%BD%E8%BF%9B%E8%A1%8C%20SSH%20%E8%BF%9E%E6%8E%A5.png)
我目前的解决方案是使用 fail2ban 并在 sshd 配置中禁止以 root 身份使用 SSH。在某些情况下,它的效果不如我需要的那样好。尤其是在网关服务器中,它们的内存和磁盘空间有限(因为它们应该是轻量级的)
在 sshd 配置中禁用以 root 身份登录,仍然允许机器人连接,指定以 root 身份登录,并尝试 3 次以上。Fail2ban 会在 5 次失败后阻止其 IP。
但是,持续不断的机器人数量会在任何时候导致内存中占用 8 个 sshd 线程,3GB 的 auth.log 失败(占我磁盘空间的 30%),fail2ban 过滤和处理所有失败需要巨大的内存开销,而且我们尝试登录时响应缓慢,因为每个连接必须首先过滤 50,000 多个 ip 块,并且由于系统需要处理大量请求,用于登录和安全的 20-48MB 内存被交换。
首选解决方案是:“当 SSH 连接尝试登录且用户=root 时”,然后“sshd 断开连接”。任何指定用户 root 的尝试都会导致连接断开。
这将减少不必要的处理,以过滤掉所有暴力攻击。我不能使用仅密钥访问,因为它会导致登录绕过所需的双因素身份验证。
答案1
我个人比较喜欢改一下ssh监听端口,这样可以避免这个问题,而且操作起来也很简单。
答案2
事实证明,fail2ban 可以修改为将此事件作为不需要的事件。在 filter.d 中更改/添加 ssh 配置文件以包含以 root 身份访问的过滤器:https://serverfault.com/questions/340565/how-to-block-all-root-login-attempts-using-denyhosts-and-or-fail2ban
然后,禁止失败将更快地响应这些登录,但不如当场删除它们那么快(事实证明这需要更改代码并重新编译 sshd)
将禁止时间缩短到几个小时可以避免防火墙必须筛选大量的被阻止 IP 列表,从而减少开销和连接时间。失败的密码和以 root 身份登录的禁止时间可以单独配置。这样,如果用户启用了 CAPS,则只需几分钟,但暴力破解机器人会被阻止 2 小时。(注意到默认禁止时间为 10 分钟,大多数机器人只需等待 10:01 分钟即可恢复尝试)
降低日志级别可减少所有日志文件及其内存开销。减少 fail2ban 查找时间,可减少 fail2ban 在内存中保存的日志文件数量!
拥有正确的设置非常重要,因为所有这 3 个系统都会产生内存使用三角关系!不及时阻止机器人会导致日志文件过大,这意味着 rsyslog 会使用更多内存。Fail2ban 将这些日志保存在内存中以供扫描(# of attacks/second *
通过findtime
)。并且 sshd 线程会从机器人被允许进行的所有并发尝试中备份。如果设置bantime
得太短,机器人会立即返回并创建更多 sshd 线程。如果bantime
设置得太长,防火墙必须运行内存中保存的一长串权限列表。
bantime: 5-10 minutes for bad passwords
bantime: 2-6 hours for attempts as root (not days, certainly not 99999999)
log-files: Warn (not info!)
findtime: 5-15 minutes on SSH (log memory usage reduced by quick bans)
maxretry: 2-3
Also config the max attempts permitted in sshd to be 2 because it will dump them to the watched log file much faster
暴力攻击即将发生的变化(这也是为什么对我们来说更难)是同时运行它们。如果您要在进行几次尝试后阻止它们,那么请启动 20x ssh 连接并一次尝试 20 次暴力攻击!上述所有配置仅对单个 ip、单个连接攻击有效。如果同时运行多个 ssh 连接,它们的效果会降低。
可以在防火墙处阻止此操作,以防止同时来自给定 IP 的超过 N 个连接:https://serverfault.com/questions/275669/ssh-sshd-how-do-i-set-max-login-attempts