Postfix

Zimbra 8.04 policyd… 郵件配額按收件人數計算

  • September 4, 2015

我遇到了一個無法解決的行為問題。

我已經按照本教程Zimbra配置了(8.0.4)policyd

Step1:創建策略

Step2:創建組(list_domain

Step3:將域添加到組(@example.com

Step4:將成員添加到策略(從:%list_domain,到any:)

Step5:添加配額(軌道:Sender: user@domain,週期:60,判決:defer)

Step6:為配額添加限制(類型:messageCount,限制5:)

而且,嘿presto。它的工作!

配額計數器按收件人數遞增。也就是說,如果我向 6 個收件人發送一封郵件,它將被阻止。

問題

為了使策略跟踪郵件數量而不是收件人數量,我必須更改什麼?

更新

以下是一些相關的伺服器日誌,其中所有敏感資訊都已替換為虛構數據。

郵箱.log 摘要

2015-09-02 10:58:44,980 INFO  [qtp126151468-4888876] [name=account@domain.com;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
66.JavaMail.zimbra@domain.com>, origMsgId=101f0b66-b103-4161-8767-7ab1e00ffffd:1279544, replyType=w
2015-09-02 10:58:45,206 WARN  [qtp126151468-4888876] [name=account@domain.com;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 acc5@otherdomain.com: 450 4.7.1 <account@domain.com>: 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, from=account@domain.com, to=acc1@otherdomain.com, reason=quota_create, policy=6, quota=3, limit=4, track=Sender:account@domain.com, 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, from=account@domain.com, to==acc2@otherdomain.com, reason=quota_update, policy=6, quota=3, limit=4, track=Sender:account@domain.com, 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, from=account@domain.com, to==acc3@otherdomain.com, reason=quota_update, policy=6, quota=3, limit=4, track=Sender:account@domain.com, 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, from=account@domain.com, to==acc4@otherdomain.com, reason=quota_update, policy=6, quota=3, limit=4, track=Sender:account@domain.com, 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, from=account@domain.com, to==acc5@otherdomain.com, reason=quota_match, policy=6, quota=3, limit=4, track=Sender:account@domain.com, counter=MessageCount, quota=5.00/3 (166.7%)

我們的 zimbra 伺服器不充當中繼代理,它使用我們區域網路中的外部服務將消息傳遞到外部域。因此,要傳遞到外部域的所有傳出消息都在一個隊列項中傳遞到外部 mta。

因此,對於外部 mta/relay,每條消息都成為一個且唯一的一個隊列項,而不管其中的收件人數量。

不,你不能

配額計數器按收件人數遞增。也就是說,如果我向 6 個收件人發送一封郵件,它將被阻止。為了使策略跟踪郵件數量而不是收件人數量,我必須更改什麼?

當然會被屏蔽。當您向 6 個收件人發送電子郵件時,基本上 postfix(在 Zimbra 中)會將您的電子郵件副本發送給 6 個收件人。因此,cbpolicyd也將其計為 6 條消息

在後綴術語中,消息數和收件人數是相同的。請記住,您的電子郵件客戶端可以有不同的方式來發送電子郵件。

  • 他們可以在一個 SMTP 會話中一次向 6 個收件人發送電子郵件,或者
  • 他們可以在每個 SMTP 會話中為每個收件人發送電子郵件

更重要的是,這種機制將再次保護您一些討厭的使用者/垃圾郵件發送者,他們希望通過在單個消息中放置數千個收件人來繞過此限制。


附加說明:

我可以確認這種行為是在 cbpolicyd 中設計的。證據來自cbpolicyd 原始碼,尤其是文件cbp/modules/Quotas.pm 第 192 行RCPT TO基本上,cbpolicyd 將在每個階段增加計數器。所以,現在你不能通過 policyd 來做到這一點。

引用自:https://serverfault.com/questions/718521