我想知道是否可以在 fail2ban 中使用一些规则/脚本来检测机器人,不仅仅是通过在给定的秒数内进行最大重试,而是通过识别每个 IP 的一些模式:例如,假设一个 IP 每 10 到 15 秒访问一个页面,但另一个 IP 每 30-45 秒访问一次。
我对使用 pyautogui 脚本的用户遇到了问题,并且我无法检测到机器人背后的 IP,因为每个人都有不同的模式。
另外,我使用 Sucuri,它在此用例中的保护率为 0%。我无法切换到其他防火墙服务,因为这个服务只有 6 个 IP(例如,CloudFlare 有超过 20 个),并且我的服务器提供商中只有 10 条防火墙规则(也是最大 IP 数),要列入白名单(我通过 IP 来保护自己,而不仅仅是通过 DNS)。
还有其他工具可以做到这一点吗?提前感谢您的帮助和建议!
致以最诚挚的问候!
答案1
fail2ban 擅长检测重复发生的已知不良模式。多次 ssh 身份验证失败与正则表达式匹配,并被禁止。
fail2ban 不擅长检测未知模式,并且没有明显的机制来仅基于时间触发。将所有操作标记为失败并在操作中对其进行分类(您需要编写)似乎很糟糕。到处都是误报,对于那些倾向于每 15 秒自然点击一次的人怎么办?通过 fail2ban jails 发送所有请求对性能不利。而那些不想看起来像机器人的用户可以掩盖非人性化的精确时间模式。wget --random-wait
例如,在命令行工具中可用。
因此,您对工具的搜索仍在继续。您需要进行此选择,我们不对 Server Fault 提出建议。可能集中式日志记录系统是合适的,用于解析和存储事件。考虑它可能需要回答的查询,例如“列出我们所有基础设施中包含某些 IP 的消息”。足够花哨的日志记录工具称自己为安全信息和事件管理 (SIEM)。甚至具有自动化工作流程的更花哨的工具也开始称自己为安全编排、自动化和响应 (SOAR)。然而,这些可能太多了,也许当机器人似乎很糟糕时,您只是临时地 grep 日志文件。
个位数的 IP 允许列表似乎很小。您已经发现一项服务 (CloudFlare) 本身就超过了这个数字。随着 IPv4 空间越来越分散,以及服务和应用程序的增加,实际允许列表不会变得更小。