如何配置 amavisd-new 以仅扫描特定发件人/服务器?

如何配置 amavisd-new 以仅扫描特定发件人/服务器?

我想知道如何配置 amavisd-new 以仅扫描特定客户端(IP、CIDR 或主机名)或发件人的电子邮件域上的垃圾邮件。

我知道可以对收件人的邮件地址执行此操作,但不知道如何对发件人的邮件地址执行此操作。甚至可以使用策略银行对收件人的 IP 地址执行此操作。但我的方法应该是独立于收件人,只中继发件人。

我想要实现的是只扫描来自 Yahoo、Google、Hotmail 和其他大型发件人的邮件。因此,配置哪些发件人应该被观察比配置哪些发件人不应该被观察更容易。

我知道在 MTA 端实现起来更容易,但这不是问题的一部分,因为我已经在 MTA 端找到了解决方案。我想在 amavisd-new 上实现。知道如何将发件人列入白名单也没有帮助,因为这仍然意味着邮件会经过所有扫描,但会得到很高的负分。除非由大公司发送,否则根本不应该扫描邮件。

那么 amavisd-new 中的哪些参数是正确的参数,可以启用对特定发件人的扫描,并且只针对这些发件人?

答案1

Amavisd 将除特定域名之外的所有域名列入白名单

你需要的是 whitelist_sender_map (这里) 使用正则表达式查找 (这里

除 Domain.X 外,将其他全部列入白名单

@whitelist_sender_maps = (new_RE(
    qr'@(?!(gmail\.com$|hotmail\.com$|aol\.com$))'i
));

将除 X 的域和子域之外的所有内容列入白名单

@whitelist_sender_maps = (new_RE(
    qr'[@.](?!(gmail\.com$|hotmail\.com$|aol\.com$))'i
));

修改

例如,将 msn.com 添加到白名单例外

@whitelist_sender_maps = (new_RE(
    qr'[@.](?!(gmail\.com$|hotmail\.com$|aol\.com$|msn\.com$))'i
));

不要把这条规则分解成多条规则,这不是你想要的

违反 2 行或更多行的规则将会把所有内容列入白名单!!

(如果可能的话,我会把这一部分用红色标出来)

简单来说,白名单是一种顺序检查,每次检查一行/一条规则。

让我们看看下面的错误的例子

# 请勿复制
@whitelist_sender_maps = (new_RE(
    qr'@(?!(gmail\.com$|hotmail\.com$))'i,
    qr'@(?!(aol\.com$|msn\.com$))'i
));
# 请勿复制
  1. 来自 msn.com 的任何内容都会通过,因为第一行返回真的,并且检查停止。
  2. 来自 gamil.com 的任何内容都会通过,因为在第一行失败后,amavisd 会转到第二行,这将返回真的
  3. 不在列表中的域名怎么办?它们会通过。这就是规则的意图!

您最终将所有发件人列入白名单!!

Perl 测试程序

/usr/bin/perl 的 #!

使用严格;

# 拒绝域名和子域名
#my $REGinfo='==拒绝域名和子域名=='
#我的 $REG=qr'[@.](?!(gmail\.com$|hotmail\.com$|aol\.com$))'i;

# 仅限精确域名
我的 $REGinfo='==仅精确域==';
我的 $REG=qr'@(?!(gmail\.com$|hotmail\.com$|aol\.com$))'i;

打印$REGinfo。"\n";
打印'$REG='.$REG."\n\n";

我的@strTest = ([电子邮件保护]',[电子邮件保护]',[电子邮件保护]',[电子邮件保护]',[电子邮件保护]',[电子邮件保护]',[电子邮件保护]
(英文):

对于我的 $i (0 .. $#strTest){
    如果 ($strTest[$i] =~ $REG) {
        打印(“通过$strTest[$i] \n”);
    }
    别的 {
        打印(“失败$strTest[$i] \n”);
    }
}

相关内容