用于fail2ban的正则表达式来过滤来自特定顶级域的邮件

时间:2016-03-20 18:13:03

标签: regex filter postfix-mta spam fail2ban

背景:我正在运行一个包含30多个域的Plesk CentOS 6.7服务器。我收到来自特定TLD的大量垃圾邮件(在这种情况下为.top)。我正在运行SpamAssassin并使用RBL列表(xbl.spamhaus.org)。 SpamAssassin将这些邮件中的大多数标记为垃圾邮件,但足以让我的服务器受到Google邮件服务器的限制(由于我的某些用户的电子邮件帐户被转发到Gmail)。我从这个域获得了ZERO合法邮件,最近内存使用量增加了几个百分点,所以我试图通过阻止这些邮件甚至到达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的REGEX,它可以匹配包含'.top'TLD的所有'connect from'吗?

我一直在尝试基于我的postfix-sasl过滤器(下面)来解决这个问题,但是我的正则表达式还不够强...这是我的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地址。非常感谢任何帮助。

1 个答案:

答案 0 :(得分: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 ]

请参阅a demo on regex101.com