1

背景:我正在运行具有 30 多个域的 Plesk CentOS 6.7 服务器。我从特定的 TLD(在本例中为 .top)收到大量垃圾邮件。我正在运行 SpamAssassin 并使用 RBL 列表 (xbl.spamhaus.org)。SpamAssassin 将这些邮件中的大部分标记为垃圾邮件,但通过的足够多,我的服务器受到 Google 邮件服务器的速率限制(由于我的一些用户的电子邮件帐户被转发到 Gmail)。我从这个域收到零合法电子邮件,最近内存使用量增加了几个百分点,所以我试图通过在这些邮件到达 Postfix 之前阻止这些邮件来节省一些开销并提高我的服务器声誉。

我想为 fail2ban 编写一个过滤器,以匹配来自此 TLD 的连接,并禁止相应的 IP 地址。

以下是示例日志条目:

Mar 20 03:12:43 mydomain postfix/smtpd[6557]: connect from whatevermonkey.top[66.199.245.168]
Mar 20 05:07:38 mydomain postfix/smtpd[13299]: connect from someonecat.top[216.169.126.67]

那么任何人都可以帮助我可以插入到 fail2ban 的正则表达式,它可以匹配所有包含“.top”顶级域名的“连接来源”吗?

我一直在尝试根据我的工作 postfix-sasl 过滤器(如下)来解决这个问题,但我的正则表达式 chi 不够强大......这是我的 postfix-sasl 工作过滤器,它匹配失败的登录尝试:

failregex = ^%(__prefix_line)swarning: [-._\w]+\[<HOST>\]: SASL ((?i)LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed(: [ A-Za-z0-9+/:]*={0,2})?\s*$

同样,我只想匹配以“somespammyserver.top”开头的 IP 地址。非常感谢任何帮助。

4

1 回答 1

1

这样的事情可能会有所帮助:

connect from [\w.]+\.top\[([.\d]+)\]
# look for connect from literally
# followed by \w = a-z0-9_ and . greedily
# followed by .top[
# capture everything that is a digit or a dot into the first group
# (hence the ())
# followed immediately by a closing bracket ]

在 regex101.com 上查看演示

于 2016-03-20T19:11:30.667 回答