我想限制每个用户或每个域通过 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。