系统管理指南:网络服务

第 14 章 邮件服务(参考)

sendmail 程序是一个邮件传输代理。该程序使用配置文件来提供别名和转发、到网络网关的自动路由以及灵活的配置。Solaris OS 提供了大多数站点都可以使用的标准配置文件。第 12 章,邮件服务(概述)介绍了邮件服务的组件,并对典型邮件服务配置进行了说明。第 13 章,邮件服务(任务)说明了如何设置和管理电子邮件系统。本章介绍了有关以下主题的信息。

有关这些章节中未介绍的详细信息,请参见以下手册页:

Solaris 版本的 sendmail

本节包括以下主题,其中介绍了 sendmail 的 Solaris 版本与普通 Berkeley 版本之间的一些差异。

编译 sendmail 时使用和未使用的标志

从 Solaris 10 发行版开始,将使用以下标志来编译 sendmail。如果您的配置需要使用其他标志,则需下载源代码并重新编译此二进制命令。可在 http://www.sendmail.org 中找到有关此过程的信息。

表 14–1 常规 sendmail 标志

标志 

说明 

SOLARIS=21000

支持 Solaris 10 发行版。 

MILTER

支持邮件过滤器 API。缺省情况下,在 sendmail 版本 8.13 中会启用此标志。请参见MILTER,用于 sendmail 的邮件过滤器 API

NETINET6

支持 IPv6。此标志已从 conf.h 移至 Makefile

表 14–2 映射和数据库的类型

标志 

说明 

NDBM

支持 ndbm 数据库

NEWDB

支持 Berkeley DB 数据库 

USERDB

支持用户数据库 

NIS

支持 nis 数据库

NISPLUS

支持 nisplus 数据库

LDAPMAP

支持 LDAP 映射

MAP_REGEX

支持正则表达式映射 

表 14–3 Solaris 标志

标志 

说明 

SUN_EXTENSIONS

支持 sun_compat.o 中包括的 Sun 扩展名。

SUN_INIT_DOMAIN

为了实现向下兼容,支持使用 NIS 域名来完全限定本地主机名。有关更多信息,请参阅 http://www.sendmail.org 中的供应商特定信息。

SUN_SIMPLIFIED_LDAP

支持特定于 Sun 的简化的 LDAP API。有关更多信息,请参阅 http://www.sendmail.org 中的供应商特定信息。

VENDOR_DEFAULT=VENDOR_SUN

选择 Sun 作为缺省供应商。 

下表列出了编译 Solaris 10 发行版附带的 sendmail 版本时未使用的普通标志。

表 14–4 Solaris 版本的 sendmail 中未使用的普通标志

标志 

说明 

SASL

简单身份验证和安全层 (RFC 2554) 

STARTTLS

事务处理级安全 (RFC 2487) 

要查看用于编译 sendmail 的标志的列表,请使用以下命令。


% /usr/lib/sendmail -bt -d0.10 < /dev/null

注 –

前面的命令不会列出特定于 Sun 的标志。


MILTER,用于 sendmail 的邮件过滤器 API

MILTERsendmail 的邮件过滤器 API,通过它第三方程序可在处理邮件以过滤元信息和内容时访问邮件。无需构造过滤器并配置 sendmail 即可使用它。缺省情况下,sendmail 版本 8.13 中会启用该 API。

有关更多详细信息,请访问以下站点:

替代 sendmail 命令

Solaris 发行版中不包括 sendmail.org 所提供的普通发行版中的所有命令同义词。下表提供了命令别名的完整列表。该表还列出了 Solaris 发行版中是否包括这些命令以及如何使用 sendmail 来生成相同行为。

表 14–5 替代 sendmail 命令

替代名称 

Solaris 发行版中是否包括该命令? 

用于 sendmail 的选项

hoststat

否 

sendmail -bh

mailq

是 

sendmail -bp

newaliases

是 

sendmail -bi

purgestat

否 

sendmail -bH

smtpd

否 

sendmail -bd

配置文件的版本

从 Solaris 10 发行版开始,sendmail 提供了一个配置选项,用于定义 sendmail.cf 文件的版本。通过此选项,可将较旧的配置文件用于当前版本的 sendmail。 可将版本级别设置为 010 之间的值。另外,还可以定义供应商。Berkeley 和 Sun 都是有效的供应商选项。如果指定了版本级别而未定义供应商,则将使用 Sun 作为缺省供应商设置。下表列出了一些有效选项。

表 14–6 配置文件的版本值

字段 

说明 

V7/Sun

用于 sendmail 版本 8.8 的设置。

V8/Sun

用于 sendmail 版本 8.9 的设置。此设置包括在 Solaris 8 发行版中。

V9/Sun

用于 sendmail 版本 8.10 和 8.11 的设置。

V10/Sun

用于 sendmail 版本 8.12 和 8.13 的设置。版本 8.12 是 Solaris 9 发行版的缺省版本。从 Solaris 10 发行版开始,版本 8.13 为缺省版本。


注 –

建议您不要使用 V1/Sun。有关更多信息,请参阅 http://www.sendmail.org/vendor/sun/differences.html#4


有关任务信息,请参阅第 13 章,邮件服务(任务)中的生成 sendmail.cf 配置文件

邮件服务的软件和硬件组件

本节介绍了邮件系统的软件和硬件组件。

软件组件

每种邮件服务都至少包括以下软件组件之一。

本节还介绍了以下软件组件。

邮件用户代理

邮件用户代理是用户与邮件传输代理之间用作接口的程序。sendmail 程序是一个邮件传输代理。Solaris 操作系统提供了以下邮件用户代理。

邮件传输代理

邮件传输代理负责邮件的路由以及邮件地址的解析。此代理也称为邮件传输代理。用于 Solaris 操作系统的传输代理是 sendmail。该传输代理可执行以下功能。

本地传送代理

本地传送代理是实现邮件传送协议的程序。Solaris 操作系统附带了以下本地传送代理。

sendmail 版本 8.12 中的更改提供了有关以下相关主题的信息。

邮件程序与 sendmail

邮件程序是特定于 sendmail 的术语。sendmail 使用邮件程序来标识自定义的本地传送代理或自定义的邮件传输代理的特定实例。至少需要在 sendmail.cf 文件中指定一个邮件程序。有关任务信息,请参阅第 13 章,邮件服务(任务)中的生成 sendmail.cf 配置文件。本节对以下两种类型的邮件程序进行了简短说明。

有关邮件程序的其他信息,请参见 http://www.sendmail.org/m4/readme.html/etc/mail/cf/README

简单邮件传输协议 (Simple Mail Transfer Protocol, SMTP) 邮件程序

SMTP 是在 Internet 中使用的标准邮件协议。此协议定义了以下邮件程序。

UNIX 对 UNIX 复制程序 (UNIX-to-UNIX Copy Program, UUCP) 邮件程序

应尽可能避免使用 UUCP。有关说明,请参阅 http://www.sendmail.org/m4/uucp_mailers.html 或在 /etc/mail/cf/README 中搜索以下字符串:USING UUCP MAILERS

UUCP 定义了以下邮件程序。

uucp-old

$=U 类中的名称将发送至 uucp-olduucp 是此邮件程序的废弃名称。uucp-old 邮件程序在头中使用叹号地址。

uucp-new

$=Y 类中的名称将发送至 uucp-new。如果知道接收 UUCP 的邮件程序可在一次传输中管理多个收件人,请使用此邮件程序。suucp 是此邮件程序的废弃名称。uucp-new 邮件程序在头中也使用叹号地址。

如果配置中还指定了 MAILER(smtp),则还需定义另外两个邮件程序。

uucp-dom

此邮件程序使用域样式地址,并且基本上应用 SMTP 重写规则。

uucp-uudom

$=Z 类中的名称将发送至 uucp-uudomuucp-uudomuucp-dom 使用相同的头地址格式,即域样式地址。


注 –

由于 smtp 邮件程序会修改 UUCP 邮件程序,因此在 .mc 文件中应始终将 MAILER(smtp) 放在 MAILER(uucp) 的前面。


邮件地址

邮件地址包含邮件传送到的收件人和系统的名称。管理不使用名称服务的小型邮件系统时,对邮件进行寻址很容易。登录名可以唯一标识用户。如果管理的邮件系统中存在多个具有邮箱的系统,或者该邮件系统有一个或多个域,则情况会变得很复杂。如果与网络之外的服务器之间建立了 UUCP(或其他)邮件连接,则会进一步增加复杂性。以下各节中的信息有助于理解邮件地址的各个部分及其复杂性。

域和子域

电子邮件地址会使用域。是用于网络地址命名的目录结构。一个域可以包含一个或多个子域。地址的域和子域与文件系统的分层结构类似。正如我们认为子目录位于其上面的目录之内,同样可以认为邮件地址中的每个子域位于其右侧的位置之内。

下表显示了一些顶层域。

表 14–7 顶层域

域 

说明 

com

商业站点 

edu

教育站点 

gov

美国政府机构 

mil

美国军事机构 

net

联网组织 

org

其他非赢利组织 

域不区分大小写。在地址的域部分中,可以使用大写、小写或大小写混合的字母,而不会产生任何错误。

名称服务域名和邮件域名

使用名称服务域名和邮件域名时,请记住以下几点。

有关更多信息,请参阅sendmail 与名称服务的交互

邮件地址的典型格式

通常,邮件地址具有以下格式。有关详细信息,请参阅与路由无关的邮件地址


user@subdomain. ... .subdomain2.subdomain1.top-level-domain

@ 符号左侧的地址部分是本地地址。本地地址可以包含以下内容。


注 –

接收邮件程序负责确定地址的本地部分的含义。有关邮件程序的信息,请参阅邮件程序与 sendmail


@ 符号右侧的地址部分显示域的级别,它是本地地址驻留的位置。每个子域之间用点分隔。地址的域部分可以是一个组织、物理地区或地理区域。此外,域信息的顺序是分层的,即子域的本地性越明显,该子域距离 @ 符号越近。

与路由无关的邮件地址

邮件地址可以与路由无关。与路由无关的寻址要求电子邮件的发件人指定收件人的名称以及最终目标。高速网络(如 Internet)可使用与路由无关的地址。与路由无关的地址可以具有以下格式。


user@host.domain

用于 UUCP 连接的与路由无关的地址可以具有以下地址格式。


host.domain!user

随着计算机的域分层命名方案越来越受欢迎,与路由无关的地址也越来越普遍。实际上,最常见的与路由无关的地址会省略主机名,并依赖域名服务来正确标识电子邮件的最终目标。


user@domain

通过搜索 @ 符号可首先读取与路由无关的地址。然后,从右(最高层)向左(@ 符号右侧的地址中最具体的部分)读取域分层结构。

邮箱文件

邮箱是指作为电子邮件的最终目标的文件。邮箱的名称可以是用户名或特定功能的标识,如邮寄主管。邮箱位于 /var/mail/ username 文件中,该文件可以存在于用户的本地系统或远程邮件服务器上。在任一情况中,邮箱都位于邮件传送到的系统中。

应始终将邮件传送到本地文件系统,以便用户代理可从邮件缓冲池中提取邮件,并轻松将其存储在本地邮箱中。请勿使用已挂载 NFS 的文件系统作为用户邮箱的目标。具体来说,请勿将邮件定向至要从远程服务器挂载 /var/mail 文件系统的邮件客户机。在此情况下,应将用户的邮件发往到邮件服务器而非客户机主机名。已挂载 NFS 的文件系统会导致在邮件传送和处理中出现问题。

/etc/mail/aliases 文件和名称服务(如 NIS 和 NIS+)提供了为电子邮件地址创建别名的机制。因此,用户无需知道用户邮箱的准确本地名称。

下表显示了一些针对专用邮箱的常见命名约定。

表 14–8 针对邮箱名称格式的约定

格式 

说明 

username

用户名通常与邮箱名称相同。 

Firstname.Lastname Firstname_Lastname Firstinitial.Lastname Firstinitial_Lastname

可将用户名标识为用点(或下划线)分隔名和姓的全名。或者,也可以通过用点(或下划线)分隔首字母和姓来标识用户名。 

postmaster

用户可以向 postmaster 邮箱发送并报告邮件系统的问题。每个站点和域都应该有一个 postmaster 邮箱。

MAILER-DAEMON

sendmail 会自动将发往 MAILER-DAEMON 的所有邮件路由至邮寄主管。

aliasname-request

-request 结尾的名称是分发列表的管理地址。此地址应将邮件重定向至维护分发列表的人员。

owner-aliasname

owner- 开头的名称是分发列表的管理地址。此地址应将邮件重定向至处理邮件错误的人员。

owner-owner

当不存在错误返回到的 owner-aliasname 别名时,可使用此别名。此地址应将邮件重定向至处理邮件错误的人员。在维护大量别名的所有系统中,也都应定义此地址。

local%domain

百分比符号 (%) 用来标记邮件到达其目标时扩展的本地地址。大多数邮件系统都会将带有 % 符号的邮箱名称解释为完整邮件地址。% 将用 @ 替换,并相应地重定向邮件。尽管许多人都使用 % 约定,但此约定并不是正式标准。此约定称为“percent hack”。通常可以使用此功能来帮助调试邮件问题。

sendmail 版本 8 开始,如果存在属主别名,则发送至组别名的邮件的信封发件人地址将更改为由属主别名扩展所得的地址。通过此更改,可将所有邮件错误都发送至别名属主,而不是返回给发件人。进行此更改后,用户会注意到,在传送发送至别名的邮件时,邮件看似来自别名属主。 以下别名格式有助于解决与此更改关联的一些问题。


mygroup: :include:/pathname/mygroup.list

owner-mygroup: mygroup-request

mygroup-request: sandys, ignatz

在本示例中,mygroup 别名是组的实际邮件别名。owner-mygroup 别名用来接收错误消息。应将 mygroup-request 别名用于管理请求。此结构意味着,在发送至 mygroup 别名的邮件中,信封发件人地址会更改为 mygroup-request

邮件别名

别名是替代名称。对于电子邮件,可以使用别名来指定邮箱位置或定义邮递列表。有关任务列表,请参阅第 13 章,邮件服务(任务)中的管理邮件别名文件(任务列表)。另外,还可以参阅本章中的邮件别名文件

对于大型站点,邮件别名通常用来定义邮箱的位置。提供邮件别名类似于在有多个房间的大公司内为个人提供房间号作为地址的一部分。如果不提供房间号,邮件将传送至中心地址。如果没有房间号,则需要花费额外的精力来确定邮件传送到该建筑内的地址。因此,更容易出现错误。例如,在同一建筑内有两个人名为 Kevin Smith,则仅有其中一个人可获取该邮件。为改正此问题,每个 Kevin Smith 都应在其地址中添加一个房间号。

创建邮递列表时,请尽可能使用与域和位置无关的地址。要提高别名文件的可移植性和灵活性,请尽可能使邮递列表中的别名项可以通用并与系统无关。例如,如果域 example.com 中的系统 mars 上有一个名为 ignatz 的用户,则应创建别名为 ignatz@example 而非 ignatz@mars。如果用户 ignatz 更改了其系统名称但仍处于 example 域中,则无需更新别名文件即可反映系统名称的更改。

创建别名项时,请在每一行中键入一个别名。应该仅有一项包含用户的系统名称。例如,可为用户 ignatz 创建以下各项。


ignatz: iggy.ignatz

iggyi: iggy.ignatz

iggy.ignatz: ignatz@mars

可为本地名称或域创建别名。例如,如果用户 fred 在系统 mars 中具有一个邮箱并且该用户位于域 planets 中,则 NIS+ 别名表中可包含该用户的别名项。


fred: fred@planets

如果创建的邮件列表中包括域外面的用户,请使用用户名和域名来创建别名。例如,如果域 example.com 中的系统 privet 上有一个名为 smallberries 的用户,可创建别名为 smallberries@example.com。现在,向用户域之外发送邮件时,发件人的电子邮件地址会自动转换为全限定域名。

以下列表介绍了创建和管理邮件别名文件的方法。

硬件组件

可在同一系统中提供三种必需的邮件配置元素,也可通过单独的系统来提供这些元素。

当用户要与域之外的网络通信时,还必须添加第四个元素,即邮件网关。有关更多信息,请参阅邮件网关。以下各节介绍了每个硬件组件。

邮件主机

邮件主机是在网络中指定作为主邮件计算机的计算机。站点中的其他系统会将无法传送的邮件转发给邮件主机。通过在本地 /etc/hosts 文件中的 IP 地址右侧添加 mailhost 一词,可在 hosts 数据库中将某个系统指定为邮件主机。或者,也可以用类似的方法向名称服务的主机文件中添加 mailhost 一词。有关详细的任务信息,请参阅第 13 章,邮件服务(任务)中的如何设置邮件主机

合适的候选邮件主机是配置作为您的网络和 Internet 全局网络之间的路由器的系统。有关更多信息,请参阅第 15 章,Solaris PPP 4.0(概述)第 24 章,UUCP(概述)以及《系统管理指南:IP 服务》中的“配置路由器”。如果本地网络中没有系统具有调制解调器,请指定一个系统作为邮件主机。

有些站点在分时配置中会使用未联网的独立计算机。特别需要指出的是,独立计算机将为连接到其串行端口的终端提供服务。通过将独立系统指定为单系统网络的邮件主机,可为此配置设置电子邮件。第 12 章,邮件服务(概述)硬件组件概述提供的图中显示了典型的电子邮件配置。

邮件服务器

邮箱是包含特定用户的电子邮件的单个文件。邮件会传送到用户邮箱驻留的系统,这可以是本地计算机或远程服务器。邮件服务器是可在其 /var/mail 目录中维护用户邮箱的任何系统。有关任务信息,请参阅第 13 章,邮件服务(任务)中的如何设置邮件服务器

邮件服务器会路由来自客户机的所有邮件。客户机发送邮件时,邮件服务器会将该邮件放入队列进行传送。邮件进入队列后,用户可以重新引导或关闭客户机,而不会丢失这些邮件。收件人从客户机获取邮件时,邮件的 From 行中的路径包含了邮件服务器的名称。如果收件人做出响应,该响应将转到用户的邮箱。合适的候选邮件服务器是为用户提供起始目录的系统或定期备份的系统。

如果邮件服务器不是用户的本地系统,则使用 NFS 软件的配置中的用户可以使用 /etc/vfstab 文件来挂载 /var/mail 目录,前提是用户具有 root 访问权限。或者,用户也可以使用自动挂载程序。如果未提供 NFS 支持,用户可以登录到服务器来阅读其邮件。

如果网络中的用户发送其他类型的邮件(如音频文件或来自桌面发布系统的文件),则需要在邮件服务器中为邮箱分配更多空间。

通过为所有邮箱建立一个邮件服务器,可以简化进行备份的过程。如果邮件分散在多个系统中,则很难进行备份。在一台服务器中存储许多邮箱的缺点是该服务器会成为许多用户的单点故障。但是,可提供良好备份的优点则通常值得冒这个风险。

邮件客户机

邮件客户机是一个在邮件服务器上具有邮箱的邮件服务用户。此外,邮件客户机在指向邮箱位置的 /etc/mail/aliases 文件中还具有邮件别名。有关任务信息,请参阅第 13 章,邮件服务(任务)中的如何设置邮件客户机

邮件网关

邮件网关是一台计算机,用于处理运行不同通信协议的网络之间的连接或在使用相同协议的不同网络之间进行通信。例如,邮件网关可能会将 TCP/IP 网络连接到运行系统网络体系结构 (Systems Network Architecture, SNA) 协议集的网络。

要设置的最简单的邮件网关是连接使用同一协议或邮件程序的两个网络的网关。此系统可以处理 sendmail 在域中无法根据其地址找到收件人的邮件。如果存在邮件网关,sendmail 将使用网关来发送和接收域外面的邮件。

可在使用不匹配邮件程序的两个网络之间设置邮件网关,如下图所示。要支持此配置,必须在邮件网关系统中自定义 sendmail.cf 文件,这可能是一个很困难并且耗时的过程。

图 14–1 不同通信协议之间的网关

图中显示了使用不匹配邮件程序的两个邮件网关。

如果有一台机器与 Internet 建立连接,则可将该机器配置为邮件网关。配置邮件网关之前,请仔细考虑站点的安全需求。您可能需要在公司网络与其他网络之间创建防火墙网关,并将该网关设置为邮件网关。有关任务信息,请参阅第 13 章,邮件服务(任务)中的如何设置邮件网关

邮件服务程序和文件

邮件服务包括许多彼此交互的程序和守护进程。本节介绍了与管理电子邮件相关的文件、程序、术语和概念。

vacation 实用程序的增强功能

从 Solaris 10 发行版开始,vacation 实用程序进行了增强,允许用户指定哪些传入邮件可以接收自动生成的回复。使用此增强功能,用户可以避免与不认识的人共享机密信息或联系人信息。来自垃圾邮件发件人或不认识的人的邮件将不会收到回复。

此增强功能可将传入的发件人电子邮件地址与 .vacation.filter 文件中的域或电子邮件地址的列表进行比较。该文件由用户创建,并保存在用户的起始目录中。如果找到了匹配的域或电子邮件地址,则会发送回复。如果没有找到,则不发送回复。

.vacation.filter 可能包含以下类似项:


company.com

mydomain.com

onefriend@hisisp.com

anotherfriend@herisp.com

请注意,每一行包含一个域或一个电子邮件地址。每项必须位于单独的一行中。要使发件人的电子邮件地址与某个电子邮件地址项匹配,除大小写之外,该匹配必须是精确匹配。发件人地址中的字母是大写还是小写将会忽略。要使发件人的电子邮件地址与某个域项匹配,该发件人的地址必须包含列出的域。例如,somebody@dept.company.comsomeone@company.com 都可与域项 company.com 匹配。

有关更多信息,请参见 vacation(1) 手册页。

/usr/bin 目录的内容

下表显示了用于邮件服务的 /usr/bin 目录的内容。

名称 

类型 

说明 

aliasadm

文件 

用于处理 NIS+ 别名映射的程序。 

mail

文件 

用户代理。 

mailcompat

文件 

用于以 SunOS 4.1 邮箱格式存储邮件的过滤器。 

mailq

文件 

用于列出邮件队列内容的程序。 

mailstats

文件 

用于读取 /etc/mail/statistics 文件(如果存在)中存储的邮件统计信息的程序。

mailx

文件 

用户代理。 

mconnect

文件 

用于连接至邮件程序以进行地址验证和调试的程序。 

praliases

文件 

用于“取消编译”别名数据库的命令。请参阅 praliases(1) 手册页中提供的取消编译信息。

rmail

符号链接 

指向 /usr/bin/mail 的符号链接。通常用于仅允许发送邮件的命令。

vacation

文件 

用于设置自动回复邮件的命令。 

/etc/mail 目录的内容

下表显示了 /etc/mail 目录的内容。

名称 

类型 

说明 

Mail.rc

文件 

mailx 用户代理的缺省设置。

aliases

文件 

邮件转发信息。 

aliases.db

文件 

通过运行 newaliases 创建的缺省二进制形式的邮件转发信息。

aliases.dir

文件 

通过运行 newaliases 创建的二进制形式的邮件转发信息。仍然可以使用,但从 Solaris 9 发行版开始,缺省情况下不会再使用该文件。

aliases.pag

文件 

通过运行 newaliases 创建的二进制形式的邮件转发信息。仍然可以使用,但从 Solaris 9 发行版开始,缺省情况下不会再使用该文件。

mailx.rc

文件 

mailx 用户代理的缺省设置。

main.cf

符号链接 

提供从主系统的此样例配置文件到 sendmail.cf 的符号链接是为了实现向下兼容。在 sendmail 版本 8.13 中,无需此文件。

relay-domains

文件 

允许进行中继的所有域的列表。缺省情况下,仅本地域允许进行中继。 

sendmail.cf

文件 

用于邮件路由的配置文件。 

submit.cf

文件 

用于邮件提交程序 (mail submission program, MSP) 的新配置文件。有关更多信息,请参阅sendmail 版本 8.12 中的配置文件 submit.cf

local-host-names

文件 

在邮件主机的别名数太长时可以创建的可选文件。 

helpfile

文件 

SMTP HELP 命令使用的帮助文件。

sendmail.pid

文件 

用于列出侦听守护进程的 PID 并且现在位于 /var/run 中的文件。

statistics

文件 

sendmail 统计文件。如果存在此文件,sendmail 会记录通过每个邮件程序的流量。以前,此文件名为 sendmail.st

subsidiary.cf

符号链接 

提供从辅助系统的此样例配置文件到 sendmail.cf 的符号链接是为了实现向下兼容。在 sendmail 版本 8.13 中,无需此文件。

trusted-users

文件 

用于列出执行某些邮件操作时可信任的用户(每行一个用户)的文件。缺省情况下,此文件中仅包含 root。不可信用户执行某些邮件操作时,将产生以下警告 X-Authentication-Warning:header being added to a message

/etc/mail/cf 目录的内容

/etc/mail 目录中有一个子目录 cf,其中包含生成 sendmail.cf 文件所需的全部文件。表 14–9 中显示了 cf 的内容。

从 Solaris 10 发行版开始,为支持只读的 /usr 文件系统,/usr/lib/mail 目录的内容已移至 /etc/mail/cf 目录。但是,请注意以下例外情况。Shell 脚本 /usr/lib/mail/sh/check-hostname/usr/lib/mail/sh/check-permissions 现在位于 /usr/sbin 目录中。请参见用于邮件服务的其他文件。为了实现向下兼容,符号链接指向每个文件的新位置。

表 14–9 用于邮件服务的 /etc/mail/cf 目录的内容

名称 

类型 

说明 

README

文件 

介绍配置文件。 

cf/main.mc

文件 

以前名为 cf/main-v7sun.mc。它是主配置文件。

cf/Makefile

文件 

提供生成新配置文件的规则。 

cf/submit.mc

文件 

邮件提交程序 (mail submission program, MSP) 的配置文件,用于提交邮件。 

cf/subsidiary.mc

文件 

以前名为 cf/subsidiary-v7sun.mc。它是 NFS 挂载了其他主机中的 /var/mail 的主机的配置文件。

domain

目录 

提供与站点有关的子域说明。 

domain/generic.m4

文件 

来自 Berkeley 软件分发机构的普通域文件。 

domain/solaris-antispam.m4

文件 

域文件,可将 sendmail 的功能更改为类似于以前的 Solaris 版本的 sendmail。但是完全禁用了中继,因此将拒绝没有主机名的发件人地址和无法解析的域。

domain/solaris-generic.m4

文件 

缺省的域文件,可将 sendmail 的功能更改为类似于以前的 Solaris 版本的 sendmail

feature

目录 

包含对特定主机的特定功能的定义。有关这些功能的完整说明,请参见 README

m4

目录 

包含与站点无关的头文件。 

mailer

目录 

包含邮件程序的定义,包括 localsmtpuucp 的定义。

ostype

目录 

介绍各种操作系统环境。 

ostype/solaris2.m4

文件 

用于将缺省的本地邮件程序定义为 mail.local

ostype/solaris2.ml.m4

文件 

用于将缺省的本地邮件程序定义为 mail.local

ostype/solaris2.pre5.m4

文件 

用于将本地邮件程序定义为 mail

ostype/solaris8.m4

文件 

用于将本地邮件程序定义为 mail.local(在 LMTP 模式下),启用 IPv6,将 /var/run 指定为 sendmail.pid 文件的目录。

/usr/lib 目录的内容

下表显示了用于邮件服务的 /usr/lib 目录的内容。

表 14–10 /usr/lib 目录的内容

名称 

类型 

说明 

mail.local

文件 

用于将邮件传送到邮箱的邮件程序。 

sendmail

文件 

路由程序,也称为邮件传输代理。 

smrsh

文件 

Shell 程序(限制 sendmail 的 shell),该程序使用 sendmail“|program” 语法将 sendmail 可以运行的程序限制为 /var/adm/sm.bin 目录中列出的程序。有关对 /var/adm/sm.bin 中所包括内容的建议,请参阅 smrsh(1M) 手册页。要启用该程序,请在 mc 文件中包括此 m4 命令 FEATURE(`smrsh')。

mail

符号链接 

指向 /etc/mail/cf 目录的符号链接。有关更多信息,请参阅/etc/mail/cf 目录的内容

用于邮件服务的其他文件

表 14–11 所示,还有几个其他文件和目录可用于邮件服务。

表 14–11 用于邮件服务的其他文件

名称 

类型 

说明 

/etc/default/sendmail

文件 

用于列出 sendmail 的启动脚本的环境变量。

/etc/shells

文件 

用于列出有效的登录 shell。 

/etc/mail/cf/sh

目录 

包含 m4 生成过程和迁移帮助使用的 shell 脚本。

/usr/sbin/check-permissions

文件 

用于检查 :include: 别名的权限以及 .forward 文件及其父目录路径是否具有正确权限。

/usr/sbin/check-hostname

文件 

用于验证 sendmail 是否可确定全限定主机名。

/usr/sbin/editmap

文件 

在数据库映射中查询和编辑用于 sendmail 的单个记录。

/usr/sbin/in.comsat

文件 

邮件通知守护进程。 

/usr/sbin/makemap

文件 

生成二进制形式的加密映射。 

/usr/sbin/newaliases

符号链接 

指向 /usr/lib/sendmail 的符号链接。用于创建二进制形式的别名数据库。以前位于 /usr/bin 中。

/usr/sbin/syslogd

文件 

sendmail 使用的错误消息记录程序。

/usr/sbin/etrn

文件 

用于启动客户端远程邮件队列的 Perl 脚本。 

/usr/dt/bin/dtmail

文件 

CDE(公用桌面环境)邮件用户代理 

/var/mail/mailbox1, /var/mail/mailbox2

文件 

用于已传送邮件的邮箱。 

/var/spool/clientmqueue

目录 

客户机守护进程传送的邮件的存储器。 

/var/spool/mqueue

目录 

主守护进程传送的邮件的存储器。 

/var/run/sendmail.pid

文件 

用于列出侦听守护进程的 PID 的文件。 

邮件程序的交互

邮件服务由以下程序的组合提供,这些程序按图 14–2 的简图中所示进行交互。

图 14–2 邮件程序的交互

文中对该图形进行了说明。

下面对邮件程序的交互进行了说明。

  1. 用户使用程序(如 mailx)发送邮件。有关更多信息,请参见 mailx(1) 手册页。

  2. 邮件由生成它的程序收集,然后传递给 sendmail 守护进程。

  3. sendmail 守护进程解析邮件中的地址(将其划分为可识别的段)。该守护进程使用配置文件 /etc/mail/sendmail.cf 中的信息来确定网络名的语法、别名、转发信息和网络拓扑。通过使用此信息,sendmail 可以确定邮件要到达收件人所必须采用的路由。

  4. sendmail 守护进程将邮件传递给相应系统。

  5. 本地系统中的 /usr/lib/mail.local 程序将邮件传送至邮件收件人在 /var/mail/ username 目录中的邮箱。

  6. 通知收件人邮件已到达,收件人使用 mailmailx 或类似程序检索邮件。

sendmail 程序

以下列表介绍了 sendmail 程序的一些功能。

Solaris 操作系统使用 sendmail 程序作为邮件路由器。以下列表介绍了该程序的一些功能。

有关 sendmail 程序的更多信息,请参阅以下主题。

sendmail 及其重新路由机制

sendmail 程序支持三种邮件重新路由机制。您选择的机制取决于涉及的更改类型。

此外,您选择的重新路由机制还会影响所需要的管理级别。请考虑以下选项。

  1. 一种重新路由机制是别名

    根据使用的文件类型,别名可在服务器范围内或名称服务范围内将名称映射为地址。

    请考虑名称服务别名的以下优点和缺点。

    • 使用名称服务别名文件允许从单个源中管理邮件重新路由更改。但是传播重新路由更改时,名称服务别名会产生延迟时间。

    • 名称服务管理通常限制为一组选定的系统管理员。普通用户将不能管理此文件。

    请考虑使用服务器别名文件的以下优点和缺点。

    • 通过使用服务器别名文件,指定的服务器上能够成为 root 的任何用户都可管理重新路由。

    • 传播重新路由更改时,服务器别名会产生很短的延迟时间或消除延迟时间。

    • 更改仅会影响本地服务器,这在大多数邮件都发送至一台服务器时可以接受。但是,如果需要将此更改传播至许多邮件服务器,请使用名称服务。

    • 普通用户将不能管理此更改。

    有关更多信息,请参阅本章中的邮件别名文件。有关任务列表,请参阅第 13 章,邮件服务(任务)中的管理邮件别名文件(任务列表)

  2. 第二种机制是转发

    通过此机制,用户可以管理邮件重新路由。本地用户可将其传入邮件重新路由至以下位置。

    • 其他邮箱

    • 不同的邮件程序

    • 其他邮件主机

    通过使用 .forward 文件可支持此机制。有关这些文件的更多信息,请参阅本章中的.forward 文件。有关任务列表,请参阅第 13 章,邮件服务(任务)中的管理 .forward 文件(任务列表)

  3. 最后一种重新路由机制是包含

    通过此机制,用户可维护别名列表而不会要求 root 访问。要提供此功能,root 用户必须在服务器上的别名文件中创建相应的项。创建该项之后,用户即可根据需要重新路由邮件。有关包含的更多信息,请参阅本章中的/etc/mail/aliases 文件。有关任务列表,请参阅第 13 章,邮件服务(任务)中的管理邮件别名文件(任务列表)


    注 –

    读取邮件的程序(如 /usr/bin/mailx)可以有自己的别名,该别名在邮件到达 sendmail 之前会进行扩展。sendmail 的别名可以来自许多名称服务源,如本地文件、NIS 或 NIS+。查找的顺序由 nsswitch.conf 文件确定。请参阅 nsswitch.conf(4) 手册页。


sendmail 功能

sendmail 程序提供了以下功能。

sendmail 配置文件

配置文件控制 sendmail 执行其功能的方法。配置文件可确定要选择的传送代理、地址重写规则以及邮件头格式。sendmail 程序使用 /etc/mail/sendmail.cf 文件中的信息来执行其功能。

Solaris 操作系统在 /etc/mail 目录中提供了两个缺省配置文件。

  1. sendmail.cf,用于在守护进程模式下运行 sendmail 的配置文件。

  2. submit.cf,用于在邮件提交程序模式而非守护进程模式下运行 sendmail 的配置文件。有关更多信息,请参阅sendmail 版本 8.12 中的配置文件 submit.cf

设置邮件客户机、邮件服务器、邮件主机或邮件网关时,请考虑以下情况:

以下列表介绍了可以根据站点的要求来更改的一些配置参数。

邮件别名文件

可以使用以下任何文件、映射或表来维护别名。

维护别名的方法取决于使用别名的用户以及需要可更改别名的用户。每种别名类型都具有唯一的格式要求。

如果要查找任务信息,请参阅第 13 章,邮件服务(任务)中的管理邮件别名文件(任务列表)

.mailrc 别名

.mailrc 文件中列出的别名仅能由拥有该文件的用户进行访问。借助此限制,用户可以建立由其控制并且仅能由属主使用的别名文件。.mailrc 文件中的别名遵循以下格式。


alias aliasname value value value ...

aliasname 是用户在发送邮件时使用的名称,value 是有效的电子邮件地址。

如果用户为 scott 建立的个人别名在名称服务中与 scott 的电子邮件地址不匹配,则会出现错误。人们尝试回复此用户生成的邮件时,邮件会路由至错误的人员。唯一的解决方法是使用其他任一别名机制。

/etc/mail/aliases 文件

知道别名名称和包含该文件的系统的主机名的任何用户都可以使用 /etc/mail/aliases 文件中建立的任何别名。本地 /etc/mail/aliases 文件中的分发列表格式遵循以下格式。


aliasname: value,value,value ...

aliasname 是用户向此别名发送邮件时使用的名称,value 是有效的电子邮件地址。

如果网络未运行名称服务,则每个系统的 /etc/mail/aliases 文件都应包含用于所有邮件客户机的项。可以在每个系统中编辑该文件,也可在一个系统中编辑该文件,然后再将其复制到其他所有系统中。

/etc/mail/aliases 文件中的别名以文本形式存储。编辑 /etc/mail/aliases 文件时,需要运行 newaliases 程序。此程序将重新编译数据库并使别名可以二进制形式供 sendmail 程序使用。有关任务信息,请参阅第 13 章,邮件服务(任务)中的如何设置本地邮件别名文件。或者,也可以使用 Solaris Management Console 中的邮递列表功能来管理本地 /etc 文件中存储的邮件别名。

可以仅为本地名称(当前主机名或无主机名)创建别名。例如,如果用户 ignatz 在系统 saturn 中有一个邮箱,则 /etc/mail/aliases 文件中可包含该用户的以下别名项。


ignatz: ignatz@saturn

应为每台邮件服务器创建一个管理帐户。创建此类帐户的方法是在邮件服务器上为 root 指定一个邮箱并在 /etc/mail/aliases 文件中为 root 添加一项。例如,如果系统 saturn 是邮箱服务器,则可向 /etc/mail/aliases 文件中添加项 root: sysadmin@saturn

通常,仅有 root 用户才能编辑此文件。但是,使用 Solaris Management Console 时,组 14(sysadmin 组)中的所有用户都可以更改该本地文件。另外,还可选择创建以下项。


aliasname: :include:/path/aliasfile

aliasname 是用户在发送邮件时使用的名称,/path/aliasfile 是包含别名列表的文件的全路径。该别名文件应包括电子邮件项(每行一项),并且不包括任何其他符号。


user1@host1

user2@host2

可在 /etc/mail/aliases 中定义附加的邮件文件,以保留日志或备份副本。 以下项会将发送给 aliasname 的所有邮件都存储在 filename 中。


aliasname: /home/backup/filename

另外,还可以将邮件路由至其他进程。以下示例将邮件副本存储在 filename 中并列显副本。


aliasname: "|tee -a /home/backup/filename |lp"

有关任务列表,请参阅第 13 章,邮件服务(任务)中的管理邮件别名文件(任务列表)

NIS aliases 映射

本地域中的所有用户都可以使用 NIS aliases 映射中的各项。原因是 sendmail 程序可以使用 NIS aliases 映射而非本地 /etc/mail/aliases 文件来确定邮件地址。有关更多信息,请参阅 nsswitch.conf(4) 手册页。

NIS aliases 映射中的别名遵循以下格式。


aliasname: value,value,value ...

aliasname 是用户发送邮件时使用的名称,value 是有效的电子邮件地址。

NIS aliases 映射应包含用于所有邮件客户机的各项。通常,仅有主 NIS 中的超级用户才能更改这些项。对于经常更改的别名,最好不要选择此类型。但是,如果这些别名指向其他别名文件,则这类别名将很有用,如以下语法示例所示。


aliasname: aliasname@host

aliasname 是用户发送邮件时使用的名称,host 是包含 /etc/mail/alias 文件的服务器的主机名。

有关任务信息,请参阅第 13 章,邮件服务(任务)中的如何设置 NIS mail.aliases 映射

NIS+ mail_aliases

NIS+ mail_aliases 表包含在本地域中用于标识系统或个人的名称。sendmail 程序可以使用 NIS+ mail_aliases 表而非本地 /etc/mail/aliases 文件来确定邮件地址。有关更多信息,请参阅 aliasadm(1M)nsswitch.conf(4) 手册页。

NIS+ mail_aliases 表中的别名遵循以下格式:


alias: expansion # ["options" # "comments"]

表 14–12 介绍了 NIS+ mail_aliases 表中的四列。

表 14–12 NIS+ mail_aliases 表的各列

列 

说明 

alias

别名的名称 

expansion

别名或别名列表的值,与 sendmail /etc/mail/aliases 文件中显示的值类似

options

保留供将来使用的列 

comments

有关单个别名的注释列 

NIS+ mail_aliases 表应包含用于所有邮件客户机的项。可以使用 aliasadm 命令列出、创建、修改和删除 NIS+ aliases 表中的各项。要使用 aliasadm 命令,您必须是拥有 aliases 表的 NIS+ 组的成员。有关任务信息,请参阅第 13 章,邮件服务(任务)中的管理邮件别名文件(任务列表)。或者,也可以使用 Solaris Management Console 来管理 NIS+ 邮件别名。


注 –

如果要创建新的 NIS+ aliases 表,必须在创建项之前先初始化该表。如果该表已存在,则无需进行初始化。


.forward 文件

用户可在其起始目录中创建一个 .forward 文件,以供 sendmail 以及其他程序用于重定向邮件或发送邮件。请参阅以下主题。

有关任务列表,请参阅第 13 章,邮件服务(任务)中的管理 .forward 文件(任务列表)

应避免的情况

以下列表介绍了可以避免或轻松解决问题的一些情况。

.forward 文件的控制

要使 .forward 文件成为邮件传送中的有效部分,请确保正确应用以下控制(主要是权限设置)。

.forward.hostname 文件

可以创建一个 .forward.hostname 文件,以重定向发送至特定主机的邮件。例如,如果用户的别名已从 sandy@phoenix.example.com 更改为 sandy@example.com,请在 sandy 的起始目录中放入一个 .forward.phoenix 文件。


% cat .forward.phoenix

sandy@example.com

"|/usr/bin/vacation sandy"

% cat .vacation.msg

From: sandy@example.com (via the vacation program)

Subject: my alias has changed



My alias has changed to sandy@example.com.

Please use this alias in the future.

The mail that I just received from you

has been forwarded to my new address.



Sandy

在本示例中,在通知发件人发生别名更改后,可将邮件转发至正确地址。由于 vacation 程序仅允许一个邮件文件,因此每次仅能转发一封邮件。但是,如果邮件不是特定于主机,则 .forward 文件可将一个休假邮件文件用于多台主机。

.forward+detail 文件

对转发机制的另一种扩展是 .forward+ detail 文件。detail 字符串可以是除运算符字符之外的任意字符序列。运算符字符包括 .:%&!^[]+。通过使用此类型的文件,可以确定是否有其他人在您不知情的情况下使用您的电子邮件地址。例如,如果某个用户告诉其他人使用电子邮件地址 sandy+test1@example.com,该用户将能够识别将来传送给此别名的任何邮件。缺省情况下,将根据别名和 .forward+detail 文件对发送至 sandy+test1@example.com 别名的所有邮件进行检查。如果未找到任何匹配项,邮件将转而传送至 sandy@example.com,但用户可以看到 To: 邮件头中的更改。

/etc/default/sendmail 文件

此文件用于存储 sendmail 的启动选项,以免在升级主机时删除这些选项。可以使用以下变量。

CLIENTOPTIONS=“string

选择要用于客户机守护进程的其他选项,该守护进程会查看仅客户机队列 (/var/spool/clientmqueue) 并可用作客户机队列运行程序。不会进行任何语法检查,因此在更改此变量时请务必小心。

CLIENTQUEUEINTERVAL=#

QUEUEINTERVAL 选项类似,CLIENTQUEUEINTERVAL 用于设置邮件队列运行的时间间隔。但是,CLIENTQUEUEINTERVAL 选项将控制客户机守护进程的功能而非主守护进程的功能。通常,主守护进程可将所有邮件都传送至 SMTP 端口。但是,如果邮件负荷过高或主守护进程未运行,则邮件会进入仅客户机队列 /var/spool/clientmqueue。然后,检查仅客户机队列的客户机守护进程将用作客户机队列处理器。

ETRN_HOSTS=“string

可使 SMTP 客户机和服务器立即交互,而无需等待达到队列运行间隔,该间隔是固定的。服务器可以立即传送队列中转至指定主机的部分。有关更多信息,请参阅 etrn(1M) 手册页。

MODE=-bd

选择用于启动 sendmail 的模式。使用 -bd 选项或不予以定义。

OPTIONS=string

选择要用于主守护进程的其他选项。不会进行任何语法检查,因此在更改此变量时请务必小心。

QUEUEINTERVAL=#

设置邮件队列在主守护进程中的运行间隔。# 可以是一个正整数,后跟 s(秒)、m(分钟)、h(小时)、d(天)或 w(星期)。在启动 sendmail 之前会先检查语法。如果间隔为负或者该项不是以合适字母结尾,则会忽视该间隔,sendmail 将以 15 分钟的队列间隔启动。

QUEUEOPTIONS=p

启用一个在队列运行间隔之间休眠的持久性队列运行程序,而不是为每个队列运行间隔启用一个新队列运行程序。可将此选项设置为 p,这是唯一可用的设置。否则,将不设置此选项。

邮件地址和邮件路由

邮件在传送过程中所遵循的路径取决于客户机系统的设置以及邮件域的拓扑。邮件主机或邮件域每增加一个级别,便需要多进行一次别名解析,但路由过程在大多数主机上基本相同。

可将客户机系统设置为在本地接收邮件。在本地接收邮件即是在本地模式下运行 sendmail。本地模式是所有邮件服务器和一些客户机的缺省模式。在本地模式下的邮件服务器或邮件客户机上,邮件通过以下方式进行路由。


注 –

以下示例假定您使用的是 sendmail.cf 文件中设置的缺省规则。


  1. 如果可能,请扩展邮件别名,并重新启动本地路由进程。

    邮件地址是通过检查名称服务中的邮件别名并替换新值(如果找到新值)来扩展的。新别名随后会再次进行检查。

  2. 如果邮件是本地的,则将其传送至 /usr/lib/mail.local

    邮件将传送至本地邮箱。

  3. 如果邮件地址中包括此邮件域内的一台主机,则将邮件传送至该主机。

  4. 如果地址中不包括此域内的主机,则将邮件转发至邮件主机。

    邮件主机使用与邮件服务器相同的路由进程。但是,邮件主机可以接收发往域名以及主机名的邮件。

sendmail 与名称服务的交互

本节介绍应用于 sendmail 和名称服务的域名。此外,本节还介绍了有效使用名称服务的规则以及 sendmail 与名称服务的特定交互。有关详细信息,请参阅以下主题。

如果要查找相关的任务信息,请参阅第 13 章,邮件服务(任务)中的如何使用 DNS 和sendmail管理邮件别名文件(任务列表)

sendmail.cf 和邮件域

标准的 sendmail.cf 文件使用邮件域来确定是直接传送还是通过邮件主机传送邮件。域内邮件通过直接的 SMTP 连接传送,而域间邮件则会转发至邮件主机。

在安全网络中,仅会对少数选定的主机进行授权,允许其生成向外部目标发送的包。即使主机具有邮件域外部的远程主机的 IP 地址,也不能保证可以建立 SMTP 连接。标准的 sendmail.cf 假定以下情况成立。

通过这些假设,邮件主机将负责传送或转发域间邮件。

sendmail 和名称服务

sendmail 可对名称服务强加各种要求。为增强您对这些要求的理解,本节将首先介绍邮件域与名称服务域之间的关系。然后,本节会介绍各种要求。请参阅以下主题。

邮件域和名称服务域

邮件域名必须是名称服务域名的后缀。例如,如果名称服务的域名为 A.B.C.D,则邮件域名可能是以下各项之一。

最初建立时,邮件域名通常与名称服务域名相同。随着网络规模的变大,名称服务域可以划分为几个较小的部分,以使名称服务更易于管理。但是,为提供一致的别名,邮件域通常保持不划分状态。

名称服务的要求

本节介绍 sendmail 对名称服务强加的要求。

必须在名称服务中设置主机表或映射,才能支持三种类型的 gethostbyname() 查询。

还需要遵循有关主机名服务的其他两条规则,才能在名称服务内建立有效的 sendmail 服务。

有关 gethostbyname() 函数的更多信息,请参阅 gethostbyname(3NSL) 手册页。

NIS 与 sendmail 的交互

以下列表介绍了 sendmail 与 NIS 的交互并提供了一些指导。

有关任务信息,请参阅第 13 章,邮件服务(任务)中的管理邮件别名文件(任务列表)

sendmail 与 NIS 和 DNS 的交互

以下列表介绍了 sendmail 与 NIS 和 DNS 的交互并提供了一些指导。

有关任务信息,请参阅第 13 章,邮件服务(任务)中的如何使用 DNS 和sendmail管理邮件别名文件(任务列表)

NIS+ 与 sendmail 的交互

以下列表介绍了 sendmail 与 NIS+ 的交互并提供了一些指导。

有关任务信息,请参阅第 13 章,邮件服务(任务)中的管理邮件别名文件(任务列表)

sendmail 与 NIS+ 和 DNS 的交互

以下列表介绍了 sendmail 与 NIS+ 和 DNS 的交互并提供了一些指导。

有关任务信息,请参阅第 13 章,邮件服务(任务)中的管理邮件别名文件(任务列表)如何使用 DNS 和sendmail

sendmail 版本 8.13 中的更改

从 Solaris 10 发行版开始,版本 8.13 为缺省版本。虽然此新版本的 sendmail 提供了许多新增功能,但最重要的是添加了 FallBackSmartHost 选项。由于此选项,您无需再使用 main.cfsubsidiary.cfmain.cf 文件用于支持 MX 记录的环境中。subsidiary.cf 文件用于不具备完全功能的 DNS 的环境中。上述环境使用智能主机,不使用 MX 记录。FallBackSmartHost 选项可提供统一的配置。此选项的作用与所有环境最不可能首选的 MX 记录类似。要确保邮件传送到客户机,此选项(如果启用)需提供一台正确连接的(或智能)主机,此主机将用作出现故障的 MX 记录的备份(或故障转移)。

有关版本 8.13 的更多信息,请参见以下各节:

此外,从 Solaris 10 1/06 发行版开始,SMTP 运行时可以使用传输层安全性 (Transport Layer Security, TLS)。请参见以下说明。

sendmail 版本 8.13 支持运行 SMTP 时使用 TLS

从 Solaris 10 1/06 发行版开始,SMTP 服务器和客户机之间的通信通常不受任何一端的控制或信任。由于缺少安全性,第三方可能会监视甚至修改服务器与客户机之间的通信。要解决此问题,在 sendmail 版本 8.13 中,SMTP 可以使用传输层安全性 (Transport Layer Security, TLS)。SMTP 服务器和客户机的这种扩展服务可提供以下功能:


注 –

TLS 的实现基于安全套接字层 (Secure Sockets Layer, SSL) 协议。


STARTTLS 是使用 TLS 启动安全 SMTP 的 SMTP 关键字。此安全连接可能建立在两台服务器之间或一台服务器与一台客户机之间。安全连接定义如下:

当客户机发出 STARTTLS 命令时,服务器将使用以下各项之一来响应:

220 响应要求客户机启动 TLS 协商。501 响应指明客户机未正确发出 STARTTLS 命令。发出 STARTTLS 时未使用任何参数。454 响应需要客户机应用规则集值来确定是接受还是维护连接。

请注意,要维护 Internet 的 SMTP 基础结构,公共使用的服务器决不能要求 TLS 协商。但是,专用服务器可能会要求客户机执行 TLS 协商。在这类情况下,服务器会返回以下响应:


530 Must issue a STARTTLS command first

530 响应会指示客户机发出 STARTTLS 命令,以建立连接。

如果不满足身份验证和保密性的级别,服务器或客户机可以拒绝连接。同样,由于大多数 SMTP 连接都不安全,因此服务器和客户机可能会保留不安全的连接。保留还是拒绝连接由服务器和客户机的配置来确定。

缺省情况下,不支持在运行 SMTP 时使用 TLS。SMTP 客户机发出 STARTTLS 命令时,将启用 TLS。必须先设置允许 sendmail 使用 TLS 的证书,然后 SMTP 客户机才能发出此命令。请参见如何设置 SMTP 以使用 TLS。请注意,此过程包括定义新的配置文件选项和重新生成 sendmail.cf 文件。

用于在运行 SMTP 时使用 TLS 的配置文件选项

下表介绍了用于在运行 SMTP 时使用 TLS 的配置文件选项。如果要声明其中的任何选项,请使用以下语法之一:

表 14–13 用于在运行 SMTP 时使用 TLS 的配置文件选项

选项 

说明 

CACertFile

m4 名称: confCACERT

参数: filename

缺省值:未定义 

用于标识包含一个 CA 证书的文件。 

CACertPath

m4 名称: confCACERT_PATH

参数: path

缺省值:未定义 

用于标识包含 CA 证书的目录的路径。 

ClientCertFile

m4 名称: confCLIENT_CERT

参数: filename

缺省值:未定义 

用于标识包含客户机证书的文件。请注意,此证书在 sendmail 用作客户机时使用。

ClientKeyFile

m4 名称: confCLIENT_KEY

参数: filename

缺省值:未定义 

用于标识包含属于客户机证书的私钥的文件。 

CRLFile

m4 名称: confCRL

参数: filename

缺省值:未定义 

用于标识包含证书撤销状态的文件,该文件用于 X.509v3 身份验证。 

DHParameters

m4 名称: confDH_PARAMETERS

参数: filename

缺省值:未定义 

用于标识包含 Diffie-Hellman (DH) 参数的文件。 

RandFile

m4 名称: confRAND_FILE

参数:file:filenameegd:UNIX socket

缺省值:未定义 

使用 file: 前缀标识包含随机数据的文件,或使用 egd: 前缀标识 UNIX 套接字。请注意,由于 Solaris OS 支持随机数生成器设备,因此无需指定此选项。请参见 random(7D) 手册页。

ServerCertFile

m4 名称: confSERVER_CERT

参数: filename

缺省值:未定义 

用于标识包含服务器证书的文件。此证书在 sendmail 用作服务器时使用。

Timeout.starttls

m4 名称: confTO_STARTTLS

参数: amount of time

缺省值: 1h

设置 SMTP 客户机等待 STARTTLS 命令的响应的时间。

TLSSrvOptions

m4 名称: confTLS_SRV_OPTIONS

参数:V

缺省值:未定义 

用于确定服务器是否向客户机请求证书。如果此选项设置为 V,则不执行客户机验证。

要使 sendmail 支持 SMTP 使用 TLS,必须定义以下选项:

不需要定义其他选项。

用于在运行 SMTP 时使用 TLS 的宏

下表介绍了 STARTTLS 命令使用的宏。

表 14–14 用于在运行 SMTP 时使用 TLS 的宏

宏 

说明 

${cert_issuer}

保存证书颁发机构 (certification authority, CA)(证书签发者)的标识名 (distinguished name, DN)。 

${cert_subject}

保存名为证书主题的证书 DN。

${cn_issuer}

保存 CA 的公用名称 (common name, CN),即证书签发者

${cn_subject}

保存名为证书主题的证书 CN。

${tls_version}

保存用于连接的 TLS 的版本。 

${cipher}

保存用于连接的一组加密算法(名为加密套件)。

${cipher_bits}

以位为单位保存用于连接的对称加密算法的密钥长度。 

${verify}

保存所提供证书的验证结果。可能值如下所示: 

  • OK-验证成功。

  • NO-未提供证书。

  • NOT-未请求证书。

  • FAIL-无法验证提供的证书。

  • NONE-尚未执行 STARTTLS

  • TEMP-出现临时错误。

  • PROTOCOL-出现 SMTP 错误。

  • SOFTWARESTARTTLS 握手失败。

${server_name}

保存当前具有外出 SMTP 连接的服务器的名称。 

${server_addr}

保存当前具有外出 SMTP 连接的服务器的地址。 

用于在运行 SMTP 时使用 TLS 的规则集

下表介绍了一些规则集,用于确定应接受、继续还是拒绝使用 TLS 的 SMTP 连接。

表 14–15 用于在运行 SMTP 时使用 TLS 的规则集

规则集 

说明 

tls_server

用作客户机时,sendmail 使用此规则集来确定 TLS 当前是否支持该服务器。

tls_client

用作服务器时,sendmail 使用此规则集来确定 TLS 当前是否支持该客户机。

tls_rcpt

此规则集要求验证收件人的 MTA。此收件人限制可完全避免 DNS 电子欺骗等攻击。 

TLS_connection

此规则集针对当前 TLS 连接的实际参数检查由访问映射的 RHS 指定的要求。 

try_tls

sendmail 使用此规则集来确定连接到其他 MTA 时使用 STARTTLS 的可行性。如果 MTA 不能正确实现 STARTTLS,则不使用 STARTTLS

有关更多信息,请参见以下内容:

与运行 SMTP 时使用 TLS 相关的安全注意事项

作为用于定义在 Internet 中运行的邮件程序的标准邮件协议,SMTP 不是一种端对端机制。由于此协议限制,通过 SMTP 的 TLS 安全性不包括邮件用户代理。邮件用户代理用作用户与邮件传输代理(如 sendmail)之间的接口。

另外,邮件也可以在多台服务器之间路由。为了实现完整的 SMTP 安全性,整个 SMTP 连接链必须具有 TLS 支持。

最后,还必须考虑在每对服务器之间或客户机和服务器对之间的协商身份验证和保密性的级别。有关更多信息,请参见《系统管理指南:安全性服务》中的“验证服务”

sendmail 版本 8.13 中新增的命令行选项

下表介绍了在 sendmail 版本 8.13 中新增的可用命令行选项。sendmail(1M) 手册页介绍了其他命令行选项。

表 14–16 sendmail 版本 8.13 中可用的命令行选项

选项 

说明 

-D logfile

将调试输出发送至指明的 logfile,而不是将此信息包括在标准输出中。

-q[!]Qsubstr

指定对包含此 substr 的隔离作业的处理,前者是隔离 reason 的子字符串。请参见 -Qreason 选项的说明。如果添加 !,此选项将处理不包含此 substr 的隔离作业。

-Qreason

以此 reason 隔离标准队列项。如果未给定 reason,则隔离的队列项将取消隔离。此选项可与 -q[!]Qsubstr 选项结合使用。substrreason 的一部分(或子字符串)。

sendmail 版本 8.13 中新增和修订的配置文件选项

下表介绍了添加和修订的配置文件选项。如果要声明其中的任何选项,请使用以下语法之一。


O OptionName=argument          # for the configuration file

-O OptionName=argument         # for the command line

define(`m4Name',argument)     # for m4 configuration
表 14–17 sendmail 版本 8.13 中可用的配置文件选项

选项 

说明 

ConnectionRateWindowSize

m4 名称: confCONNECTION_RATE_WINDOW_SIZE

参数: number

缺省值: 60

用于设置传入连接保持的秒数。 

FallBackSmartHost

m4 名称: confFALLBACK_SMARTHOST

参数: hostname

要确保邮件传送到客户机,此选项需提供正确连接的主机,此主机将用作出现故障的 MX 记录的备份(或故障转移)。 

InputMailFilters

m4 名称: confINPUT_MAIL_FILTERS

参数: filename

用于列出 sendmail 守护进程的输入邮件过滤器。

PidFile

m4 名称: confPID_FILE

参数: filename

缺省值: /var/run/sendmail.pid

与以前的发行版中相同,在打开文件之前会对文件名进行宏扩展。 此外,在版本 8.13 中,sendmail 退出时还将断开文件的链接。

QueueSortOrder

m4 名称: confQUEUE_SORT_ORDER

添加的参数:none

在版本 8.13 中,none 用于指定无排序顺序。

RejectLogInterval

m4 名称: confREJECT_LOG_INTERVAL

参数: period_of_time

缺省值:3h,表示 3 个小时。

对于指定的 period_of_time 拒绝守护进程连接时,将记录此信息。

SuperSafe

m4 名称: confSAFE_QUEUE

短名称:s

添加的参数: postmilter

缺省值:true

如果设置 postmiltersendmail 将推迟同步队列文件,直到所有 milters 都已发出接受邮件的信号为止。要使此参数可用,sendmail 必须作为 SMTP 服务器运行。否则,postmilter 的运行将类似于使用 true 参数。

sendmail 版本 8.13 中新增和修订的 FEATURE() 声明

下表介绍了添加和修订的 FEATURE() 声明。此 m4 宏使用以下语法。


FEATURE(`name', `argument')
表 14–18 sendmail 版本 8.13 中可用的 FEATURE() 声明

FEATURE() 的名称

说明 

conncontrol

access_db 规则集结合使用,用于检查传入的 SMTP 连接的数量。有关详细信息,请参见 /etc/mail/cf/README

greet_pause

添加 greet_pause 规则集,它将启用开放的代理和 SMTP 攻击保护。有关详细信息,请参见 /etc/mail/cf/README

local_lmtp

缺省参数仍为 mail.local,该参数在此 Solaris 发行版中是具有 LMTP 功能的邮件程序。但是,在版本 8.13 中,如果使用其他具有 LMTP 功能的邮件程序,则可将其路径名指定为第二个参数,并且可在第三个参数中指定传递给第二个参数的参数。例如:


FEATURE(`local_lmtp', `/usr/local/bin/lmtp', `lmtp')

mtamark

对“在带有 TXT RR 的反向 DNS 中标记邮件传输代理”(MTAMark) 提供实验支持。有关详细信息,请参见 /etc/mail/cf/README

ratecontrol

access_db 规则集结合使用,用于控制主机的连接速率。有关详细信息,请参见 /etc/mail/cf/README

use_client_ptr

如果启用此 FEATURE(),规则集 check_relay 将使用参数 $&{client_ptr} 覆盖其第一个参数。

sendmail 版本 8.12 中的更改

本节介绍了有关以下主题的信息。

sendmail 版本 8.12 支持 TCP 包装

TCP 包装提供了一种实现访问权控制的方法,即根据访问控制列表 (access control list, ACL) 检查请求特定网络服务的主机的地址。请求将相应地被授权或拒绝。除了提供此项访问控制机制外,TCP 包装还会记录对网络服务的主机请求,这是一项有用的监视功能。可能受到访问控制的网络服务示例包括 rlogindtelnetdftpd

从版本 8.12 开始,sendmail 将允许使用 TCP 包装。此项检查不会忽略其他安全标准。通过在 sendmail 中启用 TCP 包装,在准许请求之前将进行检查,以验证网络请求的来源。请参见 hosts_access(4) 手册页。


注 –

从 Solaris 9 发行版开始,inetd(1M) 和 sshd(1M) 中将支持 TCP 包装。


有关 ACL 的信息,请参见《系统管理指南:安全性服务》中的“使用访问控制列表保护文件”

sendmail 版本 8.12 中的配置文件 submit.cf

从版本 8.12 开始,sendmail 包括一个附加配置文件 /etc/mail/submit.cf。此submit.cf 文件用于在邮件提交程序模式而非守护进程模式下运行 sendmail。与守护进程模式不同,邮件提交程序模式不要求 root 权限,因此这一新模式可以提供更好的安全性。

请参见以下列出的 submit.cf 功能:

请注意以下情况:

可区分 sendmail.cfsubmit.cf 的功能

sendmail.cf 配置文件用于守护进程模式。使用此文件时,sendmail 用作邮件传输代理 (mail transfer agent, MTA),该代理由 root 启动。


/usr/lib/sendmail -L sm-mta -bd -q1h

请参见以下列出的 sendmail.cf 的其他特性:

sendmail 版本 8.12 中功能的更改

除添加 submit.cf 之外,在功能方面还有以下更改:

sendmail 版本 8.12 中新增或过时的命令行选项

下表介绍了 sendmail 的新增或过时的命令行选项。sendmail(1M) 手册页介绍了其他命令行选项。

表 14–19 sendmail 版本 8.12 中新增或过时的命令行选项

选项 

说明 

-Ac

表示即使操作模式未指明初始邮件提交,仍希望使用配置文件 submit.cf。有关 submit.cf 的更多信息,请参阅sendmail 版本 8.12 中的配置文件 submit.cf

-Am

表示即使操作模式指明初始邮件提交,仍希望使用配置文件 sendmail.cf。有关更多信息,请参阅sendmail 版本 8.12 中的配置文件 submit.cf

-bP

表示要列显每个队列中的项数。 

-G

表示通过命令行提交的邮件将用于中继,而不用于初始提交。如果地址不是全限定地址,则会拒绝该邮件。不会进行公理化。 如 ftp://ftp.sendmail.org 上的 sendmail 分发所包含的发行说明所述,将来的发行版中可能会拒绝形式不正确的邮件。

-L tag

将用于系统日志消息的标识符设置为所提供的 tag

-q[!]I substring

仅处理其中一个收件人包含此 substring 的作业。添加 ! 之后,该选项仅处理其中一个收件人不包含此 substring 的作业。

-q[!]R substring

仅处理队列 ID 中包含此 substring 的作业。添加 ! 之后,该选项仅处理队列 ID 中不包含此 substring 的作业。

-q[!]S substring

仅处理发件人包含此 substring 的作业。添加 ! 之后,该选项仅处理发件人不包含此 substring 的作业。

-qf

一次处理队列中保存的邮件而不使用 fork 系统调用,并在前台运行该进程。请参阅 fork(2) 手册页。

-qGname

仅处理 name 队列组中的邮件。

-qptime

使用为每个队列派生的单个子项并以特定时间间隔来处理队列中保存的邮件。该子项在队列的每两次运行之间处于休眠状态。这一新选项与 -qtime 类似,后者会定期派生一个子项来处理队列。

-U

ftp://ftp.sendmail.org 上的 sendmail 分发所包含的发行说明所述,在版本 8.12 之前不提供此选项。邮件用户代理应使用 -G 参数。

sendmail 版本 8.12 中新增的用于 PidFileProcessTitlePrefix 选项的参数

下表介绍了新增的用于 PidFileProcessTitlePrefix 选项的宏处理参数。有关这些选项的更多信息,请参见 sendmail(1M) 手册页。

表 14–20 用于PidFileProcessTitlePrefix 选项的参数

宏 

说明 

${daemon_addr}

用于提供守护进程地址(例如 0.0.0.0) 

${daemon_family}

用于提供守护进程系列(例如 inetinet6

${daemon_info}

用于提供守护进程信息(例如 SMTP+queueing@00:30:00) 

${daemon_name}

用于提供守护进程名称(例如 MSA) 

${daemon_port}

用于提供守护进程端口(例如 25) 

${queue_interval}

用于提供队列运行间隔(例如 00:30:00) 

sendmail 版本 8.12 中新增的已定义宏

下表介绍了新增的、保留以供 sendmail 程序使用的宏。这些宏的值在内部指定。有关更多信息,请参见 sendmail(1M) 手册页。

表 14–21 sendmail 新增的已定义宏

宏 

说明 

${addr_type}

用于将当前地址标识为信封发件人地址或收件人地址。 

${client_resolve}

用于保存 ${client_name} 的解析调用结果:OKFAILFORGEDTEMP

${deliveryMode}

用于指定 sendmail 正在使用的当前传送模式,而不是 DeliveryMode 选项的值。

${dsn_notify}${dsn_envid}${dsn_ret}

用于保存对应的 DSN 参数值。 

${if_addr}

用于为传入连接提供接口的地址,前提是该接口不属于回送网络。此宏对于虚拟驻留特别有用。 

${if_addr_out}${if_name_out}${if_family_out}

用于避免重用 ${if_addr}。可分别保存以下值。

用于传出连接的接口地址。 

用于传出连接的接口主机名。 

用于传出连接的接口系列。 

${if_name}

用于为传入连接提供接口的主机名,对于虚拟驻留特别有用。  

${load_avg}

用于检查并报告运行队列中当前的平均作业数。 

${msg_size}

用于在收集邮件之前,在 ESMTP 对话框中保存邮件大小 (SIZE=parameter) 的值。此后,此宏将保存 sendmail 计算的邮件大小并将其用于 check_compat 中。有关 check_compat 的信息,请参阅表 14–25

${nrcpts}

用于保存经过验证的收件人数。 

${ntries}

用于保存尝试传送的次数。 

${rcpt_mailer}${rcpt_host}${rcpt_addr}${mail_mailer}${mail_host}${mail_addr}

用于保存 RCPTMAIL 参数的分析结果,这是从邮件传送代理 ($#mailer)、主机 ($@host) 和用户 ($:addr) 中解析出的右侧 (right-hand side, RHS) 三重参数。

sendmail 版本 8.12 中新增的宏

本节中的表介绍了新增的用于生成 sendmail 配置文件的宏。

表 14–22 新增的用于生成 sendmail 配置文件的宏

宏 

说明 

LOCAL_MAILER_EOL

用于覆盖本地邮件程序缺省的行结束字符串。 

LOCAL_MAILER_FLAGS

用于在缺省情况下添加 Return-Path: 头。

MAIL_SETTINGS_DIR

用于包含邮件设置目录的路径(包括结尾斜杠)。 

MODIFY_MAILER_FLAGS

用于改进 *_MAILER_FLAGS。此宏可以设置、添加或删除标志。

RELAY_MAILER_FLAGS

用于为中继邮件程序定义新增标志。 

sendmail 版本 8.12 中新增的 MAX

使用以下宏可以配置在 sendmail 降低传送速度之前可以接收的命令的最大数目。可在编译时设置这些 MAX 宏。下表中的最大值也表示当前的缺省值。

表 14–23 新增的 MAX

宏 

最大值 

每个宏检查的命令 

MAXBADCOMMANDS

25 

未知命令 

MAXNOOPCOMMANDS

20 

NOOPVERBONEX XUSR

MAXHELOCOMMANDS

HELOEHLO

MAXVRFYCOMMANDS

VRFYEXPN

MAXETRNCOMMANDS

ETRN


注 –

通过将宏的值设置为零可以禁用宏检查。


sendmail 版本 8.12 中新增和修订的 m4 配置宏

本节中的表介绍了 sendmail 中新增和修订的 m4 配置宏。可使用以下语法来声明这些宏。


symbolic_name(`value')

如果需要生成新的 sendmail.cf 文件,请参阅第 13 章,邮件服务(任务)中的生成 sendmail.cf 配置文件

表 14–24 sendmail 中新增和修订的 m4 配置宏

m4

说明 

FEATURE()

有关详细信息,请参阅sendmail 版本 8.12 中对 FEATURE() 声明的更改

LOCAL_DOMAIN()

此宏可向类 w ($=w) 中添加项。

MASQUERADE_EXCEPTION()

用于定义不能伪装的主机或子域的新宏。 

SMART_HOST()

现在,此宏可用于用括号括起来的地址,如 user@[host]

VIRTUSER_DOMAIN()VIRTUSER_DOMAIN_FILE()

使用这些宏时,请在 $=R 中包括 $={VirtHost}。请记住,$=R 是可以中继的主机名集合。

sendmail 版本 8.12 中对 FEATURE() 声明的更改

有关对 FEATURE() 声明的特定更改信息,请参阅下表。

要使用新增和修订的 FEATURE 名称,请使用以下语法。


FEATURE(`name', `argument')

如果需要生成新的 sendmail.cf 文件,请参阅第 13 章,邮件服务(任务)中的生成 sendmail.cf 配置文件

表 14–25 新增和修订的 FEATURE() 声明

FEATURE() 的名称

说明 

compat_check

参数:请参阅以下段落中的示例。 

使用此新增的 FEATURE(),可以在由发件人地址和收件人地址组成的访问映射中查找关键字。此 FEATURE() 由字符串 <@> 来分隔。例如 sender@sdomain<@>recipient@rdomain

delay_checks

参数:friend(用于启用垃圾邮件-朋友测试)或 hater(用于启用垃圾邮件-攻击者测试)。

可延迟所有检查的新增 FEATURE()。通过使用 FEATURE(`delay_checks'),在客户机分别连接或发出 MAIL 命令时,将不调用规则集 check_mailcheck_relay, 而是由 check_rcpt 规则集调用上述规则集。有关详细信息,请参阅 /etc/mail/cf/README 文件。

dnsbl

参数:此 FEATURE() 最多可以接受两个参数:

  • DNS 服务器名

  • 拒绝邮件

新增的 FEATURE(),可以多次使用以检查 DNS 查找的返回值。请注意,通过此 FEATURE() 可以指定临时查找失败时的行为。

enhdnsbl

参数:域名。 

新增的 FEATURE(),它是 dnsbl 的增强版本,可用于检查 DNS 查找的返回值。有关更多信息,请参阅 /etc/mail/cf/README

generics_entire_domain

参数:None。 

新增的 FEATURE(),使用它还可以将 genericstable 应用于 $=G 的子域。

ldap_routing

参数:有关详细信息,请参阅 http://www.sendmail.org 中的 “Release Notes”。

可实现 LDAP 地址路由的新增 FEATURE()

local_lmtp

参数:具有 LMTP 功能的邮件程序的路径名。缺省为 mail.local,它在此 Solaris 发行版中具有 LMTP 功能。

FEATURE() 现在可将本地邮件程序的传送状态通知 (delivery status notification, DSN) 诊断代码类型设置为正确的值 SMTP

local_no_masquerade

参数:无。 

可用于避免伪装本地邮件程序的新增 FEATURE()

lookupdotdomain

参数:无。 

也可用于在访问映射中查找 .domain 的新增 FEATURE()

nocanonify

参数:canonify_hosts 或无参数。

FEATURE() 现在包括以下功能。

CANONIFY_DOMAINCANONIFY_DOMAIN_FILE 指定的一系列域传递给 $[$] 运算符进行公理化。

如果将 canonify_hosts 指定为其参数,则可以对仅包含主机名的地址(如 <user@host>)进行公理化。

向包含多个组成部分的地址添加尾随句点。 

no_default_msa

参数:无。 

这一新增的 FEATURE() 可禁用 m4 生成的配置文件中 sendmail 的缺省设置,以“侦听”多个不同端口,这是 RFC 2476 的实现。

nouucp

参数:reject(不允许使用 ! 标记)或 nospecial(允许使用 ! 标记)。

FEATURE() 可确定是否允许在地址的本地部分中使用 ! 标记。

nullclient

参数:无。 

FEATURE() 现在可提供标准配置的完整规则集,从而允许执行防垃圾邮件检查。

preserve_local_plus_detail

参数:无。 

通过这一新增的 FEATURE(),可在 sendmail 将地址传递给本地传送代理时保留地址中的 +detail 部分。

preserve_luser_host

参数:无。 

如果使用 LUSER_RELAY,则通过这一新增的 FEATURE() 可以保留收件人主机的名称。

queuegroup

参数:无。 

通过这一新增的 FEATURE(),可以选择基于完整电子邮件地址或基于收件人的域的队列组。

relay_mail_from

参数:domain 是一个可选参数。

如果邮件发件人在访问映射中列为 RELAY 并使用 From: 头行来标记,则通过这一新增的 FEATURE() 可进行中继。如果给定可选的 domain 参数,则还会检查邮件发件人的域部分。

virtuser_entire_domain

参数:无。 

现在,可以使用该 FEATURE() 来应用 $={VirtHost},这是一个新类,用于匹配可由 VIRTUSER_DOMAINVIRTUSER_DOMAIN_FILE 填充的 virtusertable 项。

FEATURE(`virtuser_entire_domain') 还可以将类 $={VirtHost} 应用于整个子域。

不再支持以下 FEATURE() 声明。

表 14–26 不支持的 FEATURE() 声明

FEATURE() 的名称

替代 

rbl

FEATURE(`dnsbl')FEATURE(`enhdnsbl') 将替代已删除的 FEATURE()

remote_mode

MASQUERADE_AS(`$S') 将替代 /etc/mail/cf/subsidiary.mc 中的FEATURE(`remote_mode')$Ssendmail.cf 中的 SMART_HOST 值。

sun_reverse_alias_files

FEATURE(`genericstable')

sun_reverse_alias_nis

FEATURE(`genericstable')

sun_reverse_alias_nisplus

FEATURE(`genericstable')

sendmail 版本 8.12 中对 MAILER() 声明的更改

MAILER() 声明可指定对传送代理的支持。要声明传送代理,请使用以下语法。


MAILER(`symbolic_name')

请注意以下更改。

有关邮件程序的更多信息,请参阅邮件程序与 sendmail。如果需要生成新的 sendmail.cf 文件,请参阅第 13 章,邮件服务(任务)中的生成 sendmail.cf 配置文件

sendmail 版本 8.12 中新增的传送代理标志

下表介绍了新增的传送代理标志,缺省情况下不会设置这些标志。这些单字符标志是布尔型的。通过在配置文件的 F= 语句中包括或排除标志,可以设置或取消设置标志,如以下示例所示。


Mlocal,    P=/usr/lib/mail.local, F=lsDFMAw5:/|@qSXfmnz9, S=10/30, R=20/40,

Mprog,     P=/bin/sh, F=lsDFMoqeu9, S=10/30, R=20/40, D=$z:/,

Msmtp,     P=[IPC], F=mDFMuX, S=11/31, R=21, E=\r\n, L=990,

Mesmtp,    P=[IPC], F=mDFMuXa, S=11/31, R=21, E=\r\n, L=990,

Msmtp8,    P=[IPC], F=mDFMuX8, S=11/31, R=21, E=\r\n, L=990,

Mrelay,    P=[IPC], F=mDFMuXa8, S=11/31, R=61, E=\r\n, L=2040,
表 14–27 新增的邮件程序标志

标志 

说明 

%

除非使用 ETRN 请求或以下队列选项之一选择排队的邮件,否则使用此标志的邮件程序不会尝试向邮件的初始收件人或队列运行中传送邮件:-qI-qR-qS

1

此标志可禁用邮件程序发送空字符的功能(例如 \0)。

2

此标志可禁用 ESMTP 并要求改用 SMTP。 

6

此标志可使邮件程序将头缩减至 7 位。 

sendmail 版本 8.12 中新增的用于传送代理的等式

下表介绍了新增的可用于 M 传送代理定义命令的等式。以下语法说明如何在配置文件中已存在的等式后附加新的等式或参数。


Magent_name, equate, equate, ...

以下示例中包括新的 W= 等式。此等式可指定在发送所有数据后等待邮件程序返回的最长时间。


Msmtp, P=[IPC], F=mDFMuX, S=11/31, R=21, E=\r\n, L=990, W=2m

在为 m4 配置修改值的定义时,请使用以下示例中提供的语法。


define(`SMTP_MAILER_MAXMSGS', `1000')

上一示例将 smtp 邮件程序每次连接时传送的邮件数量限制为 1000。

如果需要生成新的 sendmail.cf 文件,请参阅第 13 章,邮件服务(任务)中的生成 sendmail.cf 配置文件


注 –

通常,仅当进行微调时,才会修改 mailer 目录中的等式定义。


表 14–28 用于传送代理的新增等式

等式 

说明 

/=

参数:目录的路径。 

用于指定执行邮件程序之前要应用 chroot() 的目录。

m=

参数:以前使用 define() 例程定义的以下任意 m4

    SMTP_MAILER_MAXMSGS,用于 smtp 邮件程序


    LOCAL_MAILER_MAXMSGS,用于 local 邮件程序


    RELAY_MAILER_MAXMSGS,用于 relay 邮件程序


用于限制 smtplocalrelay 邮件程序每次连接时传送的邮件数量

W=

参数:时间增量 

用于指定在发送所有数据后等待邮件程序返回的最长时间 

sendmail 版本 8.12 中新增的队列功能

以下列表提供了有关新增队列功能的详细信息。

有关任务信息,请参阅管理队列目录(任务列表)

sendmail 版本 8.12 中对 LDAP 的更改

以下列表介绍了在将轻量目录访问协议 (Lightweight Directory Access Protocol, LDAP) 用于 sendmail 时的一些更改。

以下示例显示了这些标记在用于 “*” 查找时的差异。

表 14–29 标记的比较

LDAP 映射规范 

规范等效形式 

结果 

-k"uid=%s"

-k"uid=*"

匹配具有用户属性的任何记录 

-k"uid=%0"

-k"uid=\2A"

匹配具有名称 “*” 的用户

下表介绍了新增的 LDAP 映射标志。

表 14–30 新增的 LDAP 映射标志

标志 

说明 

-1

要求返回单个匹配项。如果返回多个匹配项,则结果与未找到任何记录等效。 

-r never|always|search|find

设置 LDAP 别名取消引用选项。 

-Z size

限制要返回的匹配项数。 

sendmail 版本 8.12 中对内置邮件程序的更改

原有的 [TCP] 内置邮件程序不可用。请改用 P=[IPC] 内置邮件程序。进程间通信 ([IPC]) 内置邮件程序现在可向支持它的系统中的 UNIX 域套接字进行传送。可将此邮件程序与侦听指定套接字的 LMTP 传送代理结合使用。示例邮件程序可能如下所示。


Mexecmail, P=[IPC], F=lsDFMmnqSXzA5@/:|, E=\r\n, 

S=10, R=20/40, T=DNS/RFC822/X-Unix, A=FILE /var/run/lmtpd

现在,系统将检查 [IPC] 邮件程序中的第一个邮件程序参数是否具有合法值。下表提供了第一个邮件程序参数的可能值。

表 14–31 第一个邮件程序参数的可能值

值 

说明 

A=FILE

用于 UNIX 域套接字传送 

A=TCP

用于 TCP/IP 连接 

A=IPC

不再用作第一个邮件程序参数 

sendmail 版本 8.12 中新增的规则集

下表列出了新增规则集并介绍了这些规则集的功能。

表 14–32 新规则集

集 

说明 

check_eoh

将在头之间收集的信息关联并检查是否缺少头。此规则集用于宏存储映射,并在收集所有头后调用。  

check_etrn

使用 ETRN 命令(与 check_rcpt 使用 RCPT 类似)。

check_expn

使用 EXPN 命令(与 check_rcpt 使用 RCPT 类似)。

check_vrfy

使用 VRFY 命令(与 check_rcpt 使用 RCPT 类似)。

以下列表介绍了新增的规则集功能。

sendmail 版本 8.12 中对文件的更改

请注意以下更改。

sendmail 版本 8.12 和配置中的 IPv6 地址

从 8.12 版本的 sendmail 开始,在配置中使用的 IPv6 地址应以 IPv6: 标记作为前缀,以正确标识地址。如果不标识 IPv6 地址,则不会使用前缀标记。