ALIASES(5) ALIASES(5)
名称
aliases - Postfix 本地别名数据库格式说明
摘要
newaliases
postalias -q name [file-type]:[file-name]
描述
可选的 aliases(5) 表(通过 alias_maps 参数指定)用于重定向本地收件人的邮件。这些重定向操作由 Postfix 的 local(8) 投递代理处理。该表始终使用电子邮件地址的本地部分(不包含域名)进行搜索。
这与 virtual(5) 别名(通过 virtual_alias_maps 参数指定)不同,后者适用于所有类型的收件人(包括本地、虚拟和远程收件人),且由 cleanup(8) 守护进程实现。该表通常需要使用完整的电子邮件地址(包含域名)进行搜索。
通常,aliases(5) 表以文本文件形式存在,作为 postalias(1) 命令的输入。处理结果是一个采用 dbm 或 db 格式的索引文件,供邮件系统快速查询。修改 Postfix 别名数据库后,需要执行 newaliases 命令来重建索引文件。
当通过 NIS、LDAP 或 SQL 等其他方式提供别名表时,其查询方式与普通索引文件相同。
此外,别名表也可以采用正则表达式映射的形式,其中模式以正则表达式给出。这种情况下,查询方式会有所不同,具体说明请参见下文"正则表达式表"部分。
用户可以通过在 home 目录中创建 .forward 文件来控制自己的邮件投递。这些文件中的每行语法与 aliases(5) 条目的右侧格式相同。
别名数据库输入文件的格式规范如下:
o 别名定义的基本格式:
name: value1, value2, ...
o 空行和仅包含空白字符的行会被忽略,以"#"开头的行同样会被忽略
o 逻辑行以非空白字符开头。以空白字符开头的行视为前一个逻辑行的延续
name 是本地地址(不包含域名部分)。当名称包含特殊字符(如空格、"#"、":"或"@")时,需要使用双引号包裹。查询时,名称会被转换为小写形式,以实现不区分大小写的数据库查询。
特别地,当存在 owner-name 别名时,该别名会覆盖信封发件人地址,使投递状态通知发送给 owner-name 而非原始发件人(详见 owner_request_special、expand_owner_alias 和 reset_owner_alias 参数说明)。这一特性通常用于将邮件列表的投递错误定向给列表维护者处理,因为维护者比原始发件人更适合解决投递问题。
value 可以包含以下一种或多种形式:
address
将邮件转发到指定地址,该地址需符合 RFC 822 标准
/file/name
将邮件追加到指定文件。关于文件写入的具体细节,请参考 local(8) 文档中的"外部文件投递"和"投递权限"部分。投递目标不仅限于普通文件,例如可以将不需要的邮件重定向到 /dev/null
|command
通过管道将邮件传递给指定命令。包含特殊字符(如空格)的命令需要用双引号包裹。关于命令执行的具体细节,请参考 local(8) 文档中的"外部命令投递"和"投递权限"部分。命令执行失败时,系统会将有限的输出信息返回给发件人。/usr/include/sysexits.h 文件定义了预期的退出状态码。例如,使用 "|exit 67" 可以模拟"用户不存在"错误,而 "|exit 0" 则可以实现一个无响应的"黑洞"。
:include:/file/name
将邮件发送到指定文件中列出的所有收件人。:include: 文件中的行格式与 aliases(5) 条目的右侧格式相同。收件人可以是本手册描述的任何有效形式,但默认情况下禁止投递到"|command"和/file/name。如需启用,需要修改 allow_mail_to_commands 和 allow_mail_to_files 配置参数。
地址扩展
当别名数据库查询失败,且收件人本地部分包含可选的分隔符(如 user+foo)时,系统会尝试对基本地址(如 user)再次查询。propagate_unmatched_extensions 参数控制是否将未匹配的扩展部分(如 +foo)传递到查询结果中。
大小写转换
local(8) 投递代理在执行数据库查询前,总是将搜索字符串转换为小写形式。
正则表达式表
本节说明当别名表采用正则表达式形式时的特殊查询方式。关于正则表达式表的语法说明,请参考 regexp_table(5) 或 pcre_table(5) 文档。注意:这些格式在模式末尾不使用冒号。
每个正则表达式都会应用于整个搜索字符串,因此像 user+foo 这样的字符串不会被拆分为 user 和 foo 两部分。
系统会按照表中列出的顺序依次应用正则表达式,直到找到与搜索字符串匹配的表达式为止。
查询结果与索引文件查询相同。出于安全考虑,不支持 $1、$2 等子字符串替换功能。
安全性
local(8) 投递代理禁止在 alias_maps 中使用 $1 等正则表达式替换功能,以避免安全漏洞。
local(8) 投递代理会静默忽略在 alias_maps 中使用 proxymap(8) 服务器的请求,改为直接打开表文件。在 Postfix 2.2 之前的版本中,这种情况会导致 local(8) 投递代理报错退出。
配置参数
以下 main.cf 参数尤为重要。下文仅作简要说明,详细信息(包括示例)请参考 postconf(5) 文档。
alias_database (参见 'postconf -d' 输出)
供 local(8) 投递使用的别名数据库,可通过 newaliases 或 sendmail -bi 命令更新
alias_maps(参见 'postconf -d' 输出)
可选的查询表,仅使用电子邮件地址的本地部分(不含域名)进行搜索,且仅适用于 local(8) 收件人。这与 virtual_alias_maps 不同,后者通常需要使用完整地址(包含域名)搜索,且适用于所有类型的收件人
allow_mail_to_commands (别名,转发)
控制是否允许 local(8) 将邮件投递到外部命令
allow_mail_to_files (别名,转发)
控制是否允许 local(8) 将邮件投递到外部文件
expand_owner_alias (no)
当向某个别名(如"aliasname")投递邮件时,若存在对应的"owner-aliasname"别名,是否将其展开结果作为信封发件人地址
propagate_unmatched_extensions (canonical, virtual)
指定哪些地址查询表会将查询键中的地址扩展部分复制到查询结果中
owner_request_special (yes)
是否对 aliases(5) 文件中的 owner-listname 条目进行特殊处理,以及当 recipient_delimiter 设为"-"时,是否不拆分 owner-listname 和 listname-request 的本地部分
recipient_delimiter (空)
用于分隔电子邮件地址本地部分、用户名或 .forward 文件名与其扩展名的字符集
Postfix 2.3 及更高版本新增:
frozen_delivered_to (yes)
控制 local(8) 投递代理对 Delivered-To: 地址的处理方式(参见 prepend_delivered_header)。设为 yes 时,仅在投递尝试开始时更新一次,展开别名或 .forward 文件时不再更新
标准
RFC 822 (ARPA 网络文本消息标准)
参见
local(8) 本地投递代理
newaliases(1) 创建/更新别名数据库
postalias(1) 创建/更新别名数据库
postconf(5) 配置参数说明
自述文件
DATABASE_README Postfix 查询表概述
授权
使用本软件需遵守 Secure Mailer 授权条款
作者
Wietse Venema
IBM T.J. Watson 研究院
邮政信箱 704
美国纽约州约克镇高地 10598
Wietse Venema
Google 公司
纽约市第八大道 111 号
美国纽约州 10011
别名(5)