exim4 - 为什么限制发往智能主机的出站邮件的速率只能与 acl_not_smtp 一起使用?

exim4 - 为什么限制发往智能主机的出站邮件的速率只能与 acl_not_smtp 一起使用?

为了对每个收件人的发送电子邮件进行速率限制(所有电子邮件均由同一用户发送),我在一个非常简单的环境中进行了一些测试:

                                         The Webs              

                                             ^                 
                                             |                 
+-------------------+   SMTP?         +--------+---------+       
|                   +---------------> | mail.example.com |       
| billyw.localhost  |                 |   (smarthost)    |       
|    (exim4)        |                 |                  |       
+-------------------+                 +------------------+       

billyw.localhost是一台 Debian 机器。使用dpkg-reconfigure exim4-config,我将其设置mail.example.com为智能主机。

目前,我通过添加 ACL 来限制速率acl_not_smtp

acl_not_smtp = acl_check_not_smtp

acl_check_not_smtp:

  # Rate limit based on the recipient address
  discard
    ratelimit = 7 / 1m / per_mail / $recipients
    log_message = Rate limit exceeded for $recipients: $sender_rate/$sender_rate_period (max $sender_rate_limit)

  accept

我正在使用以下命令对此进行测试billyw.localhost

for i in {1..10}; do
  mail -s testing [email protected] <<< ''
  mail -s testing [email protected] <<< ''
done

此配置似乎按预期工作;它允许向每个收件人发送 7 封电子邮件,并丢弃每个收件人的最后 3 封。

但是,如果我尝试在与 SMTP 相关的 ACL 中使用相同的配置,例如:

  • acl_smtp_connect
  • acl_smtp_rcpt
  • acl_smtp_mail

然后,ACL 的速率限制条目就不会被挂钩,并且所有 10 条消息都会被发送。

为什么当它被放入与 smtp 相关的 ACL 时,速率限制不会被应用?

答案1

对于 SMTP 流量,这acl_not_smtp相当于acl_data。尝试在该 ACL 中限制速率。SMTP 连接为您提供了更多 ACL 选项,您可以在其中放置消息。(注意:discard是的黑洞变体,accept因此您不会看到拒绝消息。)丢弃是相当激烈的,我会对SMTP 流量 使用defer或。deny

速率限制涵盖第 42 章第 38 条Exim 规范。您可以使用修改后的配置进行测试,这样在测试时就可以比实施时更严格地限制速率。在实施之前留出时间让测试限制清除。

尝试将以下内容添加到您的acl_smtp_rcpt

defer
  ratelimit = 7 / 1m / $recipients
  message = Rate limit exceeded for $recipients: \
            $sender_rate/$sender_rate_period (max $sender_rate_limit)

/usr/bin/mail运行本地sendmail程序来传递邮件,而不是通过网络堆栈进行连接。对于您而言,exim4 是作为 sendmail 的替代品使用的。邮件将被视为非 smtp 传递。需要使用非 smtp ACL 进行速率限制。

相关内容