VIRTUAL(5) VIRTUAL(5)
名称
virtual - Postfix 虚拟别名表格式
概要
postmap /etc/postfix/virtual
postmap -q "字符串" /etc/postfix/virtual
postmap -q - /etc/postfix/virtual <输入文件
描述
可选的 virtual(5) 别名表 (virtual_alias_maps) 适用于所有收件人类型:
local(8)、虚拟和远程。该功能由 Postfix 的 cleanup(8)
守护进程在邮件入队前实现。查询这些表时通常需要使用完整的电子邮件地址(包含域名)。
这与 aliases(5) 表 (alias_maps) 不同,后者仅适用于 local(8)
收件人,且查询时只需使用电子邮件地址的本地部分(不含域名)。
虚拟别名支持递归映射。若要终止特定地址的递归,可将该地址映射到其自身。
虚拟别名 的主要应用场景包括:
o 将发往某个地址的邮件重定向至一个或多个其他地址
o 实现虚拟别名域,将该域中所有地址映射到其他域的地址
注意:虚拟别名域不同于由 Postfix virtual(8) 邮件投递代理实现的
虚拟邮箱域。通过 虚拟邮箱域,每个收件人地址都可拥有独立邮箱。
虚拟别名仅应用于收件人信封地址,不会修改邮件头内容。如需重写信封和邮件头地址,
请使用 canonical(5) 映射。
通常,virtual(5) 别名表以文本文件形式指定,作为 postmap(1)
命令的输入。生成的 dbm 或 db 格式索引文件可供邮件系统快速检索。
修改文本文件后,请执行 "postmap /etc/postfix/virtual" 命令重建索引文件。
当通过 NIS、LDAP 或 SQL 等方式提供该表时,其查询方式与普通索引文件相同。
此外,该表也可作为正则表达式映射提供(模式以正则表达式表示),
或通过 TCP 服务器进行查询。这两种情况下的查询方式略有不同,
详见下文"正则表达式表"和"基于TCP的表"章节。
大小写处理
数据库查询前会将搜索字符串转换为小写。从 Postfix 2.3 开始,
对于 regexp: 或 pcre: 等支持同时匹配大小写的数据库类型,
其查询字段将保留原始大小写。
表格式
postmap(1) 命令的输入格式如下:
模式 地址, 地址, ...
当 模式 匹配邮件地址时,将其替换为对应的 地址
空行和注释
空行及仅含空格的行将被忽略,以'#'开头的行同样会被忽略
多行文本
逻辑行以非空格文本开始。以空格开头的行视为前一行内容的延续
表查询顺序
使用 DB 或 DBM 等索引文件,或 NIS、LDAP、SQL 等网络表时,
每个 用户@域名 查询会按以下顺序生成查询模式:
每个查询模式会依次在所有指定查询表中进行匹配,直到找到首个匹配项。
用户@域名 地址, 地址, ...
将 用户@域名 的邮件重定向至 地址。此格式优先级最高
用户 地址, 地址, ...
当 站点 等于 $myorigin,或列于 $mydestination、
$inet_interfaces 或 $proxy_interfaces 时,
将 用户@站点 的邮件重定向至 地址
此功能与本地 aliases(5) 数据库功能有所重叠,区别在于
virtual(5) 映射可应用于非本地地址
@域名 地址, 地址, ...
将该域中其他用户的邮件重定向至 地址。此格式优先级最低
注意:@域名 是通配符。使用此格式时,Postfix SMTP 服务器会接受
该域中任何收件人的邮件,无论该收件人是否存在。这可能导致您的邮件系统
成为反向散射源:Postfix 会先接受不存在的收件人邮件,然后尝试将这些
邮件作为"无法投递"邮件退回给通常被伪造的发件人地址。
为避免通配符域产生反向散射,建议:
1. 用明确的 1:1 映射替代通配符映射
2. 为该域添加 reject_unverified_recipient 限制:
smtpd_recipient_restrictions =
...
reject_unauth_destination
check_recipient_access
inline:{example.com=reject_unverified_recipient}
unverified_recipient_reject_code = 550
注意:若收件人被映射到远程地址,上述配置可能导致 Postfix 联系远程服务器
结果地址重写
查询结果会经过以下地址重写处理:
o 当结果为 @其他域 格式时,结果将转换为相同用户名在 其他域 的形式。
此转换仅适用于多地址查询结果中的第一个地址
o 当 "append_at_myorigin=yes" 时,为不含"@域名"的地址追加
"@$myorigin"
o 当 "append_dot_mydomain=yes" 时,为不含".域名"的地址追加
".$mydomain"
地址扩展
当邮件地址本地部分包含可选收件人分隔符时(如 user+foo@domain),
查询顺序变为:user+foo@domain、user@domain、user+foo、
user 和 @domain
propagate_unmatched_extensions 参数控制是否将未匹配的地址扩展
(+foo)传播到表查询结果中
虚拟别名域
除虚拟别名外,虚拟别名表还可用于实现 虚拟别名域,
将该域中所有收件人地址映射到其他域的地址。
注意:虚拟别名域不同于由 Postfix virtual(8) 邮件投递代理实现的
虚拟邮箱域。后者允许每个收件人地址拥有独立邮箱。
在 虚拟别名域 中,虚拟域拥有独立的用户命名空间。
本地(非虚拟)用户名在虚拟别名域中不可见。特别是,
本地 aliases(5) 和本地邮件列表不会以 [email protected] 形式可见。
配置 虚拟别名域 支持的方法如下:
/etc/postfix/main.cf:
virtual_alias_maps = hash:/etc/postfix/virtual
注:部分系统使用 dbm 而非 hash 数据库。可用数据库类型请参见
"postconf -m" 命令输出
/etc/postfix/virtual:
virtual-alias.domain anything(右侧内容不影响功能)
[email protected] postmaster
[email protected] address1
[email protected] address2, address3
virtual-alias.domain anything 条目是虚拟别名域的必要配置。
缺少此条目会导致邮件被拒绝并显示"中继访问被拒绝",
或返回"邮件循环返回给自己"的错误。
请勿在 main.cf mydestination 或 relay_domains
配置参数中指定虚拟别名域名。
对于 虚拟别名域,Postfix SMTP 服务器会接受
已知用户@virtual-alias.domain 的邮件,并拒绝
未知用户@virtual-alias.domain 的邮件(标记为无法投递)。
除通过 virtual_alias_maps 表指定虚拟别名域名外,
也可通过 main.cf virtual_alias_domains 配置参数指定。
该参数语法与 main.cf mydestination 配置参数相同。
正则表达式表
本节说明当表以正则表达式形式提供时,查询方式的变化。
关于正则表达式查询表语法,请参阅 regexp_table(5) 或 pcre_table(5)。
每个模式都是应用于整个被查询地址的正则表达式。
因此 user@domain 邮件地址不会被拆分为 user 和 @domain 部分,
user+foo 也不会被拆分为 user 和 foo。
模式按表中指定顺序应用,直至找到匹配搜索字符串的模式。
结果与索引文件查询相同,并增加以下特性:
模式中括号内的子字符串可通过 $1、$2 等形式插值到结果中。
基于TCP的表
本节说明当查询定向到基于TCP的服务器时,查询方式的变化。
关于TCP客户端/服务器查询协议,请参阅 tcp_table(5)。
此功能在 Postfix 2.5 及更高版本中可用。
每次查询操作都使用完整地址一次。因此 user@domain
邮件地址不会被拆分为 user 和 @domain 部分,
user+foo 也不会被拆分为 user 和 foo。
结果与索引文件查询相同。
已知问题
当前表格式不支持引号约定。
配置参数
以下 main.cf 参数与本主题特别相关。
语法详情和默认值请参阅 Postfix main.cf 文件。
配置更改后请使用"postfix reload"命令。
virtual_alias_maps ($virtual_maps)
可选的查询表,通常使用完整电子邮件地址(含域名)查询,
适用于所有收件人类型:local(8)、虚拟和远程;
不同于 alias_maps 仅使用电子邮件地址本地部分(不含域名)查询,
且仅适用于 local(8) 收件人
virtual_alias_domains ($virtual_alias_maps)
Postfix 作为指定虚拟别名域的最终目的地,
这些域的所有地址都被映射到其他本地或远程域的地址
propagate_unmatched_extensions (canonical, virtual)
控制哪些地址查询表会将地址扩展从查询键传播到查询结果
其他相关参数:
inet_interfaces (all)
本邮件系统接收邮件的本地网络接口地址
mydestination ($myhostname, localhost.$mydomain, localhost)
通过 $local_transport 邮件传输方式投递的域名列表
myorigin ($myhostname)
本地发出邮件显示的来源域名,以及本地邮件的投递域名
owner_request_special (yes)
启用对 aliases(5) 文件中 owner-列表名 条目的特殊处理,
且当 recipient_delimiter 设为"-"时,
不分割 owner-列表名 和 列表名-request 地址的本地部分
proxy_interfaces (empty)
本邮件系统通过代理或网络地址转换设备接收邮件的远程网络接口地址
参见
cleanup(8),邮件规范化和入队
postmap(1),Postfix 查询表管理器
postconf(5),配置参数
canonical(5),规范地址映射
参考文档
ADDRESS_REWRITING_README,地址重写指南
DATABASE_README,Postfix 查询表概述
VIRTUAL_README,域名托管指南
许可
本软件需随附 Secure Mailer 许可证。
作者
Wietse Venema
IBM T.J. Watson 研究中心
美国纽约州约克镇高地,704号信箱,邮编10598
Wietse Venema
Google 公司
美国纽约州纽约市第八大道111号,邮编10011
VIRTUAL(5)