简介
Postfix 2.0 引入了地址类概念。这是根据收件地址的投递方式对收件地址进行分组的方法。该想法源自与 Victor Duchovni 的讨论。尽管地址类引入了少量不兼容性,但它也使得对 托管域 和未知收件人的处理得到改进。
本文档提供了以下内容:
地址类有什么用?
为什么应该关注地址类?这是 Postfix 决定接受哪些邮件以及如何投递它们的方式。换句话说,地址类对 Postfix 的运行至关重要。
地址类由三个要素定义。
属于该地址类的域列表。
示例:所有本地域(local domains),或所有中继域(relay domains)。
该地址类中域的默认投递传输。
示例:local_transport 或 relay_transport(这些指向在master.cf中定义的服务)。
优势:这避免了在传输映射中显式指定路由信息。
该地址类别的有效收件人地址列表。
优势:Postfix SMTP 服务器会拒绝无效收件人,并返回错误信息"用户在 <地址类名称> 表中不存在",同时避免发送包含反向散射垃圾邮件的 MAILER-DAEMON 消息。
Postfix 实现了哪些地址类?
初始时地址类列表是硬编码的,但设计为可扩展。下表概述了各类的用途及相关配置参数。
本地域类(local)。
- 用途:用于传统 UNIX 系统账户和传统 Sendmail 风格别名的最终投递。这通常用于机器的 规范域(例如,$myhostname,$mydomain)。有关规范域名、托管域名和其他域名的区别,请参阅VIRTUAL_README文件。
- 域名通过mydestination参数列出。此域类还包括当 IP 地址在 inet_interfaces 或 proxy_interfaces 参数中列出时,该域也会收到邮件。
- 这些域的有效收件人地址在 local_recipient_maps 参数中列出,具体请参阅 LOCAL_RECIPIENT_README。Postfix SMTP 服务器会以 "用户在本地收件人表中不存在" 拒绝无效收件人。如果 local_recipient_maps 参数的值为空,则 Postfix SMTP 服务器接受本地域类中的任何地址。
- 邮件投递传输通过local_transport参数指定。默认值为local:$myhostname,使用local(8)投递代理进行投递。
虚拟别名域类。
- 用途:托管域,其中每个收件人地址被别名到不同域类中的一个地址,例如本地 UNIX 系统账户或远程地址。一个虚拟别名示例在VIRTUAL_README文件中给出。
- 域名在virtual_alias_domains中列出。默认值为 $virtual_alias_maps,以兼容 Postfix 1.1。
这些域的有效收件人地址在 virtual_alias_maps 参数中列出。Postfix SMTP 服务器会以 "用户在虚拟别名表中不存在" 拒绝无效收件人。默认值为 $virtual_maps 以兼容 Postfix 1.1。
注意:出于历史原因,virtual_alias_maps 参数适用于所有域类中的收件人,而不仅仅是虚拟别名域类。
- 没有可配置的邮件投递传输。每个地址必须别名到其他域类中的某个地址。
虚拟邮箱域类。
- 用途:用于托管域(hosted domains)的最终投递,其中每个收件人地址可以拥有自己的邮箱,且用户无需拥有 UNIX 系统账户。一个虚拟邮箱示例在VIRTUAL_README文件中给出。
- 域名称通过virtual_mailbox_domains参数列出。默认值为 $virtual_mailbox_maps,以兼容 Postfix 1.1。
- 这些域的有效收件人地址通过 virtual_mailbox_maps 参数列出。Postfix SMTP 服务器会拒绝无效收件人,并返回错误信息"用户在虚拟邮箱表中不存在"。如果该参数值为空,Postfix SMTP 服务器将接受所有列在 $virtual_mailbox_domains 中的域的收件人。
- 邮件投递传输由 virtual_transport 参数指定。默认值为 virtual,使用 virtual(8) 投递代理进行投递。
中继域类。
- 用途:将邮件转发至将您的系统列为主要或备用 MX 主机的远程目的地。有关基本配置细节的讨论,请参阅 BASIC_CONFIGURATION_README 文档。有关规范域、托管域和其他域的区别,请参阅VIRTUAL_README文件。
- 域名通过 relay_domains 参数列出。
- 这些域名的有效收件人地址通过 relay_recipient_maps 参数列出。Postfix SMTP 服务器会拒绝无效收件人,并返回错误信息"用户在中继收件人表中不存在"。如果该参数值为空,Postfix SMTP 服务器将接受所有列在 relay_domains 参数中的域的收件人。
- 邮件投递传输方式通过 relay_transport 参数指定。默认值为relay,这是smtp(8)传输代理的克隆。
默认域类。
- 用途:代表授权客户端将邮件转发到互联网。有关基本配置细节的讨论,请参阅BASIC_CONFIGURATION_README文件。有关规范域名、托管域名和其他域名的区别,请参阅VIRTUAL_README文件。
- 此类没有目标域名表。
- 此类没有有效的收件人地址表。
- 邮件投递传输通过 default_transport 参数指定。默认值为 smtp,用于通过 smtp(8) 传输代理进行投递。
与 Postfix 1.1 相比的改进
Postfix 2.0 的地址类使以下改进相对于早期 Postfix 版本成为可能:
- 您不再需要在 Postfix 传输映射中指定所有 virtual(8) 邮件箱域。virtual(8) 投递代理现在与 local(8) 或 SMTP(8) 一样,成为了一等公民。
- 在邮件网关系统中,地址类用于分离入站邮件中继流量($relay_transport)与出站流量($default_transport)。这解决了在存在大量出站邮件时,入站邮件投递可能因资源不足而受阻的问题。
- SMTP 服务器以比 Postfix 版本 1 更一致的方式拒绝未知收件人。这有助于防止无法投递的邮件(包括退回的无法投递邮件)进入邮件队列。此行为由配置参数 smtpd_reject_unlisted_recipient 控制。
- 从 Postfix 2.1 版本开始,SMTP 服务器还可以拒绝未知发件人地址(即会被拒绝为未知收件人地址的地址)。发件人"出站过滤"可帮助减缓电子邮件蠕虫的爆发。此功能由 smtpd_reject_unlisted_sender 配置参数控制。
与 Postfix 1.1 的不兼容性
Postfix 2.0 的地址类引入了几个与文档行为不兼容的更改。为了便于过渡,新参数的默认值与旧版本兼容。
virtual_maps 参数已被 virtual_alias_maps(用于地址查找)和 virtual_alias_domains(用于以前称为"Postfix 风格虚拟域"的名称)。
为了与 Postfix 1.1 版本向后兼容,新的 virtual_alias_maps 参数默认值为 $virtual_maps,而新的 virtual_alias_domains 参数默认值为 $virtual_alias_maps。
virtual_mailbox_maps 参数现在有一个配套参数,名为 virtual_mailbox_domains(用于虚拟投递代理所服务的域的名称)。virtual_mailbox_maps 参数现在仅用于地址查找。
为了与 Postfix 版本 1.1 兼容,新的 virtual_mailbox_domains 参数默认值为 $virtual_mailbox_maps。
- 引入了 relay_recipient_maps 参数。Postfix SMTP 服务器可使用此参数阻止转发给不存在的收件人的邮件。此列表默认空,表示接受任何收件人。
- local_recipient_maps 功能现在默认启用。Postfix SMTP 服务器使用此参数拒绝发送到未知本地收件人的邮件。请参阅 LOCAL_RECIPIENT_README 文件中的提示和技巧。
- 在 master.cf 中引入中继投递传输。这有助于避免在有大量外发邮件时,入站邮件中继的邮件投递调度问题,但可能需要您更新 "defer_transports" 设置。