我试图通过过滤邮件标题中的某些字段来阻止一些垃圾邮件发送者,但它不起作用。垃圾邮件发送者在标头中添加随机域,但“用户”始终相同,例如:[email protected]、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
我可能做错了什么?谢谢!
www-data
是 Web 服务器用户的名称,经常用于事务性电子邮件,例如 Wikipedia 通知,因此您应该考虑您可能会阻止合法邮件以及从受感染服务器发送的邮件。无论如何,您通常不会在From
标题中看到它。它更有可能在信封发件人中,这可能是您的正则表达式不起作用的原因 - 它在错误的位置查找。要阻止信封发件人,请在smtpd_sender_restrictions
check_sender_access
中添加一个表并指定要拒绝的 localpart@。您不需要使用正则表达式,但您可以在必要时使用表类型。pcre:
在正则表达式中,您应该转义
@
, 像\@
. 另请注意,在您的第一个示例中,没有 pattern$2
,因为您只有一组括号。欲了解更多信息man 5 postconf
,或查看SMTPD_ACCESS_README
。