这是我第一次在这个论坛上发帖,但由于我已经找到了一些有关我的问题的线索,我希望我能找到解决方案。
我觉得我想做的事很简单。
我有一个运行 exim4 的网络服务器,我想限制 exim 可以发送的邮件总量。
我已将以下 acl 定义添加到主配置文件中:
acl_check_not_smtp:
warn ratelimit = 0 / 1h / strict / $sender_address_local_part
log_message = Sender rate $sender_rate / $sender_rate_period
acl_not_smtp:
deny message = Sender rate overlimit - $sender_rate / $sender_rate_period
ratelimit = 1 / 30m / strict
#System-wide rate limit
defer message = Sorry, too busy right now.
ratelimit = 10 / 1h / $primary_hostname
accept
但是,一旦我添加 acl_not_smtp = acl_not_smtp,就会出现以下错误:
Stopping MTA for restart:2014-11-13 22:12:47 Exim configuration error in line 433 of /var/lib/exim4/config.autogenerated.tmp:
error in ACL: unknown ACL condition/modifier in "acl_not_smtp = acl_not_smtp"
我已经阅读并搜索过,但有些东西仍未得到解答,非常感谢您的帮助。
谢谢
答案1
名称“acl_not_smtp”是顶级设置。您可以为其分配单个命令,也可以为其分配不同名称的 acl 段。如果您没有为其分配任何内容,但您的 ACL 中有一个“acl_not_smtp”acl 段,那么 Exim 仍会使用它,因为它是正确的名称。示例:
# Don't do any checking, just force Exim to accept:
acl_not_smtp = accept
# But here we actually declare which acl segment to use:
acl_not_smtp = acl_check_not_smtp
begin acl
acl_check_not_smtp:
...your ACL checks
您以一种不兼容的方式混淆了两者。
我怀疑你的配置顶部有acl_not_smtp = acl_check_not_smtp,但在你的 ACL 部分中,你有一个 acl 段名为禁止 smtp 请求(你必须添加它,因为你遵循了一些操作指南)和取消 acl_check_not_smtp当 Exim 尝试确定要调用什么时,它会解释禁止 smtp 请求已被定义两次(一次是在全局部分中,说明它将由 acl_check_not_smtp 提供服务,然后在 ACL 中再次由其默认名称定义)。
解决方案是将您在 acl_not_smtp 中添加的内容合并到 acl_check_not_smtp 段中,并从 ACL 中删除 acl_not_smtp 部分(假设已添加它...如果它已经存在,那么您需要向我们展示更多您的配置)。