我如何格式化这个正则表达式以便它可以在 fail2ban 中工作?

cha*_*kom 7 security linux regex fail2ban centos5

我刚刚在 CentOS 服务器上安装了 fail2ban 以响应 SSH 蛮力尝试。fail2ban 的 sshd.conf 文件中的默认正则表达式与 audit.log 中的任何条目都不匹配,这是 SSH 似乎记录所有连接尝试的地方,所以我试图添加一个匹配的表达式。

我试图匹配的字符串如下:

type=USER_LOGIN msg=audit(1333630430.185:503332): user pid=30230 uid=0 auid=500
 subj=user_u:system_r:unconfined_t:s0-s0:c0.c1023 msg='acct="root": exe="/usr
/sbin/sshd" (hostname=?, addr=<HOST IP>, terminal=sshd res=failed)'
Run Code Online (Sandbox Code Playgroud)

我试图使用的正则表达式是:

^.*addr=<HOST>, terminal=sshd res=failed.*$
Run Code Online (Sandbox Code Playgroud)

我已经使用 regextester.com 和 regexr 来尝试构建正则表达式。测试人员给了我这个正则表达式的匹配项:^.*addr=\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}, terminal=sshd res=failed.*$但是如果我不在<HOST>正则表达式中使用标签,fail2ban-regex 会抱怨。但是,使用^.*addr=<HOST>, terminal=sshd res=failed.*$给了我 0 个匹配项。

在这一点上,我完全被困住了,我将不胜感激任何帮助。我在尝试使用的正则表达式中做错了什么?

cha*_*kom 10

显然,这是 RTFM 的一个案例。在挖掘了一段时间后,我在fail2ban网站上找到了一个页面,该页面指​​出每行进行两个正则表达式匹配,一个用于时间戳,另一个用于时间戳之后的其余行。audit.log 中的时间戳采用 Epoch 格式,显然在第一个正则表达式匹配失败。使用fail2ban-regex 将/var/log/secure 与我的fail2ban sshd.conf 文件进行比较导致了所需的行为。

正确的解决方案是将我的 jail.conf 的适当部分指向 /var/log/secure。

对于仍然想制作自己的正则表达式的人,本节有很多很好的信息,包括最终帮助我解决这个问题的这个小花絮:

为了使日志行与您的 failregex 匹配,它实际上必须匹配两部分:该行的开头必须匹配时间戳模式或正则表达式,该行的其余部分必须与您的 failregex 匹配。如果failregex 以前导^ 为锚定,则锚定指的是该行剩余部分的开始,在时间戳和中间空格之后。

我希望我的 RTFM 时刻能帮助某人下线。