Answers:
Postfix-Policyd在这方面提供了很大的帮助。
令我惊讶的是,这个老问题的所有其他答案都是仅链接的。因此,我将用几句话来描述如何为这项工作实现我最喜欢的解决方案。
该链接是@ 84104曾建议,虽然很有用,不能用正确实现每发件人率。smtpd_client
限制不是为了流量控制,而是为了帮助客户端软件:“针对建立过多连接的客户端采取措施”。虽然人们可以找到建议,如这一个,它肯定会有所帮助。作为@E。Yazici建议,需要一个用于后缀的插件。我个人觉得policyd所推荐的@Janne皮卡赖宁相当麻烦的,虽然它被认为是一个标准。
我最喜欢的插件是postfwd,因为它既轻便又容易。还值得注意的是,这在Plesk或其他类似产品中非常容易使用,而不会影响Plesk复杂的配置文件集。Plesk中的电子邮件速率限制仅在版本12中实现,但策略功能仍然受到限制。
首先从上面的网站下载最新的插件。我相信与Ubuntu和Debian相比,CentOS没有rpm。但是,建议使用最新版本。更具体地说,版本1.32(例如,Ubuntu 14.04LTS存储库中存在)有一个令人讨厌的错误,阻止了它正常运行。1.35版对此进行了整理。
确保存在这些 PERL模块。如果使用Debian或Ubuntu,则可以从存储库中安装,以便所有依赖项自动得到整理,然后替换/usr/sbin/postfwd
为最新版本。
然后创建规则集。创建一个诸如/etc/postfwd.cf
或的文件,/etc/postfix/postfwd.cf
并添加:
id=R001; sender=~/.*/; action=rate(sender/100/86400/REJECT only 100 messages per day for $$sender)
id=R002; sender=~/.*/; action=rate(sender/50/3600/REJECT only 50 messages per hour for $$sender)
上面的规则集显然有两个对所有发件人进行评估的规则。该rate
动作的语法为:
rate (<item>/<max>/<time in sec>/<action>)
其他费率示例可以在此处找到。可以在文档中找到有关语法的参考。类似的讨论可以在这里找到。如果实施了SASL(例如鸽舍),则可以安全地替换sender
为sasl_username
。您可以使用以下-C
选项测试规则集的有效性:
postfwd -f /etc/postfwd.cf -C
之后,您可以选择创建一个专用用户和组,postfwd
在该用户和组下将运行并启动postfwd:
postfwd --daemon -f /etc/postfwd.cf -u postfwd -g postfwd
如果是从apt(Debian,Ubuntu等)安装的,则下面还应该有一个配置文件/etc/default/postfwd
,您可以正确启动该服务,例如sudo service postfwd start
。
然后查看日志以验证postfwd正在侦听。Postfwd使用与postfix相同的日志(例如/var/log/mail
或/usr/local/psa/var/log/maillog
等),并使用postfwd 1.35 ready for input
适当的一行。
然后,让postfix知道使用postfwd。编辑postfix conf文件(通常为/etc/postfix/main.cf
),并在以下行中:
smtpd_recipient_restrictions = permit_mynetworks,...
添加check_policy_service inet:127.0.0.1:10040
。请考虑放置此顺序的顺序smtpd_recipient_restrictions
非常重要,最终可能会花费大量时间来诊断可能出了什么问题。正如在解释这个问题,如果检查返回OK或拒绝那么后缀不会继续到下一个,所以你应该把这个高。
最后,要检查该设置是否有效,您可以指定一个非常小的限制(例如1),甚至可以添加一个规则id=DEFAULT; action=dunno
。无论如何,任何规则命中都会被记录下来。另请注意,每个发件人的速率限制不区分具有单个收件人的多个电子邮件或具有多个收件人的单个电子邮件。
然后从一个帐户(在该服务器中)发送电子邮件并查看日志:
grep "RULES" /var/log/mail
其他链接:postfwd quickstart。
smtpd_recipient_restrictions
带有空格的条目上使用的postfix barfs版本,因此我必须postfwd_ratelimit = check_policy_service inet:127.0.0.1:10040
在/etc/postfix/main.cf中进行定义,然后在/etc/postfix/master.cf中对其进行引用,例如smtpd_recipient_restrictions=...,$postfwd_ratelimit,...
sudo postfwd -f /etc/postfix/postfwd.cf --pidfile=/var/run/postfwd.pid --reload
.+
(至少1个)而不是.*
(至少0个),以便规则不匹配缺少的字段。
您需要的是Postfix的策略插件。Postfix有许多策略附件,其中一些具有速率限制功能。您可以在此处找到Postfix策略插件列表。
检查可从mysql http://www.simonecaruso.com/limit-sender-rate-in-postfix/配置的此策略守护程序