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 时刻能帮助某人下线。