linux fail2ban 无法捕获使用 postfix 进行特定失败的身份验证

linux fail2ban 无法捕获使用 postfix 进行特定失败的身份验证

我打开了 journalctl,发现一个罪犯不断用 postfix 中的身份验证失败来攻击我。我默认启用了标准 postfix-sasl 过滤器,据我所知,它运行良好。

它没有抓住这个违规者,当然我很好奇为什么。所以我将合法的后缀禁令与此特定条目进行了比较,只注意到 LOGIN 不是大写的。

合法禁令 =Jul 03 11:47:30 domain.ca postfix/smtpd[9298]: warning: unknown[87.120.84.169]: SASL LOGIN authentication failed: authentication failure

没有抓住 =Jul 03 11:50:15 domain.ca postfix/smtpd[9554]: warning: unknown[190.119.186.242]: SASL login authentication failed: authentication failure

所以我进入了我的过滤器/etc/fail2ban/filter.d/postfix-sasl.conf

添加了这个:

failregex = ^%(__prefix_line)swarning: [-._\w]+\[<HOST>\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed(: [ A-Za-z0-9+/]*={0,2})?\s*$
                ^%(__prefix_line)swarning: [-._\w]+\[<HOST>\]: SASL (?:login|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed(: [ A-Za-z0-9+/]*={0,2})?\s*$

由此:

failregex = ^%(__prefix_line)swarning: [-._\w]+\[<HOST>\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed(: [ A-Za-z0-9+/]*={0,2})?\s*$

我所做的就是改变登录登录并抓获了这名罪犯。

由于我对 Python 正则表达式很不擅长,而且我找不到简单的文档。我该如何简单地添加一行来捕捉这些输入变量的大小写(?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5)

ps 由于这是 postfix 生成的日志,为什么它会为一个日志输入 LOGIN,为另一个日志输入 login ...不同类型或方法的身份验证失败,并且作者为每个日志写了不同的大写字母的条目?

谢谢

答案1

我该如何简单地添加一行来捕获大写和小写字母?

甚至可能完全不区分大小写。如果您的 fail2ban 使用 python3(现在大多如此) - 这会将括号中的本地部分切换为大小写敏感。

- (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5)
+ (?i:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5)

或者为了使整个 RE 不区分大小写(或对于 python2),只需(?i)在 RE 的开头添加全局标志:

- ^%(__prefix_line)swarning: ...
+ (?i)^%(__prefix_line)swarning: ...

既然这是 postfix 生成的日志,为什么它会为一个日志输入 LOGIN,为另一个日志输入 login...

如果不检查该日志条目的整个源代码,就很难说。在这种情况下,这可能只是客户端请求中提供的原始外部数据,lOgIn或者PlAiN理论上也是可能的,因为根据 RFC 5321,SMTP 命令动词不区分大小写(不知道 postfix 到底允许什么)。

相关内容