A.2. Exim 配置文件

Exim 配置文件在顶部包含全局定义(我们称之为主节),之后是其他几个节[1]。 这些其他节都以

begin section

我们将在大部分时间里专注于acl节(即在begin acl之后);但我们也会在transportsrouters节以及文件顶部的“主节”中添加和/或修改一些项目。

A.2.1. 访问控制列表

从 4.xx 版本开始,Exim 通过所谓的访问控制列表 (ACL) 整合了可能是在任何地方可用的最复杂和灵活的 SMTP 时间过滤机制。

ACL 可用于评估是否接受或拒绝传入消息事务的某个方面,例如来自远程主机的初始连接,或者 HELO/EHLOMAIL FROM:RCPT TO: SMTP 命令。 因此,例如,您可能有一个名为acl_rcpt_to的 ACL,用于验证从对等方接收的每个 RCPT TO: 命令。

ACL 由一系列语句(或规则)组成。 每个语句都以一个动作动词开始,例如accept, warn, require, defer,或deny,后跟与该语句相关的条件、选项和其他设置列表。 每个语句都按顺序评估,直到采取明确的动作(除了warn)之外。 在 ACL 的末尾有一个隐式的deny

上面的acl_rcpt_toACL 中的一个示例语句可能如下所示

  deny
    message  = relay not permitted
    !hosts   = +relay_from_hosts
    !domains = +local_domains : +relay_to_domains
    delay    = 1m

如果 RCPT TO: 命令不是由 "+relay_from_hosts" 主机列表中的主机传递的,并且收件人域不在 "+local_domains""+relay_to_domains" 域列表中,则此语句将拒绝该命令。 但是,在向此命令发出 "550" SMTP 响应之前,服务器将等待一分钟。

要在消息事务的给定阶段评估特定的 ACL,您需要将 Exim 的策略控制之一指向该 ACL。 例如,要使用上面提到的acl_rcpt_toACL 来评估 RCPT TO:,您的 Exim 配置文件的主节(在任何begin关键字之前)应包含

acl_smtp_rcpt = acl_rcpt_to

有关此类策略控制的完整列表,请参阅 Exim 规范中的第 14.11 节。

A.2.2. 扩展

大量的扩展项可用,包括运行时变量、查找函数、字符串/正则表达式操作、主机/域列表等等。 可以在文件 "spec.txt" 中找到最新 x.x0 版本(即 4.20、4.30..)的详尽参考;ACL 在第 38 节中描述。

特别是,Exim 提供了二十个通用扩展变量,我们可以在 ACL 语句中为这些变量赋值

注释

[1]

Debian 用户:exim4-config软件包让您可以选择将 Exim 配置拆分为分布在/etc/exim4/conf.d子目录下的几个小块,或者将整个配置保存在单个文件中。

如果您选择前一种选项(我推荐这种!),您可以通过在这些子目录中创建新文件,而不是修改现有文件,来使您的自定义设置与exim4-config软件包提供的库存配置良好地分离。 例如,您可以创建一个名为/etc/exim4/conf.d/acl/80_local-config_rcpt_to的文件,以声明您自己的 RCPT TO: 命令的 ACL(请参阅下方)。

Exim "init" 脚本(/etc/init.d/exim4)将在您下次(重新)启动时自动将所有这些文件合并为一个大型运行时配置文件。