首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我似乎无法获得一个Regex for to Fail2Ban来使用Opensmtpd?我能得到一份健康检查吗?

我似乎无法获得一个Regex for to Fail2Ban来使用Opensmtpd?我能得到一份健康检查吗?
EN

Server Fault用户
提问于 2020-12-26 15:57:56
回答 1查看 540关注 0票数 6

我让openSMPTD运行一个邮件服务器。虽然我怀疑他们会进来,但我现在似乎被野蛮人强行攻击了。尽管如此,我想通过不断的登录尝试来减轻服务器的负担。我正在配置fail2ban来禁止违法者。然而,我不能完全得到正确的正则表达式,这让我发疯了!我看到了freeBSD论坛上的这个链接关于fail2ban的正则表达式来捕捉它。然而,即使是该regex似乎也没有捕捉到它们提供的示例文本。我编辑了他们的regex,但没有结果。我希望有人能给我一些指点,因为我在雷鬼比赛中超弱。

我的日志文件看起来如下:

代码语言:javascript
复制
Dec 25 20:03:29 frick mail.info smtpd[16849]: f7fa148a43b34578 smtp connected address=193.169.254.42 host=<unknown>
Dec 25 20:03:30 frick mail.info smtpd[16849]: f7fa148a43b34578 smtp tls ciphers=TLSv1.2:ECDHE-RSA-AES128-SHA256:128
Dec 25 20:03:30 frick mail.info smtpd[16849]: f7fa148a43b34578 smtp authentication user=info result=permfail
Dec 25 20:03:30 frick mail.info smtpd[16849]: f7fa148a43b34578 smtp failed-command command="AUTH LOGIN (password)" result="535 Authentication failed"
Dec 25 20:03:30 frick mail.info smtpd[16849]: f7fa148a43b34578 smtp disconnected reason=quit
"

因此,让我们将其分解:显示它们是野蛮强迫的线条是:

代码语言:javascript
复制
f7fa148a43b34578 smtp failed-command command="AUTH LOGIN (password)" result="535 Authentication failed"

我们看到认证失败的地方。然而,奇怪的是,openSMTPD并没有在该行中包含他们的ip地址:我们必须在其上方查找一个可变数字:

代码语言:javascript
复制
f7fa148a43b34578 smtp connected address=193.169.254.42 host=<unknown>

我们可以看到罪犯的ip地址。好吧,很公平。选择所有文本的当前正则表达式是:

^.*smtp connected address=\w[1-9.]* host=[a-z<>]*\n*[a-zA-Z0-9_.-\s\]\[:=<>"()]*

虽然fail2ban想要一个更细粒度的。我不确定我是否有一个干净的方法,以获得批准的ip地址禁止,因为这是可能的两个人一次连接,然后错误的线路被拿起禁止。

有什么建议吗?

EN

回答 1

Server Fault用户

发布于 2021-01-04 19:06:13

使用多行正则表达式的更新和更简洁的方法是使用<F-...>标记,这些标记是在0.10.0版本中引入的,不幸的是,这些标记仍然没有很好的文档。

代码语言:javascript
复制
[Definition]

prefregex = <F-MLFID>: \w{16} </F-MLFID><F-CONTENT>.+</F-CONTENT>$

failregex = <F-NOFAIL>smtp connected address=(?:<IP6>|<IP4>)</F-NOFAIL>
            smtp failed-command command="AUTH LOGIN \(password\)" result="535 Authentication failed"
            <F-NOFAIL><F-MLFFORGET>smtp disconnected</F-MLFFORGET></F-NOFAIL>

解释

预筛选器regex用于预处理每一行并捕获会话id (我假设它是f7fa148a43b34578部分),并识别跨越多行的相同会话。<F-CONTENT>中的文本是我们感兴趣的部分,它将由failregex处理。

在failregex中,第一个将行与IP地址相匹配,如果要发出禁令,则需要IP地址,并将其封装在<F-NOFAIL>标记中,以表明该行不被认为是故障。第二个正则表达式是实际的身份验证失败,如果匹配,fail2ban将阻止先前捕获的IP地址。最后一个命令被<F-MLFFORGET>指令包围,以指示是时候删除捕获的连接ID (因为用户已经断开连接),并且它也被封装在<F-NOFAIL>标记之间,因为这一行本身也不是一个失败。

您可以使用fail2ban-regex工具对此进行测试。

我明白为什么链接论坛帖子中的正则表达式不适用于您;字符串在多个部分是不同的。所以很明显,如果您想要匹配更多的通用案例(我没有使用opensmtpd,所以我无法帮助您),那么您需要从上面更改第二个failregex。

票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1047615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档