我已经让 local_acl_check_data 拒绝使用与 From: 和 To: 相同的地址的典型垃圾邮件发送者策略,但由于一些垃圾邮件较少的来源(例如雅虎群组)这样做,因此我也使用白名单。这是 ACL:
# block spammers who use the same "from" and "to" address
accept
senders = ${if exists{CONFDIR/local_sender_whitelist}\
{CONFDIR/local_sender_whitelist}\
{}}
deny
condition = ${if eqi{${address:$h_from:}}{${address:$h_to:}}{true}{false}}
log_message = rejecting spam with to:${address:$h_to:} and from:${address:$h_from:}
message = Message identified as spam. If you think this is wrong, get in touch with postmaster
问题是,当我测试时:
jcomeau@tektonic:~$ cat bin/testacl
exim4 -bh 66.163.168.186 <<EOT
helo tester
mail from: [email protected]
rcpt to: [email protected]
data
from: [email protected]
to: [email protected]
subject: should be ok
this one should not reject
.
mail from: [email protected]
rcpt to: [email protected]
data
from: [email protected]
to: [email protected]
subject: should reject
this one should be rejected
.
quit
EOT
它按预期工作:第一条消息被接受,因为它在白名单中发现了 yahoogroups.com,而第二条消息被拒绝。但在实际操作中,yahoogroups.com 电子邮件与垃圾邮件发送者一起被该 ACL 拒绝。我使用的是 4.72-6,过去几年我使用的所有版本都发生过这种情况。我已经没有主意了。
根据要求,exim4 的日志拒绝了本应通过的消息:
jcomeau@tektonic:~$ grep -C2 Freecycle /var/log/exim4/rejectlog 2011-02-25 09:52:00 1Psz1U-00020g-79 H=n52c.bullet.mail.sp1.yahoo.com [66.163.168.186] F=<sentto-15991578-2122-1298645513-jc=example.com@ returns.groups.yahoo.com> 在 DATA 后被拒绝:拒绝垃圾邮件至:[电子邮件受保护]以及来自:[电子邮件受保护] 信封发件人:<sentto-15991578-2122-1298645513-jc=example.com@returns.groups.yahoo.com> 信封收件人:<[电子邮件受保护]> -- MIME 版本:1.0 I 消息 ID: 邮件列表:列表[电子邮件受保护];接触[电子邮件受保护] 交付至:邮件列表[电子邮件受保护] 列表 ID:<PetalumaFreecycle.yahoogroups.com> 优先级:批量 列表取消订阅: <mailto:[电子邮件受保护]> 日期: 2011 年 2 月 25 日 14:51:53 -0000 来自:[电子邮件受保护] 致:[电子邮件受保护] 主题:[Petaluma Freecycle] 摘要编号 2122 X-Yahoo-Newman-Property: groups-digest-trad-m R 回复:“无回复”<[电子邮件受保护]> 内容类型:文本/纯文本;字符集=ISO-8859-1 内容传输编码:引用可打印
这是我的 testacl 脚本在第一个测试中显示的内容:
>>> 使用 ACL“acl_check_data” >>> 处理“接受” >>> 检查发件人 = ${如果存在{/etc/exim4/local_sender_whitelist}{/etc/exim4/local_sender_whitelist}{}} >>> yahoogroups.com 在“yahoogroups.com”中?是(匹配“yahoogroups.com”) >>>[电子邮件受保护]在“/etc/exim4/local_sender_whitelist”中?是(与 /etc/exim4/local_sender_whitelist 中的“yahoogroups.com”匹配) >>> 接受:条件测试成功 日志:1PuxAz-0005jZ-B0 <=[电子邮件受保护]H=n52c.bullet.mail.sp1.yahoo.com(测试仪)[66.163.168.186] P=smtp S=380 250 OK id=1PuxAz-0005jZ-B0
答案1
我注意到了这种模式,但认为没有太多的内容被理解。尝试这个
警告 message = 被识别为垃圾邮件的邮件。如果您认为这是错误的,\ 与邮政局长联系 log_message = 可能的垃圾邮件,其中 ${h_to:} 作为发件人和收件人 !senders = ${如果存在{CONFDIR/local_sender_whitelist}\ {CONFDIR/local_sender_whitelist} {}} 条件= ${if eqi{$h_from:}{$h_to:}{true}} 控制=冻结
control = freeze
当我测试规则时,我常常保存消息以供检查。如果我发现它足够准确,我会将其更改为拒绝规则。
编辑:我在我的电子邮件数据库中测试了这条规则。用作zen.spamhaus.org
DNS 黑名单可以捕获几乎所有这些情况(483 中的 467 例)。灰名单涵盖了其余大部分(16 个中的 11 个)。我发现有五条消息通过了测试。其中三封 (60%) 是合法电子邮件。其他的有 helo 名称,其中要么是主机名,要么是二级域。添加一个条件来检查以确保 helo 名称至少是第三级域,使规则相当安全。我正在测试:
条件 = ${if eq{${extract{3}{.}{$sender_helo_name}}}{}{true}}
答案2
Exim 认为“发件人”是信封发件人地址,位于 returns.groups.yahoo.com 域中。一旦我将该域(完全;groups.yahoo.com 不起作用,yahoo.com 也不起作用)放入我的 local_sender_whitelist 中,ACL 就起作用了。
它在测试期间有效,因为我使用了 yahoogroups.com 的信封发件人地址,与发件人:地址相同。从来没有费心检查雅虎群组的电子邮件中是否存在这种情况。
答案3
您找到了一个解决方案,并且它可能对您的 acl 有效,但我只是想添加这个,因为其他人可能会遇到这种情况,即使这不是您特定用例中的问题。
exim -bh
检查很多东西,但不连接到其他主机。如果您的 ACL 失败(或临时失败)并且您的标注检查失败,则需要使用-bhc
.