“集中式”fail2ban 仅禁止对本地主机的攻击

“集中式”fail2ban 仅禁止对本地主机的攻击

我正在尝试在收集我们其他服务器的身份验证日志的 rsyslog 服务器上运行 fail2ban。我感兴趣的是让通知作为第一步发挥作用。

我的问题是 fail2ban 仅在来自本地计算机(名为“sth-admin-log01”的日志服务器)的 auth.log 行上触发,而不会触发远程服务器。例如,此行出现 3 次就足以触发 fail2ban 操作:

Mar 27 10:21:28 sth-admin-log01 sshd[18516]: Failed password for root from 192.168.1.3 port 34234 ssh2

无论出现多少次,这一行都不会触发任何事情:

Mar 27 11:20:19 test-vm sshd[9772]: Failed password for root from 192.168.1.3 port 34631 ssh2

我尝试使用 fail2ban-regex 验证(默认)sshd.conf 过滤器,并且它与两条日志行完全匹配。

我在 Ubuntu 64 位 14.0.4.1 上使用 fail2ban 0.8.11-1。

有任何想法吗?

答案1

编辑:我的回答回答了对面的问题是什么:如何只禁止对本地主机的攻击。我在寻找“相反”的答案时遇到了这个问题,其他人可能也会遇到。

您需要更改 fail2ban 过滤器前缀以仅查看来自本地主机的行。

ssh(或任何服务)过滤器可以在您的系统上以不同的方式构建,但在我的系统上,我有fail2ban/filter.d/common.conf,它定义了__prefix_line,如下所示:

__prefix_line = %(__date_ambit)s?\s*(?:%(__bsd_syslog_verbose)s\s+)?(?:%(__hostname)s\s+)?(?:%(__kernel_prefix)s\s+)?(?:%(__vserver)s\s+)?(?:%(__daemon_combs_re)s\s+)?(?:%(__daemon_extra_re)s\s+)?

上面的关键部分是如何__hostname定义的。它可能默认为仅匹配任何字母数字字符串:

__hostname = \S+

如果您将其更改为您的主机的主机名,fail2ban 将只匹配包含您的主机的主机名的行。

相关内容