我openSMPTD
运行了一个邮件服务器。看来我目前正在受到蛮力攻击,虽然我怀疑他们会进入。话虽如此,我想通过不断的登录尝试来减轻我的服务器的负担。我正在配置fail2ban
以禁止违规者。但是,我无法获得正确的正则表达式,这让我很生气!我在 freeBSD 论坛上看到了有关fail2ban
正则表达式的链接以捕获它。然而,即使那个正则表达式似乎也没有捕捉到他们提供的示例文本。我编辑了他们的正则表达式无济于事。我希望有人能给我一些指示,因为我在正则表达式方面非常薄弱。
我的日志文件如下所示:
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
"
Run Code Online (Sandbox Code Playgroud)
所以让我们分解一下:显示它们是蛮力的那一行是:
f7fa148a43b34578 smtp failed-command command="AUTH LOGIN (password)" result="535 Authentication failed"
Run Code Online (Sandbox Code Playgroud)
我们看到身份验证失败的地方。然而,奇怪的是,openSMTPD 并没有在该行中包含要禁止的 IP 地址:我们必须查看其上方的变量数字:
f7fa148a43b34578 smtp connected address=193.169.254.42 host=<unknown>
Run Code Online (Sandbox Code Playgroud)
哪里可以看到罪犯的ip地址。好吧,够公平。我选择所有文本的当前正则表达式是:
^.*smtp connected address=\w[1-9.]* host=[a-z<>]*\n*[a-zA-Z0-9_.-\s\]\[:=<>"()]*
虽然fail2ban
想要一个更细粒度的。我不确定我是否有一种干净的方法来禁止适当的 ip 地址,因为有可能两个人同时连接,然后选择错误的线路来禁止。
有什么建议?
使用多行正则表达式的更新且更干净的方法是使用版本<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>
Run Code Online (Sandbox Code Playgroud)
解释
预过滤器正则表达式用于预处理每一行并捕获会话 ID(我假设它是一部分)f7fa148a43b34578
,并识别跨越多行的相同会话。里面的文本<F-CONTENT>
是我们感兴趣的部分,将由failregex 处理。
在failregex中,第一个匹配该行与IP地址(如果要发出禁令,则需要该IP地址),并且将其包含在标签中<F-NOFAIL>
以指示该行不被视为失败。第二个正则表达式是实际的身份验证失败,如果匹配,则fail2ban将阻止先前捕获的IP地址。最后一个被指令包围,表示是时候删除捕获的连接 ID(因为用户已断开连接),并且它也包含在标签之间,因为该行本身也不是失败。<F-MLFFORGET>
<F-NOFAIL>
您可以使用该fail2ban-regex
工具来测试这一点。
我明白为什么链接论坛帖子中的正则表达式对您不起作用;该字符串有多个部分不同。因此,如果您想匹配更通用的情况,显然您需要更改上面的第二个failregex(我没有使用opensmtpd,所以我无法帮助您)。
归档时间: |
|
查看次数: |
180 次 |
最近记录: |