我遇到了一个行为问题,我不知道如何解决。
我已经配置了Zimbra
(8.0.4)policyd
,如下所示本教程
步骤 1:创建策略
步骤 2:创建组 ( list_domain
)
步骤 3:将域添加到组 ( @example.com
)
步骤 4:将成员添加到策略(来自:%list_domain
,到any
:)
步骤 5:添加配额(跟踪:Sender: user@domain
,期限:60
,判决defer
:)
步骤 6:为配额添加限制(类型:messageCount
,限制5
:)
瞧,它开始工作了!!!
但
配额计数器会根据收件人数量递增。也就是说,如果我向 6 个收件人发送一封邮件,它将被阻止。
问题
为了让策略跟踪消息数量而不是收件人数量,我必须进行哪些更改?
更新
以下是一些相关的服务器日志,其中所有敏感信息已被虚拟数据取代。
mailbox.log 摘要
2015-09-02 10:58:44,980 INFO [qtp126151468-4888876] [[email protected];mid=537;ip=xx.xx.xx.xx;ua=ZimbraWebClient - FF40 (Win)/8.0.7_GA_6021;] smtp - Sending message to MTA at server.domain.com: Message-ID=<1187019100.8600745.14411807248
[email protected]>, origMsgId=101f0b66-b103-4161-8767-7ab1e00ffffd:1279544, replyType=w
2015-09-02 10:58:45,206 WARN [qtp126151468-4888876] [[email protected];mid=537;ip=xx.xx.xx.xx;ua=ZimbraWebClient - FF40 (Win)/8.0.7_GA_6021;] smtp - Failed to send message
com.zimbra.cs.mailclient.smtp.InvalidRecipientException: RCPT failed: Invalid recipient [email protected]: 450 4.7.1 <[email protected]>: Sender address rejected: Deferring: Too many messages from sender in last 60
at com.zimbra.cs.mailclient.smtp.SmtpConnection.rcpt(SmtpConnection.java:680)
[........]
cbpolicyd.log摘要
[2015/09/02-10:58:45 - 28180] [CORE] INFO: module=Quotas, mode=create, host=yy.yy.yy.yy, helo=server.domain.com, [email protected], [email protected], reason=quota_create, policy=6, quota=3, limit=4, track=Sender:[email protected], counter=MessageCount, quota=1.00/3 (33.3%)
[2015/09/02-10:58:45 - 28180] [CORE] INFO: module=Quotas, mode=update, host=yy.yy.yy.yy, helo=server.domain.com, [email protected], [email protected], reason=quota_update, policy=6, quota=3, limit=4, track=Sender:[email protected], counter=MessageCount, quota=2.00/3 (66.7%)
[2015/09/02-10:58:45 - 28180] [CORE] INFO: module=Quotas, mode=update, host=yy.yy.yy.yy, helo=server.domain.com, [email protected], [email protected], reason=quota_update, policy=6, quota=3, limit=4, track=Sender:[email protected], counter=MessageCount, quota=3.00/3 (100.0%)
[2015/09/02-10:58:45 - 28180] [CORE] INFO: module=Quotas, mode=update, host=yy.yy.yy.yy, helo=server.domain.com, [email protected], [email protected], reason=quota_update, policy=6, quota=3, limit=4, track=Sender:[email protected], counter=MessageCount, quota=4.00/3 (133.3%)
[2015/09/02-10:58:45 - 28180] [CORE] INFO: module=Quotas, action=defer, host=yy.yy.yy.yy, helo=server.domain.com, [email protected], [email protected], reason=quota_match, policy=6, quota=3, limit=4, track=Sender:[email protected], counter=MessageCount, quota=5.00/3 (166.7%)
我们的 zimbra 服务器不充当中继代理,而是使用局域网中的外部服务将消息传递到外部域。因此,所有要传递到外部域的传出消息都将在一个队列项中传递到外部 mta。
因此,无论邮件中有多少收件人,每封邮件对于外部 mta/中继来说都将成为唯一的一个队列项。
答案1
不可以
配额计数器会根据收件人数量递增。也就是说,如果我向 6 个收件人发送一封邮件,它将被阻止。我必须进行哪些更改才能使 policyd 跟踪邮件数量而不是收件人数量?
当然会被阻止。当您向 6 位收件人发送电子邮件时,基本上 Postfix(在 Zimbra 中)会将您的电子邮件副本发送给 6 位收件人。因此,cbpolicyd也算作 6 条消息。
在 Postfix 术语中,邮件数量和收件人数量相同。请记住,您的电子邮件客户端可以采用不同的方式发送电子邮件。
- 他们可以在一个 SMTP 会话中同时向 6 个收件人发送电子邮件,或者
- 他们可以在每个 SMTP 会话中向每个收件人发送电子邮件
更重要的是,这种机制将再次保护你,防止一些恶意用户/垃圾邮件发送者试图通过以下方式绕过此限制:数千名收件人在单身的信息。
补充说明:
我可以确认,这种行为是 cbpolicyd 有意为之。证据来自cbpolicyd 源代码,尤其是在文件中cbp/modules/Quotas.pm
192 行基本上,cbpolicyd 会在每个RCPT TO
阶段增加计数器。因此,目前您无法通过 policyd 执行此操作。