我想知道如何配置 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 )); # 请勿复制
- 来自 msn.com 的任何内容都会通过,因为第一行返回真的,并且检查停止。
- 来自 gamil.com 的任何内容都会通过,因为在第一行失败后,amavisd 会转到第二行,这将返回真的。
- 不在列表中的域名怎么办?它们会通过。这就是规则的意图!
您最终将所有发件人列入白名单!!
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”); } }