VIRTUAL(8)                                                          VIRTUAL(8)

名称
       virtual - Postfix 虚拟域邮件投递代理

概述
       virtual [通用 Postfix 守护进程选项]

描述
       virtual(8) 投递代理专为虚拟邮件托管服务设计。该代理最初基于 Postfix 
       local(8) 投递代理,通过映射表查找完整收件人地址进行投递,而非使用硬编码的 UNIX 
       密码文件仅查找地址的本地部分。

       该投递代理仅处理邮件投递。其他功能如邮件转发、外出通知等,必须通过 
       virtual_alias 映射表或类似的查找机制进行配置。

邮箱位置
       邮箱位置由 virtual_mailbox_basevirtual_mailbox_maps 
       配置参数控制(详见下文)。virtual_mailbox_maps 表按收件人地址建立索引,
       索引方式参见下文"表搜索顺序"部分。

       邮箱路径名按以下方式构建:

         $virtual_mailbox_base/$virtual_mailbox_maps(recipient)

       其中 recipient 为完整收件人地址。

UNIX 邮箱格式
       当邮箱路径不以 / 结尾时,邮件将以 UNIX 邮箱格式投递。该格式将多封邮件存储在单个文本文件中。

       virtual(8) 投递代理会在每封邮件前添加以下内容:
       - 以"From sender time_stamp"开头的信封头
       - 包含信封收件人地址的 Delivered-To: 消息头
       - 包含 Postfix 原始收件人地址的 X-Original-To: 头
       - 包含信封发件人地址的 Return-Path: 头
       - 在以"From "开头的行前添加 > 字符
       - 末尾添加空行

       投递过程中会对邮箱文件进行独占锁定。如遇问题,系统会尝试将邮箱截断至原始大小。

QMAIL MAILDIR 格式
       当邮箱路径以 / 结尾时,邮件将以 qmail maildir 格式投递。该格式每封邮件单独存储为一个文件。

       virtual(8) 投递代理会在邮件前添加:
       - 包含最终信封收件人地址的 Delivered-To: 头
       - 包含 Postfix 原始收件人地址的 X-Original-To: 头 
       - 包含信封发件人地址的 Return-Path: 头

       根据定义,maildir 格式在邮件投递或检索时不需要应用层文件锁定。

邮箱所有权
       邮箱所有权由 virtual_uid_mapsvirtual_gid_maps 
       查找表控制,这两个表均以完整收件人地址为索引。每个表分别提供数字形式的用户ID和组ID字符串。

       virtual_minimum_uid 参数规定了 virtual_uid_maps 
       中用户ID的最小允许值。

大小写折叠
       所有投递决策均基于转换为小写后的完整收件人地址。关于带有可选地址扩展名的特殊情况,请参阅下一节。

表搜索顺序
       通常,查找表以文本文件形式指定,作为 postmap(1) 命令的输入。生成的索引文件采用 
       dbmdb 格式,供邮件系统快速搜索。

       搜索顺序如下,首次成功匹配后即停止搜索:

       o      当收件人带有可选地址扩展名时,首先查找 [email protected] 地址。

                    Postfix 2.1 之前的版本会始终忽略可选地址扩展名。

       o      其次查找不带地址扩展名的 [email protected] 地址。

       o      最后查找 @domain 收件人。

       当表通过 NIS、LDAP 或 SQL 等方式提供时,搜索方式与普通索引文件相同。

       此外,表也可以作为正则表达式映射提供,此时仅将完整收件人地址提供给正则表达式映射。

安全性
       只要收件人用户/组ID信息的查找表得到适当保护,virtual(8) 
       投递代理就不存在安全隐患。该程序不支持在 chroot 环境下运行。

       virtual(8) 投递代理禁止在正则表达式查找表中使用 $1 等替换操作,以避免安全漏洞。

       virtual(8) 投递代理会静默忽略使用 proxymap(8) 
       服务器的请求,改为直接打开表。在 Postfix 2.2 之前版本中,虚拟投递代理会报致命错误并终止。

标准
       RFC 822 (ARPA 互联网文本消息)

诊断
       当收件人没有邮箱或超过磁盘配额时,邮件会被退回。其他问题情况下,已有收件人的邮件会被延迟投递并记录警告。

       问题和事务会记录到 syslogd(8) 或 postlogd(8)。损坏的邮件文件会被标记,
       以便队列管理器后续将其移至 corrupt 队列。

       根据 notify_classes 参数设置,postmaster 会收到退信和其他问题的通知。

缺陷
       该投递代理支持电子邮件地址和查找表键中的地址扩展名,但不会将地址扩展名信息传播到查找结果中。

       Postfix 应有能返回多个结果属性的查找表。为避免维护三个表的不便,建议使用 LDAP 或 MySQL 数据库。

配置参数main.cf 的更改会自动生效,因为 virtual(8) 
       进程运行时间有限。使用"postfix reload"命令可加速更改生效。

       下文仅为参数摘要,详情及示例请参阅 postconf(5)邮箱投递控制
       virtual_mailbox_base (空)
              virtual(8) 投递代理添加到所有 $virtual_mailbox_maps 
              表查找结果路径名前的前缀。

       virtual_mailbox_maps (空)
              包含 $virtual_mailbox_domains 匹配域中所有有效地址的可选查找表。

       virtual_minimum_uid (100)
              virtual(8) 投递代理接受的 $virtual_uid_maps 
              表查找结果中用户ID的最小值。

       virtual_uid_maps (空)
              包含各收件人用户ID的查找表,virtual(8) 投递代理在写入邮箱时使用该ID。

       virtual_gid_maps (空)
              包含各收件人组ID的查找表,用于 virtual(8) 邮箱投递。

       Postfix 2.0 及更高版本可用:

       virtual_mailbox_domains ($virtual_mailbox_maps)
              指定 Postfix 作为最终目的地的域名列表,邮件通过 $virtual_transport 
              邮件传输进行投递。

       virtual_transport (virtual)
              默认邮件传输和下一跳目的地,用于投递到 $virtual_mailbox_domains 
              所列域。

       Postfix 2.5.3 及更高版本可用:

       strict_mailbox_ownership (yes)
              当邮箱文件不属于收件人所有时延迟投递。

锁定控制
       virtual_mailbox_lock (参见 'postconf -d' 输出)
              在尝试投递前锁定 UNIX 风格 virtual(8) 邮箱的方式。

       deliver_lock_attempts (20)
              尝试获取邮箱文件或 bounce(8) 日志文件独占锁的最大次数。

       deliver_lock_delay (1秒)
              尝试获取邮箱文件或 bounce(8) 日志文件独占锁的间隔时间。

       stale_lock_time (500秒)
              移除陈旧独占邮箱锁文件的超时时间。

资源和速率控制
       virtual_mailbox_limit (51200000)
              单个 virtual(8) 邮箱或 maildir 文件的最大字节大小,0 表示无限制。

       在 qmgr(8) 守护进程中实现:

       virtual_destination_concurrency_limit ($default_destination_concurrency_limit)
              通过虚拟消息传输向同一目的地并行投递的最大数量。

       virtual_destination_recipient_limit ($default_destination_recipient_limit)
              虚拟消息传输每封邮件的最大收件人数。

杂项控制
       config_directory (参见 'postconf -d' 输出)
              Postfix main.cfmaster.cf 配置文件的默认位置。

       daemon_timeout (18000秒)
              Postfix 守护进程处理请求的最长时间,超时后会被内置看门狗终止。

       delay_logging_resolution_limit (2)
              记录亚秒级延迟值时小数点后的最大位数。

       ipc_timeout (3600秒)
              通过内部通信通道发送或接收信息的超时时间。

       max_idle (100秒)
              空闲 Postfix 守护进程在主动终止前等待传入连接的最长时间。

       max_use (100)
              Postfix 守护进程在主动终止前处理的最大传入连接数。

       process_id (只读)
              Postfix 命令或守护进程的进程ID。

       process_name (只读)
              Postfix 命令或守护进程的进程名称。

       queue_directory (参见 'postconf -d' 输出)
              Postfix 顶级队列目录的位置。

       syslog_facility (mail)
              Postfix 日志的 syslog 设施。

       syslog_name (参见 'postconf -d' 输出)
              预置到 syslog 记录中进程名称的前缀,例如"smtpd"会变为"prefix/smtpd"。

       Postfix 3.0 及更高版本可用:

       virtual_delivery_status_filter ($default_delivery_status_filter)
              virtual(8) 投递代理的可选过滤器,用于修改成功或失败投递的状态码或说明文本。

       Postfix 3.3 及更高版本可用:

       enable_original_recipient (yes)
              在地址被重写为不同地址后(例如通过别名或规范映射),启用对原始收件人地址的支持。

       service_name (只读)
              Postfix 守护进程的 master.cf 服务名称。

       Postfix 3.5 及更高版本可用:

       info_log_address_format (external)
              非调试日志(信息、警告等)中使用的电子邮件地址格式。

参见
       qmgr(8),队列管理器
       bounce(8),投递状态报告
       postconf(5),配置参数
       postlogd(8),Postfix 日志记录
       syslogd(8),系统日志记录

自述文件
       使用"postconf readme_directory"或
       "postconf html_directory"查找此信息。
       VIRTUAL_README,域名托管指南

许可证
       必须随本软件分发 Secure Mailer 许可证。

历史
       该投递代理最初基于 Postfix 本地投递代理。修改主要包括删除在此上下文中不适用或不安全的代码:
       别名、~user/.forward 文件、投递到"|command"或/file/name。

       Delivered-To: 消息头源自 Daniel Bernstein 的 qmail 系统。

       maildir 结构源自 Daniel Bernstein 的 qmail 系统。

作者
       Wietse Venema
       IBM T.J. Watson 研究院
       邮政信箱 704
       美国纽约州约克镇高地 10598

       Wietse Venema
       Google 公司
       美国纽约州纽约市第八大道 111 号 10011

       Andrew McNamara
       [email protected]
       connect.com.au 有限公司
       澳大利亚新南威尔士州北悉尼米勒街 213 号 3 层 2060

                                                                    VIRTUAL(8)