我让openSMPTD运行一个邮件服务器。虽然我怀疑他们会进来,但我现在似乎被野蛮人强行攻击了。尽管如此,我想通过不断的登录尝试来减轻服务器的负担。我正在配置fail2ban来禁止违法者。然而,我不能完全得到正确的正则表达式,这让我发疯了!我看到了freeBSD论坛上的这个链接关于fail2ban的正则表达式来捕捉它。然而,即使是该regex似乎也没有捕捉到它们提供的示例文本。我编辑了他们的regex,但没有结果。我希望有人能给我一些指点,因为我在雷鬼比赛中超弱。
我的日志文件看起来如下:
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
"因此,让我们将其分解:显示它们是野蛮强迫的线条是:
f7fa148a43b34578 smtp failed-command command="AUTH LOGIN (password)" result="535 Authentication failed"我们看到认证失败的地方。然而,奇怪的是,openSMTPD并没有在该行中包含他们的ip地址:我们必须在其上方查找一个可变数字:
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地址禁止,因为这是可能的两个人一次连接,然后错误的线路被拿起禁止。
有什么建议吗?
发布于 2021-01-04 19:06:13
使用多行正则表达式的更新和更简洁的方法是使用<F-...>标记,这些标记是在0.10.0版本中引入的,不幸的是,这些标记仍然没有很好的文档。
[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。
https://serverfault.com/questions/1047615
复制相似问题