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

mai*_*ilq 10 spam-filter amavis

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

我知道可以在收件人的邮件地址上执行此操作,但不知道如何针对发件人的邮件地址执行此操作。甚至可以通过政策银行在收件人的 IP 地址上执行此操作。但我的方法应该是独立于接收者,只中继发送者。

我想要完成的是只扫描来自雅虎、谷歌、Hotmail 和其他大型发件人的邮件。因此,配置应该观察的发件人比不应该观察的发件人更容易。

我知道在 MTA 方面更容易实现,但这不是问题的一部分,因为我已经在 MTA 方面找到了解决方案。我想在 amavisd-new 上做。知道如何将发件人列入白名单也无济于事,因为这仍然意味着邮件经过了所有扫描,但随后得到了很高的负分。除非由大玩家发送,否则根本不应扫描邮件。

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

Joh*_*Siu 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 的任何内容都会通过,因为第一行返回TRUE,并且检查停止。
  2. 来自 gamil.com 的任何内容都会通过,因为在第一行失败后,amavisd 会移动到第二行,这将返回TRUE
  3. 域名不在列表中怎么办?他们会过去的。这就是规则的用意!

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

Perl 测试程序

#!/usr/bin/perl

使用严格;

# 拒绝域名和子域名
#my $REGinfo='==拒绝域和子域=='
#my $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 = (
    'test@hotmail.com',
    'test@gmail.com',
    'test@aol.com',
    'test@msn.com',
    'test@yahoo.com',
    'test@yahoo.aol.com',
    'aol.com@somethingelse.com'
);

对于我的 $i (0 .. $#strTest){
    if ($strTest[$i] =~ $REG) {
        print("通过$strTest[$i]\n");
    }
    别的 {
        print ("$strTest[$i]\n 失败");
    }
}