Exim 中发送消息的限制

Exim 中发送消息的限制

我想限制每个用户或每个域通过 exim 发送的消息数量。(目前只对通过 php 邮件发送的消息感兴趣)。

邮件由 apache 用户(mod_php)发送,据我了解,通过用户限制不可用,因为我只有一个用户。

我认为更好的方法是通过主机进行限制。但另一个问题是子域名。

请告诉我如何修复此问题。

我还读到了有关值 $authenticated_id、$sender_host_authenticated、$sender_address 等的信息。我如何追踪这些值?

现在我为任何用户或主机设置了限制:

       acl_not_smtp:
           deny message = Sender rate overlimit - $sender_rate / $sender_rate_period
           ratelimit = 100 / 1h / leaky
           accept

抱歉,如果问题看起来不太好,我是服务器管理方面的新手。谢谢。

更新:

让我们简化一下。如何限制每个虚拟主机发送的消息。有什么想法吗?

更新:

有任何想法吗...

那这个呢:

添加虚拟主机:

php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f [email protected]"

并从“返回路径”确定虚拟主机

warn set acl_host  = ${if match{$h_Received:}\
                            {\N Return-path: (Regular expression here) \N}\
                           {$1}\
                            {}\
                  }
acl_not_smtp:
       deny message = Sender rate overlimit - $sender_rate / $sender_rate_period
       ratelimit   = 200 / 1d / leaky / $acl_host
       accept

更新

我将 ITK 模块添加到 Apache,现在每个 vhost 都由唯一的用户运行。

将配置更改为(使用 authenticated_id):

acl_not_smtp:
               deny message = Sender rate overlimit - $sender_rate / $sender_rate_period
               ratelimit = 100 / 1h / leaky / authenticated_id
               accept

问题是,对每个用户设置全部限制是否足够?第二个问题是,我如何添加在此示例中不起作用的用户白名单。谢谢。

答案1

如果您想按原样执行此操作,您将需要编写一个自定义 exim ACL 来提取发送域。

或者,您可以通过 su_php 运行 php,或使用 mod_ruid2 以唯一用户身份运行每个 vhost。或者阻止直接 sendmail 注入并要求所有脚本通过经过身份验证的 SMTP 帐户发送电子邮件。然后,您可以使用所有现有的可用 ACL。

相关内容