使用 InfluxDB 和 Telegraf 进行 Fail2ban 监控

导航至

本文由 Robert Hajek 撰写,他是位于布拉格的软件咨询公司 Bonitoo 的高级开发人员,同时也是 InfluxData 咨询合作伙伴

如果您的服务器在端口 22(SSH 服务器的默认端口)上对互联网开放,那么您可能会在每分钟内看到几条“密码失败”的记录(日志文件),这是由于机器人不断在网上搜索容易用常用密码破解的服务器。

但是,如果您的 auth.log 文件增长非常快,且 SSH 守护进程随机拒绝建立新的连接,那么可能有人将您的服务器标记为目标,进行协调的 SSH 暴力破解攻击。我一天之内就经历了来自 10k 多个不同 IP 地址的此类攻击。在这种情况下,SSH 守护进程变得不可靠,并开始随机拒绝新的连接。这可能会对其他依赖服务以及像自动备份、rsync 等管理任务造成危险。

一个替代方案是禁用端口 22 的互联网访问,只允许选定的 IP 地址,但这样做会降低灵活性。更好的选择是使用 Fail2ban 入侵防御软件框架,并监控其指标。这就是我创建 Fail2ban 监控模板 的原因。以下是 Fail2ban 和该监控模板的概述。

使用 Fail2ban 强化服务器安全性

Fail2ban 帮助保护您的服务器免受未经授权的访问尝试。使用 Fail2ban,您可以配置服务器自动阻止进行可疑活动的 IP 地址。Fail2ban 监控服务器日志文件中的入侵尝试,并在来自主机的预设失败次数达到后,自动阻止该主机的 IP 地址一段时间。

虽然 Fail2ban 在减少脚本攻击和僵尸网络的威胁方面特别有效,但它不能消除弱认证带来的风险。Fail2ban 监控模板是可视化 Fail2ban 指标的一个简单方法,这是一个 InfluxDB 模板。

介绍 Fail2ban 监控模板

与其他 InfluxDB 模板 一样,此模板免费且 易于设置。它允许您快速定义整个监控配置(数据源、仪表板和警报),在单个易于共享的开源文本文件中完成,可以使用单个命令将其导入 InfluxDB。我喜欢使用 Git 从中轻松设置模板:

influx apply -f https://raw.githubusercontent.com/influxdata/community-templates/master/fail2ban/fail2ban-template.yml -o my-org -t my-token

您只需将URL复制并粘贴到InfluxDB 2.0 UI中,即可开始使用。要安装此模板,请下载InfluxDB或注册您的免费InfluxDB云账户

Fail2ban监控模板的工作原理

Fail2Ban Monitoring Dashboard

模板的控制面板为每个服务和主机显示2个指标

  1. 失败的访问尝试次数 - 这里我们可以看到失败的登录活动
  2. 被禁止的IP地址数量 - 每个被禁止的IP地址是防火墙中的一条规则。后来我们发现,大量的此类规则(在我们的案例中,超过20k个唯一IP)会导致网络问题,因此您需要稍微调整jail.d/sshd.local中的Fail2ban配置如下
[sshd]
enabled   = true
maxretry  = 3
findtime  = 1d
bantime   = 3d
ignoreip  = 127.0.0.1/8

这意味着在1天的窗口内,有3次未经授权的尝试后,IP地址将被禁止3天,并且127.0.0.1/8不被禁止。

Telegraf Fail2ban输入插件将允许您收集和监控您指定时间内的失败和被禁止的IP地址。它使用Fail2ban收集失败和被禁止的IP地址的数量。插件收集的数据在模板的控制面板中进行了可视化。

使用此插件可能需要调整权限,这在Linux平台上可能会有所不同。运行Telegraf的用户必须具有运行“fail2ban-client status”命令的权限。在我们的案例中,我们不得不修改systemd设置

如何与开放的SSH端口共存的小贴士

SSH允许您通过命令行界面登录到远程计算机或服务器并控制它。然而,由于SSH暴露在互联网上,攻击者可能会尝试通过尝试各种用户名和密码组合来登录。以下是一些关于如何更好地保护您的SSH端口的提示

  • 使用基于SSH公钥的登录,在sshd_config中禁用基于密码的登录
  • 使用强密码并使用强密码保护您的私钥
  • 监控ssh守护进程
  • 监控您的auth.log的大小
  • 始终设置Fail2ban(默认设置对大多数设置都很有效)
  • 如果您想知道攻击者所在的位置,请查看这个Jupyter笔记本,它根据国家将"fail2ban-client status"中的IP列表分组。