fail2ban - sshd 过滤器的附加正则表达式

fail2ban - sshd 过滤器的附加正则表达式

我目前正在尝试使用 fail2ban 版本 0.11.2-2(在 Debian 11 上运行)捕获基于证书的身份验证(证书正确但密码错误)的失败 SSH 登录尝试。

因此我创建了一个新文件,/etc/fail2ban/filter.d/sshd.local内容如下

[Definition]
failregex = %(known/failregex)s
            ^%(__prefix_line)sConnection closed by authenticating user <F-USER>.+</F-USER> <HOST> port \d+ \[preauth\]$

以便过滤规则不会在未来的更新中被覆盖。

为了测试这一点,我自己造成了这种情况几次,并且可以确认sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.local过滤器找到了日志条目:

  1. [88] ^(?:[])?\s*(?:<[^.]+.[^.]+>\s+)?(?:\S+\s+)?(?:kernel:\s?[ *\d+.\d+]:?\s+)?(?:@vserver_\S+\s+)?(?:(?:(?:[\d+])?:\s+[[(]?sshd(?:(\S+))?[])]?:?|[[(]?sshd(?:(\S+))?[])]?:?(?:[\d+])?:?)\s+)?(?:[ID \d+ \S+]\s+)?通过身份验证用户关闭连接 .+ port \d+ [preauth]$

但过滤器状态没有任何变化:

Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     0
|   - File list:        /var/log/auth.log
 - Actions
   |- Currently banned: 0
   |- Total banned:     0
    - Banned IP list:

您是否知道这里什么地方出了问题或者我还应该去哪里寻找?

答案1

可以确认fail2ban-regex ... /etc/fail2ban/filter.d/sshd.local过滤器找到了日志条目

默认过滤器(在模式中normal)将忽略它,并使用其他已经可用的 RE,这有助于考虑会话的 IP(对于在同一会话中发生但没有 IP 的其他消息),并且它会停止第一个 RE匹配消息。同时fail2ban-regex显示任何匹配的 RE,以及重复项。

因此您还会20) [88] ...在输出中看到。以及Lines: N lines, 88 ignored, X matched, Y missed

为了正确实现这一点(完全不需要进行本地修改):

  1. 要么设置filter = %(known/filter)s[publickey=any]监禁sshd(因为你的版本必须已经支持它,请参阅https://github.com/fail2ban/fail2ban/discussions/3176#discussioncomment-1768538了解更多信息)。
  2. 或者干脆被关mode = aggressivesshd监狱。

要正确处理这个问题(使用本地修改):

  1. 或者重写mdre-normal-other,例如在jail.local中:
[sshd]
filter = %(known/filter)s[mdre-normal-other=""]
failregex = %(known/failregex)s
            ^Connection closed by ...
  1. 或者在原始 RE 之前写入自定义 RE...请注意,最新的 fail2ban 版本会对它们进行重新排序(https://github.com/fail2ban/fail2ban/pull/3007):
failregex = ^Connection closed by ...
            %(known/failregex)s

不要%(__prefix_line)s在 中使用failregex,因为它已经在 中处理了prefregex,因此需要像这里这样写:

- ^%(__prefix_line)sConnection ...
+ ^Connection ...

相关内容