POSTFIX:限制特定用户发送电子邮件的速率

POSTFIX:限制特定用户发送电子邮件的速率

我们有一个 CentOS 服务器设置,用于托管我们的网站和电子邮件服务器(使用 POSTFIX)。我们分别使用 Virtualmin 和 Webmin 管理系统。

一般情况下,我们设置的每个站点都会在系统上为客户提供一个电子邮件帐户。有一位客户特别认为批量发送数千封电子邮件是个好主意。当这种情况发生时,邮件服务器将失去响应,在处理队列时,其他客户的邮件将无法发送。

有没有办法限制系统中某个特定用户(而不是所有人)的邮件发送速率?是否还有一种设置需要更改,以便某个用户的任何操作都不会导致其他用户的邮件服务器出现故障?

谢谢

答案1

Postfix-Policyd对此等都有很大的帮助。

答案2

我发现这个老问题的其他所有答案都是仅提供链接的。所以我将用几句话描述如何实现我最喜欢的解决方案。

关联@84104建议,虽然非常有用,但不能用于正确实现每个发送者的速率。smtpd_client限制不是为了控制流量,而是为了帮助客户端软件:“针对建立过多连接的客户端的措施”。虽然可以找到这样的建议这肯定能有所帮助。@E。亚兹吉建议,添加一个后缀是必需的。我个人认为政策按照建议@Janne Pikkarainen虽然它被认为是一种标准,但相当麻烦。

我最喜欢的插件是后发因为它轻巧易用。还值得注意的是,它与 Plesk 或其他类似程序配合使用非常方便,不会影响 Plesk 复杂的配置文件集。Plesk 中的电子邮件速率限制仅在版本 12 中实现,但策略功能仍然有限。

首先从上面的网站下载最新的插件。我认为 CentOS 没有 rpm,与 Ubuntu 和 Debian 不同。不过,建议使用最新版本。更具体地说,版本 1.32(例如,存在于 Ubuntu 14.04LTS 存储库中)有一个令人讨厌的漏洞导致其无法正常运作。版本1.35解决这个问题。

确保这些PERL 模块已存在。如果使用 Debian 或Ubuntu您可以从 repos 安装,以便自动整理所有依赖项,然后将其替换/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(例如 dovecot),您可以安全地将其替换sendersasl_username。您可以使用以下选项测试规则集的有效性-C

postfwd -f /etc/postfwd.cf -C

之后,您可以选择创建一个专用的用户和组,postfwdpostfwd 将在该用户和组下运行并启动它:

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 或 REJECT,那么 postfix 就不会继续进行下一次检查,所以您应该将其放在高位。

最后,为了检查它是否有效,您可以指定一个非常小的限制,例如 1,甚至可以添加一条规则id=DEFAULT; action=dunno。任何规则命中都会被记录下来。另请注意,每个发件人的速率限制不会区分具有单个收件人的多封电子邮件或具有多个收件人的单个电子邮件。

然后从一个帐户(在该服务器中)发送一封电子邮件并查看日志:

grep "RULES" /var/log/mail

其他链接:postfwd 快速入门

答案3

您需要的是 Postfix 的策略插件。Postfix 有十几个策略插件,其中一些具有速率限制功能。您可以找到 Postfix 策略插件列表这里

相关内容