系统管理指南:网络服务

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} 覆盖其第一个参数。