我试图通过过滤邮件头中的某些字段来阻止一些垃圾邮件发送者,但这种方法不起作用。垃圾邮件发送者在邮件头中添加随机域,但“用户”始终相同,如下所示:[电子邮件保护],www-data@domain2等等。我不希望有人发送发件人名为“www-data”的合法邮件,因此如果所有邮件都被丢弃,我也没意见。
我尝试使用但不起作用的正则表达式是:
/^(From|Return-Path|Reply-To):.*www-data@.*/ DISCARD known spam sender in $1: header: $2
我还有其他规则可以过滤其他方面,例如伪造我自己的域,它正在发挥作用:
/^(From|Return-Path|Reply-To):.*\b(@mydomain\.com)\b/ DISCARD forged sender address in $1: header: $2
我可能做错了什么?谢谢!
答案1
www-data
是 Web 服务器用户的名称,常用于事务性电子邮件,例如 Wikipedia 通知,因此您应该考虑到您可能阻止了合法邮件以及从受感染服务器发送的邮件。无论如何,您通常不会在标题中看到它From
。更可能它在信封发件人中,这可能是您的正则表达式不起作用的原因 - 它查找了错误的位置。
要阻止信封发件人,请check_sender_access
在smtpd_sender_restrictions并指定要拒绝的 localpart@。您不需要使用正则表达式,尽管如果需要,您可以使用pcre:
表类型。
在正则表达式中,您应该转义@
,例如\@
。还请注意,在您的第一个示例中,没有模式$2
,因为您只有一组括号。有关更多信息man 5 postconf
,或查看SMTPD_ACCESS_README
。