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

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

一般而言,对于我们设置的每个站点,我们都会在系统上为客户提供一个电子邮件帐户。 特别是一位客户已经决定发送大量数以千计的电子邮件是一个好主意。 发生这种情况时,邮件服务器将无响应,其他客户的邮件将在处理队列时停止。

有没有办法,我们可以限制电子邮件的速度发送给系统的一个特定用户,而不是每个人? 是否还有一个设置,我们应该改变,以便用户可以做的任何事情都可以导致邮件服务器开始失败的其他用户?

谢谢

Postfix-Policyd对于这一点非常有帮助。

这个老问题的所有其他答案都是链接的,这让我感到震惊。 所以我要用几句话来描述如何实现我最喜欢的解决scheme。

@ 84104build议的链接虽然非常有用,但不能用来正确实现每个发件人的收费。 smtpd_client限制不是为了控制stream量,而是为了帮助客户端软件:“针对连接太多的客户端的措施”。 虽然人们可以find这样的build议,肯定会有所帮助。 作为@E。 Yazicibuild议,一个插件的后缀是必需的。 就我个人而言,我认为@Janne Pikkarainen推荐的policyd相当麻烦,虽然它被认为是一个标准。

我最喜欢的插件是postfwd,因为它轻而易举。 还值得注意的是,这与Plesk或其他类似的工具非常容易,不会影响Plesk的复杂configuration文件集。 Plesk的电子邮件速率限制仅在版本12中实施,但政策function仍然有限。

首先从上面的网站下载最新的插件。 我相信CentOS没有rpm,与Ubuntu和Debian不同。 不过,build议使用最新版本。 更具体地说,版本1.32(其存在于例如Ubuntu 14.04LTS回购中)具有妨碍其正常运行的令人讨厌的错误 。 1.35版sorting。

确保这些 PERL模块存在。 如果使用Debian或者Ubuntu,你可以通过repos安装,这样所有的依赖关系都会被自动sorting,然后用最新版本replace/usr/sbin/postfwd

然后创build规则集。 创build一个文件,如/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>) 

其他速率的例子可以在这里find。 在文档中可以find对语法的引用。 类似的讨论可以在这里find。 如果实施了SASL(例如dovecot),则可以安全地用sasl_usernamereplacesender 。 您可以使用-C选项来testing规则集的有效性:

 postfwd -f /etc/postfwd.cf -C 

之后,您可以select创build一个专门的用户和组postfwd ,postfwd将在其下运行并启动它:

 postfwd --daemon -f /etc/postfwd.cf -u postfwd -g postfwd 

如果是从apt(Debian,Ubuntu等)安装,那么在/etc/default/postfwd下也应该有一个configuration文件,你可以正确启动服务,例如sudo service postfwd start

然后看看日志来validationpostfwd正在监听。 Postfwd使用与postfix相同的日志(例如/var/log/mail/usr/local/psa/var/log/maillog等),并且postfwd 1.35 ready for input应该到位。

然后,让postfix知道使用postfwd。 编辑后缀的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 id=DEFAULT; action=dunno 。 任何规则命中都会被logging。 另请注意,每个发件人的费率限制不能区分单个收件人的多个电子邮件或具有多个收件人的单个电子邮件。

然后发送一个帐户(在该服务器)的电子邮件,看看日志:

 grep "RULES" /var/log/mail 

其他链接: postfwd快速入门 。

你需要的是一个Postfix的政策插件。 Postfix有十几个策略插件,其中一些具有限速function。 你可以在这里findPostfix策略插件列表。

用途: http : //www.postfix.org/TUNING_README.html#conn_limit

检查这个策略守护进程可以从mysqlconfigurationhttp://www.simonecaruso.com/limit-sender-rate-in-postfix/