我刚刚在CentOS服务器上安装了fail2ban,以回应SSH蛮力企图。 fail2ban的sshd.conf文件中的默认正则expression式不匹配audit.log中的任何条目,这是SSH似乎logging所有连接尝试的地方,所以我试图添加一个匹配的expression式。
我想匹配的string如下所示:
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)'
正在尝试使用的正则expression式是:
^.*addr=<HOST>, terminal=sshd res=failed.*$
我已经使用regextester.com和regexr来尝试构build正则expression式。 testing人员给了我这个正则expression式的匹配: ^.*addr=\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}, terminal=sshd res=failed.*$但是fail2ban-regex抱怨如果我不在正则expression式中使用<HOST>标签。 但是,使用^.*addr=<HOST>, terminal=sshd res=failed.*$给我0个匹配。
在这一点上,我完全卡住,我将不胜感激任何援助。 我在做什么错在正则expression式我想要使用?
显然这是一个RTFM的情况。 在挖了一段时间后,我在fail2ban网站上发现了一个页面,它指出每行有两个正则expression式匹配,一个用于时间戳,一个用于时间戳之后的其余行。 audit.log中的时间戳是Epoch格式,显然是第一次正则expression式匹配失败。 使用fail2ban-regex比较/ var / log / secure到我的fail2ban sshd.conf文件导致所需的行为。
正确的解决scheme是将我的jail.conf的相应部分指向/ var / log / secure。
对于那些还想制作自己的正则expression式的人来说, 这一部分有很多很好的信息,其中包括最终帮助我解决这个问题的一些小技巧:
为了使日志行匹配您的failregex,它实际上必须匹配两部分:行的开始必须匹配时间戳记模式或正则expression式,行的其余部分必须匹配您的failregex。 如果failregex以前导^为锚点,那么锚点指的是在时间戳和中间空白之后的行的其余部分的开始。
我希望我的RTFM时刻能够帮助某个人。