第14 章• 邮件服务(参考) 301
配置文件的版本
从Solaris 10 发行版开始,sendmail 提供了一个配置选项,用于定义sendmail.cf 文件的版
本。通过此选项,可将较旧的配置文件用于当前版本的sendmail。可将版本级别设置为0
和10 之间的值。另外,还可以定义供应商。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。有关更多信息,请参阅
。
有关任务信息,请参阅第13 章中的第264 页中的“生成sendmail.cf 配置文件”。
邮件服务的软件和硬件组件
本节介绍了邮件系统的软件和硬件组件。
第302 页中的“软件组件”
第308 页中的“硬件组件”
软件组件
每种邮件服务都至少包括以下软件组件之一。
第303 页中的“邮件用户代理”
第303 页中的“邮件传输代理”
第303 页中的“本地传送代理”
本节还介绍了以下软件组件。
第303 页中的“邮件程序与sendmail”
第304 页中的“邮件地址”
邮件服务的软件和硬件组件
302 系统管理指南:网络服务• 2006 年8 月
第306 页中的“邮箱文件”
第307 页中的“邮件别名”
邮件用户代理
邮件用户代理是用户与邮件传输代理之间用作接口的程序。sendmail 程序是一个邮件传输
代理。Solaris 操作系统提供了以下邮件用户代理。
/usr/bin/mail
/usr/bin/mailx
/usr/dt/bin/dtmail
邮件传输代理
邮件传输代理负责邮件的路由以及邮件地址的解析。此代理也称为邮件传输代理。用于
Solaris 操作系统的传输代理是sendmail。该传输代理可执行以下功能。
接受来自邮件用户代理的邮件
解析目标地址
选择正确的传送代理来传送邮件
接收从其他邮件传输代理传入的邮件
本地传送代理
本地传送代理是实现邮件传送协议的程序。Solaris 操作系统附带了以下本地传送代理。
UUCP本地传送代理,它使用uux 传送邮件
本地传送代理,它是标准Solaris 发行版中的mail.local
第337 页中的“sendmail 版本8.12 中的更改”提供了有关以下相关主题的信息。
第346 页中的“sendmail 版本8.12 中新增的传送代理标志”
第347 页中的“sendmail 版本8.12 中新增的用于传送代理的等式”
邮件程序与sendmail
邮件程序是特定于sendmail 的术语。sendmail 使用邮件程序来标识自定义的本地传送代理
或自定义的邮件传输代理的特定实例。至少需要在sendmail.cf 文件中指定一个邮件程序。
有关任务信息,请参阅第13 章中的第264 页中的“生成sendmail.cf 配置文件”。本节对
以下两种类型的邮件程序进行了简短说明。
第304 页中的“简单邮件传输协议(Simple Mail Transfer Protocol, SMTP) 邮件程序”
第304 页中的“UNIX 对UNIX 复制程序(UNIX-to-UNIX Copy Program, UUCP) 邮件程序
”
有关邮件程序的其他信息,请参见 或
/etc/mail/cf/README。
邮件服务的软件和硬件组件
第14 章• 邮件服务(参考) 303
简单邮件传输协议(Simple Mail Transfer Protocol, SMTP) 邮件程序
SMTP 是在Internet 中使用的标准邮件协议。此协议定义了以下邮件程序。
smtp,用于向其他服务器提供常规SMTP 传输。
esmtp,用于向其他服务器提供扩展SMTP 传输。
smtp8,用于向其他服务器提供SMTP 传输,而不会将8 位数据转换为MIME。
dsmtp,用于通过使用F=% 邮件程序标志来提供即时传送。请参阅第346 页中的
“sendmail 版本8.12 中对MAILER() 声明的更改”和第346 页中的“sendmail 版本8.12 中
新增的传送代理标志”。
UNIX 对UNIX 复制程序(UNIX-to-UNIX Copy Program, UUCP) 邮件程序
应尽可能避免使用UUCP。有关说明,请参阅
或在/etc/mail/cf/README 中搜索以下字
符串:USING UUCP MAILERS。
UUCP定义了以下邮件程序。
uucp-old $=U 类中的名称将发送至uucp-old。uucp 是此邮件程序的废弃名称。uucp-old
邮件程序在头中使用叹号地址。
uucp-new $=Y 类中的名称将发送至uucp-new。如果知道接收UUCP的邮件程序可在一次
传输中管理多个收件人,请使用此邮件程序。suucp 是此邮件程序的废弃名
称。uucp-new 邮件程序在头中也使用叹号地址。
如果配置中还指定了MAILER(smtp),则还需定义另外两个邮件程序。
uucp-dom 此邮件程序使用域样式地址,并且基本上应用SMTP 重写规则。
uucp-uudom $=Z 类中的名称将发送至uucp-uudom。uucp-uudom 和uucp-dom 使用相同的头
地址格式,即域样式地址。
注– 由于smtp 邮件程序会修改UUCP邮件程序,因此在.mc 文件中应始终将MAILER(smtp)
放在MAILER(uucp) 的前面。
邮件地址
邮件地址包含邮件传送到的收件人和系统的名称。管理不使用名称服务的小型邮件系统
时,对邮件进行寻址很容易。登录名可以唯一标识用户。如果管理的邮件系统中存在多个
具有邮箱的系统,或者该邮件系统有一个或多个域,则情况会变得很复杂。如果与网络之
外的服务器之间建立了UUCP(或其他)邮件连接,则会进一步增加复杂性。以下各节中
的信息有助于理解邮件地址的各个部分及其复杂性。
第305 页中的“域和子域”
第305 页中的“名称服务域名和邮件域名”
第305 页中的“邮件地址的典型格式”
第306 页中的“与路由无关的邮件地址”
邮件服务的软件和硬件组件
304 系统管理指南:网络服务• 2006 年8 月
域和子域
电子邮件地址会使用域。域是用于网络地址命名的目录结构。一个域可以包含一个或多个
子域。地址的域和子域与文件系统的分层结构类似。正如我们认为子目录位于其上面的目
录之内,同样可以认为邮件地址中的每个子域位于其右侧的位置之内。
下表显示了一些顶层域。
表14–7顶层域
域说明
com 商业站点
edu 教育站点
gov 美国政府机构
mil 美国军事机构
net 联网组织
org 其他非赢利组织
域不区分大小写。在地址的域部分中,可以使用大写、小写或大小写混合的字母,而不会
产生任何错误。
名称服务域名和邮件域名
使用名称服务域名和邮件域名时,请记住以下几点。
缺省情况下,sendmail 程序会从NIS 或NIS+ 域名中去除第一个组成部分,以形成邮件
域名。例如,如果NIS+ 域名为bldg5.example.com,则其邮件域名将为example.com。
尽管邮件域地址不区分大小写,但NIS 或NIS+ 域名会区分大小写。为了获得最佳结
果,在设置邮件以及NIS 或NIS+ 域名时请使用小写字符。
DNS 域名和邮件域名必须相同。
有关更多信息,请参阅第325 页中的“sendmail 与名称服务的交互”。
邮件地址的典型格式
通常,邮件地址具有以下格式。有关详细信息,请参阅第306 页中的“与路由无关的邮件
地址”。
. ... .subdomain2.subdomain1.top-level-domain
@ 符号左侧的地址部分是本地地址。本地地址可以包含以下内容。
有关其他邮件传输的路由信息(例如bob::vmsvax@gateway 或
)
邮件服务的软件和硬件组件
第14 章• 邮件服务(参考) 305
别名(例如iggy.ignatz)
注– 接收邮件程序负责确定地址的本地部分的含义。有关邮件程序的信息,请参阅第303 页
中的“邮件程序与sendmail”。
@ 符号右侧的地址部分显示域的级别,它是本地地址驻留的位置。每个子域之间用点分隔。
地址的域部分可以是一个组织、物理地区或地理区域。此外,域信息的顺序是分层的,即
子域的本地性越明显,该子域距离@ 符号越近。
与路由无关的邮件地址
邮件地址可以与路由无关。与路由无关的寻址要求电子邮件的发件人指定收件人的名称以
及最终目标。高速网络(如Internet)可使用与路由无关的地址。与路由无关的地址可以具
有以下格式。
用于UUCP连接的与路由无关的地址可以具有以下地址格式。
host.domain!user
随着计算机的域分层命名方案越来越受欢迎,与路由无关的地址也越来越普遍。实际上,
最常见的与路由无关的地址会省略主机名,并依赖域名服务来正确标识电子邮件的最终目
标。
通过搜索@ 符号可首先读取与路由无关的地址。然后,从右(最高层)向左(@ 符号右侧的
地址中最具体的部分)读取域分层结构。
邮箱文件
邮箱是指作为电子邮件的最终目标的文件。邮箱的名称可以是用户名或特定功能的标识,
如邮寄主管。邮箱位于/var/mail/ username 文件中,该文件可以存在于用户的本地系统或
远程邮件服务器上。在任一情况中,邮箱都位于邮件传送到的系统中。
应始终将邮件传送到本地文件系统,以便用户代理可从邮件缓冲池中提取邮件,并轻松将
其存储在本地邮箱中。请勿使用已挂载NFS 的文件系统作为用户邮箱的目标。具体来说,
请勿将邮件定向至要从远程服务器挂载/var/mail 文件系统的邮件客户机。在此情况下,应
将用户的邮件发往到邮件服务器而非客户机主机名。已挂载NFS 的文件系统会导致在邮件
传送和处理中出现问题。
/etc/mail/aliases 文件和名称服务(如NIS 和NIS+)提供了为电子邮件地址创建别名的机
制。因此,用户无需知道用户邮箱的准确本地名称。
下表显示了一些针对专用邮箱的常见命名约定。
邮件服务的软件和硬件组件
306 系统管理指南:网络服务• 2006 年8 月
表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 章中的第275 页中的“管理邮件别名文件(任务列表)”。另外,还
可以参阅本章中的第320 页中的“邮件别名文件”。
邮件服务的软件和硬件组件
第14 章• 邮件服务(参考) 307
对于大型站点,邮件别名通常用来定义邮箱的位置。提供邮件别名类似于在有多个房间的
大公司内为个人提供房间号作为地址的一部分。如果不提供房间号,邮件将传送至中心地
址。如果没有房间号,则需要花费额外的精力来确定邮件传送到该建筑内的地址。因此,
更容易出现错误。例如,在同一建筑内有两个人名为Kevin Smith,则仅有其中一个人可获
取该邮件。为改正此问题,每个Kevin Smith 都应在其地址中添加一个房间号。
创建邮递列表时,请尽可能使用与域和位置无关的地址。要提高别名文件的可移植性和灵
活性,请尽可能使邮递列表中的别名项可以通用并与系统无关。例如,如果域example.com
中的系统mars 上有一个名为ignatz 的用户,则应创建别名为 而非
。如果用户ignatz 更改了其系统名称但仍处于example 域中,则无需更新别名
文件即可反映系统名称的更改。
创建别名项时,请在每一行中键入一个别名。应该仅有一项包含用户的系统名称。例如,
可为用户ignatz 创建以下各项。
ignatz: iggy.ignatz
iggyi: iggy.ignatz
iggy.ignatz:
可为本地名称或域创建别名。例如,如果用户fred 在系统mars 中具有一个邮箱并且该用户
位于域planets 中,则NIS+ 别名表中可包含该用户的别名项。
fred:
如果创建的邮件列表中包括域外面的用户,请使用用户名和域名来创建别名。例如,如果
域example.com 中的系统privet 上有一个名为smallberries 的用户,可创建别名为
。现在,向用户域之外发送邮件时,发件人的电子邮件地址会自
动转换为全限定域名。
以下列表介绍了创建和管理邮件别名文件的方法。
可以创建在NIS+ mail_aliases 表、NIS aliases 映射或本地/etc/mail/aliases 文件中全
局使用的邮件别名。另外,还可以创建和管理使用相同别名文件的邮递列表。
根据邮件服务的配置,可以通过使用NIS 或NIS+ 名称服务来管理别名,以维护全局
aliases 数据库。或者,也可以更新所有本地/etc/mail/aliases 文件,以使别名保持同
步。
用户还可以创建和使用别名。用户可以在其本地~/.mailrc 文件(仅供该用户使用)或
在本地/etc/mail/aliases 文件(可供任何用户使用)中创建别名。用户通常不能创建
或管理NIS 或NIS+ 别名文件。
硬件组件
可在同一系统中提供三种必需的邮件配置元素,也可通过单独的系统来提供这些元素。
第309 页中的“邮件主机”
第309 页中的“邮件服务器”
邮件服务的软件和硬件组件
308 系统管理指南:网络服务• 2006 年8 月
第310 页中的“邮件客户机”
当用户要与域之外的网络通信时,还必须添加第四个元素,即邮件网关。有关更多信息,
请参阅第310 页中的“邮件网关”。以下各节介绍了每个硬件组件。
邮件主机
邮件主机是在网络中指定作为主邮件计算机的计算机。站点中的其他系统会将无法传送的
邮件转发给邮件主机。通过在本地/etc/hosts 文件中的IP 地址右侧添加mailhost 一词,可
在hosts 数据库中将某个系统指定为邮件主机。或者,也可以用类似的方法向名称服务的主
机文件中添加mailhost 一词。有关详细的任务信息,请参阅第13 章中的第259 页中的“如
何设置邮件主机”。
合适的候选邮件主机是配置作为您的网络和Internet 全局网络之间的路由器的系统。有关更
多信息,请参阅第15 章、第24 章以及《System Administration Guide: IP Services》中
的“Configuring a Router”。如果本地网络中没有系统具有调制解调器,请指定一个系统作为
邮件主机。
有些站点在分时配置中会使用未联网的独立计算机。特别需要指出的是,独立计算机将为
连接到其串行端口的终端提供服务。通过将独立系统指定为单系统网络的邮件主机,可为
此配置设置电子邮件。第12 章的第249 页中的“硬件组件概述”提供的图中显示了典型的
电子邮件配置。
邮件服务器
邮箱是包含特定用户的电子邮件的单个文件。邮件会传送到用户邮箱驻留的系统,这可以
是本地计算机或远程服务器。邮件服务器是可在其/var/mail 目录中维护用户邮箱的任何系
统。有关任务信息,请参阅第13 章中的第255 页中的“如何设置邮件服务器”。
邮件服务器会路由来自客户机的所有邮件。客户机发送邮件时,邮件服务器会将该邮件放
入队列进行传送。邮件进入队列后,用户可以重新引导或关闭客户机,而不会丢失这些邮
件。收件人从客户机获取邮件时,邮件的From 行中的路径包含了邮件服务器的名称。如果
收件人做出响应,该响应将转到用户的邮箱。合适的候选邮件服务器是为用户提供起始目
录的系统或定期备份的系统。
如果邮件服务器不是用户的本地系统,则使用NFS 软件的配置中的用户可以使用
/etc/vfstab 文件来挂载/var/mail 目录,前提是用户具有root 访问权限。或者,用户也可
以使用自动挂载程序。如果未提供NFS 支持,用户可以登录到服务器来阅读其邮件。
如果网络中的用户发送其他类型的邮件(如音频文件或来自桌面发布系统的文件),则需
要在邮件服务器中为邮箱分配更多空间。
通过为所有邮箱建立一个邮件服务器,可以简化进行备份的过程。如果邮件分散在多个系
统中,则很难进行备份。在一台服务器中存储许多邮箱的缺点是该服务器会成为许多用户
的单点故障。但是,可提供良好备份的优点则通常值得冒这个风险。
邮件服务的软件和硬件组件
第14 章• 邮件服务(参考) 309
邮件客户机
邮件客户机是一个在邮件服务器上具有邮箱的邮件服务用户。此外,邮件客户机在指向邮
箱位置的/etc/mail/aliases 文件中还具有邮件别名。有关任务信息,请参阅第13 章中的
第257 页中的“如何设置邮件客户机”。
邮件网关
邮件网关是一台计算机,用于处理运行不同通信协议的网络之间的连接或在使用相同协议
的不同网络之间进行通信。例如,邮件网关可能会将TCP/IP 网络连接到运行系统网络体系
结构(Systems Network Architecture, SNA) 协议集的网络。
要设置的最简单的邮件网关是连接使用同一协议或邮件程序的两个网络的网关。此系统可
以处理sendmail 在域中无法根据其地址找到收件人的邮件。如果存在邮件网关,sendmail
将使用网关来发送和接收域外面的邮件。
可在使用不匹配邮件程序的两个网络之间设置邮件网关,如下图所示。要支持此配置,必
须在邮件网关系统中自定义sendmail.cf 文件,这可能是一个很困难并且耗时的过程。
图14–1不同通信协议之间的网关
如果有一台机器与Internet 建立连接,则可将该机器配置为邮件网关。配置邮件网关之前,
请仔细考虑站点的安全需求。您可能需要在公司网络与其他网络之间创建防火墙网关,并
将该网关设置为邮件网关。有关任务信息,请参阅第13 章中的第261 页中的“如何设置邮
件网关”。
邮件服务的软件和硬件组件
310 系统管理指南:网络服务• 2006 年8 月
邮件服务程序和文件
邮件服务包括许多彼此交互的程序和守护进程。本节介绍了与管理电子邮件相关的文件、
程序、术语和概念。
第311 页中的“vacation 实用程序的增强功能”
第311 页中的“/usr/bin 目录的内容”
第312 页中的“/etc/mail 目录的内容”
第314 页中的“/usr/lib 目录的内容”
第315 页中的“用于邮件服务的其他文件”
第316 页中的“邮件程序的交互”
第317 页中的“sendmail 程序”
第320 页中的“邮件别名文件”
第322 页中的“.forward 文件”
第324 页中的“/etc/default/sendmail 文件”
vacation 实用程序的增强功能
从Solaris 10 发行版开始,vacation 实用程序进行了增强,允许用户指定哪些传入邮件可以
接收自动生成的回复。使用此增强功能,用户可以避免与不认识的人共享机密信息或联系
人信息。来自垃圾邮件发件人或不认识的人的邮件将不会收到回复。
此增强功能可将传入的发件人电子邮件地址与.vacation.filter 文件中的域或电子邮件地
址的列表进行比较。该文件由用户创建,并保存在用户的起始目录中。如果找到了匹配的
域或电子邮件地址,则会发送回复。如果没有找到,则不发送回复。
.vacation.filter 可能包含以下类似项:
company.com
mydomain.com
请注意,每一行包含一个域或一个电子邮件地址。每项必须位于单独的一行中。要使发件
人的电子邮件地址与某个电子邮件地址项匹配,除大小写之外,该匹配必须是精确匹配。
发件人地址中的字母是大写还是小写将会忽略。要使发件人的电子邮件地址与某个域项匹
配,该发件人的地址必须包含列出的域。例如, 和
都可与域项company.com 匹配。
有关更多信息,请参见vacation(1) 手册页。
/usr/bin 目录的内容
下表显示了用于邮件服务的/usr/bin 目录的内容。
邮件服务程序和文件
第14 章• 邮件服务(参考) 311
名称类型说明
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 中,无需此文
件。
邮件服务程序和文件
312 系统管理指南:网络服务• 2006 年8 月
名称类型说明
relay-domains 文件允许进行中继的所有域的列表。缺省情况下,仅本地域允
许进行中继。
sendmail.cf 文件用于邮件路由的配置文件。
submit.cf 文件用于邮件提交程序(mail submission program, MSP) 的新配置
文件。有关更多信息,请参阅第338 页中的“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 目录中。请参见第315 页中的“用于邮件服务的其他文件”。为了实现向下兼
容,符号链接指向每个文件的新位置。
表14–9 用于邮件服务的/etc/mail/cf 目录的内容
名称类型说明
README 文件介绍配置文件。
cf/main.mc 文件以前名为cf/main-v7sun.mc。它是主配置
文件。
邮件服务程序和文件
第14 章• 邮件服务(参考) 313
表14–9 用于邮件服务的/etc/mail/cf 目录的内容(续)
名称类型说明
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 目录包含邮件程序的定义,包括local、smtp
和uucp 的定义。
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 目录的内容。
邮件服务程序和文件
314 系统管理指南:网络服务• 2006 年8 月
表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 目录的符号链接。有关更多信息,请参阅第
313 页中的“/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 使用的错误消息记录程序。
邮件服务程序和文件
第14 章• 邮件服务(参考) 315
表14–11 用于邮件服务的其他文件(续)
名称类型说明
/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. 通知收件人邮件已到达,收件人使用mail、mailx 或类似程序检索邮件。
邮件服务程序和文件
316 系统管理指南:网络服务• 2006 年8 月
sendmail 程序
以下列表介绍了sendmail 程序的一些功能。
sendmail 可以使用不同类型的通信协议,如TCP/IP 和UUCP。
sendmail 可以实现SMTP 服务器、邮件排队和邮递列表。
sendmail 可以通过使用符合以下命名约定的模式匹配系统来控制名称解释。
基于域的命名约定。通过域技术可以区分物理命名和逻辑命名问题。有关域的更多
信息,请参阅第304 页中的“邮件地址”。
临时技术,如提供对于其他网络中的主机而言看似位于本地的网络名。
任意(早期)命名语法。
完全不同的命名方案。
Solaris 操作系统使用sendmail 程序作为邮件路由器。以下列表介绍了该程序的一些功能。
sendmail 负责接收电子邮件并将其传送给本地传送代理,如mail.local 或procmail。
sendmail 是一个邮件传输代理,用于接受来自用户代理(如mailx 和Mozilla 邮件)的邮
件并通过Internet 将其路由至目标。
sendmail 通过以下方法来控制用户发送的电子邮件。
确定收件人的地址
选择合适的传送程序
以传送代理可以处理的格式重写地址
根据需要重新格式化邮件头
最后将已转换的邮件传递给邮件程序以进行传送
有关sendmail 程序的更多信息,请参阅以下主题。
第317 页中的“sendmail 及其重新路由机制”
第318 页中的“sendmail 功能”
第319 页中的“sendmail 配置文件”
sendmail 及其重新路由机制
sendmail 程序支持三种邮件重新路由机制。您选择的机制取决于涉及的更改类型。
服务器更改
域范围的更改
面向一个用户的更改
此外,您选择的重新路由机制还会影响所需要的管理级别。请考虑以下选项。
1. 一种重新路由机制是别名。
根据使用的文件类型,别名可在服务器范围内或名称服务范围内将名称映射为地址。
请考虑名称服务别名的以下优点和缺点。
使用名称服务别名文件允许从单个源中管理邮件重新路由更改。但是传播重新路由
更改时,名称服务别名会产生延迟时间。
邮件服务程序和文件
第14 章• 邮件服务(参考) 317
名称服务管理通常限制为一组选定的系统管理员。普通用户将不能管理此文件。
请考虑使用服务器别名文件的以下优点和缺点。
通过使用服务器别名文件,指定的服务器上能够成为root 的任何用户都可管理重新
路由。
传播重新路由更改时,服务器别名会产生很短的延迟时间或消除延迟时间。
更改仅会影响本地服务器,这在大多数邮件都发送至一台服务器时可以接受。但
是,如果需要将此更改传播至许多邮件服务器,请使用名称服务。
普通用户将不能管理此更改。
有关更多信息,请参阅本章中的第320 页中的“邮件别名文件”。有关任务列表,请参
阅第13 章中的第275 页中的“管理邮件别名文件(任务列表)”。
2. 第二种机制是转发。
通过此机制,用户可以管理邮件重新路由。本地用户可将其传入邮件重新路由至以下位
置。
其他邮箱
不同的邮件程序
其他邮件主机
通过使用.forward 文件可支持此机制。有关这些文件的更多信息,请参阅本章中的第322
页中的“.forward 文件”。有关任务列表,请参阅第13 章中的第288 页中的“管理
.forward 文件(任务列表)”。
3. 最后一种重新路由机制是包含。
通过此机制,用户可维护别名列表而不会要求root 访问。要提供此功能,root 用户必
须在服务器上的别名文件中创建相应的项。创建该项之后,用户即可根据需要重新路由
邮件。有关包含的更多信息,请参阅本章中的第320 页中的“/etc/mail/aliases 文件
”。有关任务列表,请参阅第13 章中的第275 页中的“管理邮件别名文件(任务列表)
”。
注– 读取邮件的程序(如/usr/bin/mailx)可以有自己的别名,该别名在邮件到达
sendmail 之前会进行扩展。sendmail 的别名可以来自许多名称服务源,如本地文件、
NIS 或NIS+。查找的顺序由nsswitch.conf 文件确定。请参阅nsswitch.conf(4) 手册
页。
sendmail 功能
sendmail 程序提供了以下功能。
sendmail 很可靠。该程序旨在正确传送每封邮件。任何邮件都不会完全丢失。
sendmail 会尽可能使用现有软件进行传送。例如,用户会与邮件生成程序和邮件发送程
序进行交互。提交邮件时,邮件生成程序会调用sendmail,后者将邮件路由至正确的邮
件程序。由于有些发送器可能是网络服务器,有些邮件程序可能是网络客户机,因此可
将sendmail 用作Internet 邮件网关。有关该过程的更详细说明,请参见第316 页中的“
邮件程序的交互”。
邮件服务程序和文件
318 系统管理指南:网络服务• 2006 年8 月
可将sendmail 配置为用于包括多个网络的复杂环境。sendmail 会检查地址的内容及其语
法,以确定要使用的邮件程序。
sendmail 使用配置文件来控制邮件配置,而不要求将该配置信息编译成代码。
用户可以维护各自的邮递列表。此外,各用户还可以指定各自的转发机制,而无需修改
域范围的别名文件,该文件通常位于NIS 或NIS+ 维护的域范围别名中。
每个用户可以指定自定义邮件程序,以处理传入邮件。自定义邮件程序可以提供返回内
容为“I am on vacation.”等类似邮件的功能。有关更多信息,请参见vacation(1) 手册页。
sendmail 可将地址批处理至单独一台主机,以减少网络通信流量。
sendmail 配置文件
配置文件控制sendmail 执行其功能的方法。配置文件可确定要选择的传送代理、地址重写
规则以及邮件头格式。sendmail 程序使用/etc/mail/sendmail.cf 文件中的信息来执行其功
能。
Solaris 操作系统在/etc/mail 目录中提供了两个缺省配置文件。
1. sendmail.cf,用于在守护进程模式下运行sendmail 的配置文件。
2. submit.cf,用于在邮件提交程序模式而非守护进程模式下运行sendmail 的配置文件。
有关更多信息,请参阅第338 页中的“sendmail 版本8.12 中的配置文件submit.cf”。
设置邮件客户机、邮件服务器、邮件主机或邮件网关时,请考虑以下情况:
对于邮件客户机或邮件服务器,无需执行任何操作即可设置或编辑缺省配置文件。
要设置邮件主机或邮件网关,需要设置邮件配置所需的中继邮件程序和中继主机参数。
有关任务信息,请参阅第13 章中的第254 页中的“设置邮件服务(任务列表)”或第
264 页中的“生成sendmail.cf 配置文件”。请注意,在sendmail 版本8.13 中,不再需
要main.cf 文件。
以下列表介绍了可以根据站点的要求来更改的一些配置参数。
时间值,用于指定以下信息。
读取超时。
将邮件返回给发件人之前,该邮件在队列中保持未传送状态的时间长度。请参阅第347
页中的“sendmail 版本8.12 中新增的队列功能”。有关任务列表,请参阅第
285 页中的“管理队列目录(任务列表)”。
传送模式,用于指定传送邮件的快速程度。
负荷限制,可在繁忙期间提高效率。这些参数可防止sendmail 尝试传送大型邮件、向许
多收件人传送邮件以及向已长时间关闭的站点传送邮件。
日志级别,用于指定记录的问题的种类。
邮件服务程序和文件
第14 章• 邮件服务(参考) 319
邮件别名文件
可以使用以下任何文件、映射或表来维护别名。
第320 页中的“.mailrc 别名”
第320 页中的“/etc/mail/aliases 文件”
第321 页中的“NIS aliases 映射”
第322 页中的“NIS+ mail_aliases 表”
维护别名的方法取决于使用别名的用户以及需要可更改别名的用户。每种别名类型都具有
唯一的格式要求。
如果要查找任务信息,请参阅第13 章中的第275 页中的“管理邮件别名文件(任务列表)
”。
.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 章中的第281 页中的“如何设置本地邮件别名文件”。
或者,也可以使用Solaris Management Console 中的邮递列表功能来管理本地/etc 文件中存
储的邮件别名。
可以仅为本地名称(当前主机名或无主机名)创建别名。例如,如果用户ignatz 在系统
saturn 中有一个邮箱,则/etc/mail/aliases 文件中可包含该用户的以下别名项。
邮件服务程序和文件
320 系统管理指南:网络服务• 2006 年8 月
ignatz:
应为每台邮件服务器创建一个管理帐户。创建此类帐户的方法是在邮件服务器上为root 指
定一个邮箱并在/etc/mail/aliases 文件中为root 添加一项。例如,如果系统saturn 是邮
箱服务器,则可向/etc/mail/aliases 文件中添加项root: 。
通常,仅有root 用户才能编辑此文件。但是,使用Solaris Management Console 时,组14
(sysadmin 组)中的所有用户都可以更改该本地文件。另外,还可选择创建以下项。
aliasname: :include:/path/aliasfile
aliasname 是用户在发送邮件时使用的名称,/path/aliasfile 是包含别名列表的文件的全路
径。该别名文件应包括电子邮件项(每行一项),并且不包括任何其他符号。
可在/etc/mail/aliases 中定义附加的邮件文件,以保留日志或备份副本。以下项会将发送
给aliasname 的所有邮件都存储在filename 中。
aliasname: /home/backup/filename
另外,还可以将邮件路由至其他进程。以下示例将邮件副本存储在filename 中并列显副本。
aliasname: "|tee -a /home/backup/filename |lp"
有关任务列表,请参阅第13 章中的第275 页中的“管理邮件别名文件(任务列表)”。
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 是包含/etc/mail/alias 文件的服务器的主机
名。
邮件服务程序和文件
第14 章• 邮件服务(参考) 321
有关任务信息,请参阅第13 章中的第280 页中的“如何设置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 章中的第275 页中的“管理邮件别名文
件(任务列表)”。或者,也可以使用Solaris Management Console 来管理NIS+ 邮件别名。
注– 如果要创建新的NIS+ aliases 表,必须在创建项之前先初始化该表。如果该表已存在,
则无需进行初始化。
.forward 文件
用户可在其起始目录中创建一个.forward 文件,以供sendmail 以及其他程序用于重定向邮
件或发送邮件。请参阅以下主题。
第323 页中的“应避免的情况”
第323 页中的“对.forward 文件的控制”
第323 页中的“.forward.hostname 文件”
第324 页中的“.forward+detail 文件”
有关任务列表,请参阅第13 章中的第288 页中的“管理.forward 文件(任务列表)”。
邮件服务程序和文件
322 系统管理指南:网络服务• 2006 年8 月
应避免的情况
以下列表介绍了可以避免或轻松解决问题的一些情况。
如果邮件未传送至预期的地址,请检查该用户的.forward 文件。用户可能已将.forward
文件放入了host1 的起始目录,该文件会将邮件转发至。邮件到达host2
时,sendmail 会在NIS 或NIS+ 别名中检查user 并将邮件发回至。此路由将
产生循环以及更多退回的邮件。
要避免安全问题,请勿将.forward 文件放在root 和bin 帐户中。如有必要,请改用
aliases 文件转发邮件。
对.forward 文件的控制
要使.forward 文件成为邮件传送中的有效部分,请确保正确应用以下控制(主要是权限设
置)。
.forward 文件必须只能由文件属主写入。此限制可以防止其他用户破坏安全性。
至起始目录的路径必须只能由root 拥有和写入。例如,如果.forward 文件位于
/export/home/terry 中,则/export 和/export/home 必须只能由root 拥有和写入。
实际起始目录应只能由用户写入。
.forward 文件不能是符号链接,并且此文件不能包含多个硬链接。
.forward.hostname 文件
可以创建一个.forward.hostname 文件,以重定向发送至特定主机的邮件。例如,如果用户
的别名已从 更改为,请在sandy 的起始目录
中放入一个.forward.phoenix 文件。
% cat .forward.phoenix
"|/usr/bin/vacation sandy"
% cat .vacation.msg
From: (via the vacation program)
Subject: my alias has changed
My alias has changed to .
Please use this alias in the future.
The mail that I just received from you
邮件服务程序和文件
第14 章• 邮件服务(参考) 323
has been forwarded to my new address.
Sandy
在本示例中,在通知发件人发生别名更改后,可将邮件转发至正确地址。由于vacation 程
序仅允许一个邮件文件,因此每次仅能转发一封邮件。但是,如果邮件不是特定于主机,
则.forward 文件可将一个休假邮件文件用于多台主机。
.forward+detail 文件
对转发机制的另一种扩展是.forward+ detail 文件。detail 字符串可以是除运算符字符之外的
任意字符序列。运算符字符包括.:%&!^[]+。通过使用此类型的文件,可以确定是否有其他
人在您不知情的情况下使用您的电子邮件地址。例如,如果某个用户告诉其他人使用电子
邮件地址,该用户将能够识别将来传送给此别名的任何邮件。缺
省情况下,将根据别名和.forward+detail 文件对发送至 别名的所
有邮件进行检查。如果未找到任何匹配项,邮件将转而传送至,但用户
可以看到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
选择要用于主守护进程的其他选项。不会进行任何语法检查,因此在更改此变量时请务
必小心。
邮件服务程序和文件
324 系统管理指南:网络服务• 2006 年8 月
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 与名称服务的特定交互。有关详细信息,请参阅以下主题。
第326 页中的“sendmail.cf 和邮件域”
第326 页中的“sendmail 和名称服务”
第327 页中的“NIS 与sendmail 的交互”
第328 页中的“sendmail 与NIS 和DNS 的交互”
sendmail 与名称服务的交互
第14 章• 邮件服务(参考) 325
第328 页中的“NIS+ 与sendmail 的交互”
第329 页中的“sendmail 与NIS+ 和DNS 的交互”
如果要查找相关的任务信息,请参阅第13 章中的第262 页中的“如何使用DNS
和sendmail”或第275 页中的“管理邮件别名文件(任务列表)”。
sendmail.cf 和邮件域
标准的sendmail.cf 文件使用邮件域来确定是直接传送还是通过邮件主机传送邮件。域内邮
件通过直接的SMTP 连接传送,而域间邮件则会转发至邮件主机。
在安全网络中,仅会对少数选定的主机进行授权,允许其生成向外部目标发送的包。即使
主机具有邮件域外部的远程主机的IP 地址,也不能保证可以建立SMTP 连接。标准的
sendmail.cf 假定以下情况成立。
未授权当前主机直接向邮件域外部的主机发送包。
邮件主机能够将邮件转发给授权主机,该主机可以直接将包传输给外部主机。实际上,
邮件主机可以是授权主机。
通过这些假设,邮件主机将负责传送或转发域间邮件。
sendmail 和名称服务
sendmail 可对名称服务强加各种要求。为增强您对这些要求的理解,本节将首先介绍邮件
域与名称服务域之间的关系。然后,本节会介绍各种要求。请参阅以下主题。
第326 页中的“邮件域和名称服务域”
第327 页中的“名称服务的要求”
nis+(1)、nisaddent(1M) 和nsswitch.conf(4) 的手册页
邮件域和名称服务域
邮件域名必须是名称服务域名的后缀。例如,如果名称服务的域名为A.B.C.D,则邮件域名
可能是以下各项之一。
A.B.C.D
B.C.D
C.D
D
最初建立时,邮件域名通常与名称服务域名相同。随着网络规模的变大,名称服务域可以
划分为几个较小的部分,以使名称服务更易于管理。但是,为提供一致的别名,邮件域通
常保持不划分状态。
sendmail 与名称服务的交互
326 系统管理指南:网络服务• 2006 年8 月
名称服务的要求
本节介绍sendmail 对名称服务强加的要求。
必须在名称服务中设置主机表或映射,才能支持三种类型的gethostbyname() 查询。
mailhost-部分名称服务配置会自动满足此要求。
完整主机名(例如,smith.admin.acme.com)-许多名称服务配置都满足此要求。
短主机名(例如smith)-sendmail 必须连接至邮件主机,才能转发外部邮件。要确定
邮件地址是否位于当前邮件域内,可使用完整主机名调用gethostbyname()。如果找到
该项,则将地址视为内部地址。
NIS、NIS+ 和DNS 都支持gethostbyname() 以短主机名作为参数,因此会自动满足这一
要求。
还需要遵循有关主机名服务的其他两条规则,才能在名称服务内建立有效的sendmail 服
务。
gethostbyname() 在使用完整主机名参数和短主机名参数时应产生一致的结果。例如,
如果从邮件域admin.acme.com 中调用gethostbyname(smith.admin.acme.com) 和
gethostbyname(smith),则这两个函数应返回相同结果。
对于通用邮件域下的所有名称服务域,使用短主机名的gethostbyname() 应产生相同结
果。例如,如果给定邮件域smith.admin.acme.com,则当调用来自ebb.admin.acme.com
域或esg.admin.acme.com 域时,gethostbyname(smith) 应返回相同结果。邮件域名通常
比名称服务域名短,这样此要求针对各种名称服务可具有特殊含义。
有关gethostbyname() 函数的更多信息,请参阅gethostbyname(3NSL) 手册页。
NIS 与sendmail 的交互
以下列表介绍了sendmail 与NIS 的交互并提供了一些指导。
邮件域名-如果要将NIS 设置为主名称服务,则sendmail 会自动去除NIS 域名的第一个
组成部分并使用剩下的部分作为邮件域名。例如,ebs.admin.acme.com 将成为
admin.acme.com。
邮件主机名-必须在NIS 主机映射中具有一个mailhost 项。
完整主机名-标准的NIS 设置不能“识别”完整主机名。此设置不会尝试使NIS 识别完整
主机名,而是通过编辑sendmail.cf 文件并使用%y 替换出现的所有%l,从sendmail 端取
消此要求。此更改将关闭sendmail 的域间邮件检测。如果目标主机可以解析为一个IP
地址,则会尝试直接进行SMTP 传送。请确保NIS 主机映射不包含在当前邮件域之外的
任何主机项。否则,需要进一步自定义sendmail.cf 文件。
匹配完整主机名和短主机名-请遵循前面有关如何为完整主机名禁用gethostbyname()
的说明。
多个NIS 域在一个邮件域中-一个通用邮件域下的所有NIS 主机映射应具有同一组主机
项。例如,ebs.admin.acme.com 域中的主机映射应该与esg.admin.acme.com 中的主机映
射相同。否则,一个地址可能可在一个NIS 域中正常使用,但是无法用于其他NIS 域。
sendmail 与名称服务的交互
第14 章• 邮件服务(参考) 327
有关任务信息,请参阅第13 章中的第275 页中的“管理邮件别名文件(任务列表)”。
sendmail 与NIS 和DNS 的交互
以下列表介绍了sendmail 与NIS 和DNS 的交互并提供了一些指导。
邮件域名-如果要将NIS 设置为主名称服务,则sendmail 会自动去除NIS 域名的第一个
组成部分并使用剩下的部分作为邮件域名。例如,ebs.admin.acme.com 将成为
admin.acme.com。
邮件主机名-启用DNS 转发功能时,对NIS 无法解析的查询将转发至DNS,因此在NIS
主机映射中无需mailhost 项。
完整主机名-尽管NIS 不能“识别”完整主机名,但DNS 可以识别。如果遵循设置NIS 和
DNS 的常规过程,则会满足此要求。
匹配完整主机名和短主机名-对于NIS 主机表中的每个主机项,必须在DNS 中具有对应
的主机项。
多个NIS 域在一个邮件域中-一个通用邮件域下的所有NIS 主机映射应具有同一组主机
项。例如,ebs.admin.acme.com 域中的主机映射应该与esg.admin.acme.com 域中的主机
映射相同。否则,一个地址可能可在一个NIS 域中正常使用,但是无法用于其他NIS
域。
有关任务信息,请参阅第13 章中的第262 页中的“如何使用DNS 和sendmail”和第275 页
中的“管理邮件别名文件(任务列表)”。
NIS+ 与sendmail 的交互
以下列表介绍了sendmail 与NIS+ 的交互并提供了一些指导。
邮件域名-如果要将NIS+ 设置为主名称服务,则sendmail 可检查NIS+ sendmailvars 表
中的邮件域。此NIS+表包含一个关键字列和一个值列。要设置邮件域,必须向该表中
添加一项。此项应将关键字列设置为字符串maildomain,将值列设置为邮件域名。例如
admin.acme.com。尽管NIS+ 允许sendmailvars 表中包含任何字符串,但要使邮件系统
正常工作,仍需应用后缀规则。可以使用nistbladm 将maildomain 项添加到
sendmailvars 表中。请注意,在以下示例中,邮件域是NIS+ 域的后缀。
nistbladm -A key="maildomain" value= sendmailvars.org_dir.
Mailhost 主机名-必须在NIS+ 主机表中具有一个mailhost 项。
完整主机名-NIS+ 可以“识别”完整主机名。遵循常规的NIS+ 设置过程即可满足此要
求。
匹配完整主机名和短主机名-要满足此要求,可以复制主机表中的项。或者,也可以将
用户名称服务域中的所有主机项都输入到邮件域级别的主主机表中。
sendmail 与名称服务的交互
328 系统管理指南:网络服务• 2006 年8 月
多个NIS 域在一个邮件域中-要满足此要求,可复制所有主机表中的项。或者,也可以
将用户名称服务域中的所有主机项都输入到邮件域级别的主主机表中。比较有效的方法
是,将多个逻辑或物理主机表合并为一个主机表。因此,在共享一个通用邮件域的多个
名称服务域中,不能重用相同的主机名。
有关任务信息,请参阅第13 章中的第275 页中的“管理邮件别名文件(任务列表)”。
sendmail 与NIS+ 和DNS 的交互
以下列表介绍了sendmail 与NIS+ 和DNS 的交互并提供了一些指导。
邮件域名-如果要将NIS+ 设置为主名称服务,则sendmail 可检查NIS+ sendmailvars 表
中的邮件域。此NIS+ 表包含一个关键字列和一个值列。要设置邮件域,必须向该表中
添加一项。此项应将关键字列设置为字符串maildomain,将值列设置为邮件域名。例如
admin.acme.com。尽管NIS+ 允许sendmailvars 表中包含任何字符串,但要使邮件系统
正常工作,仍需应用后缀规则。可以使用nistbladm 将maildomain 项添加到
sendmailvars 表中。请注意,在以下示例中,邮件域是NIS+ 域的后缀。
nistbladm -A key="maildomain" value= sendmailvars.org_dir.
Mailhost 主机名-如果网络同时使用NIS+ 和DNS 作为主机数据库源,则可将mailhost
项放入NIS+ 或DNS 主机表中。请确保用户在/etc/nsswitch.conf 文件中同时包括NIS+
和DNS 作为主机数据库源。
完整主机名-NIS+ 和DNS 都可以“识别”完整主机名。遵循常规NIS+ 和DNS 设置过程即
可满足此要求。
匹配完整主机名和短主机名-对于NIS+ 主机表中的每个主机项,必须在DNS 中具有对
应的主机项。
多个NIS 域在一个邮件域中-要满足此要求,可复制所有主机表中的项。或者,也可以
将用户名称服务域中的所有主机项都输入到邮件域级别的主主机表中。
有关任务信息,请参阅第13 章中的第275 页中的“管理邮件别名文件(任务列表)”和第
262 页中的“如何使用DNS 和sendmail”。
sendmail 版本8.13 中的更改
从Solaris 10 发行版开始,版本8.13 为缺省版本。虽然此新版本的sendmail 提供了许多新增
功能,但最重要的是添加了FallBackSmartHost 选项。由于此选项,您无需再使用main.cf
和subsidiary.cf。main.cf 文件用于支持MX记录的环境中。subsidiary.cf 文件用于不具
备完全功能的DNS 的环境中。上述环境使用智能主机,不使用MX记
录。FallBackSmartHost 选项可提供统一的配置。此选项的作用与所有环境最不可能首选的
MX记录类似。要确保邮件传送到客户机,此选项(如果启用)需提供一台正确连接的(或
智能)主机,此主机将用作出现故障的MX记录的备份(或故障转移)。
有关版本8.13 的更多信息,请参见以下各节:
sendmail 版本8.13 中的更改
第14 章• 邮件服务(参考) 329
第334 页中的“sendmail 版本8.13 中新增的命令行选项”
第335 页中的“sendmail 版本8.13 中新增和修订的配置文件选项”
第336 页中的“sendmail 版本8.13 中新增和修订的FEATURE() 声明”
此外,从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 服务器和客户机的这种扩展服务可提供以下功能:
Internet 中专用的、经过验证的通信
保护不受窃听者和攻击者的攻击
注– TLS 的实现基于安全套接字层(Secure Sockets Layer, SSL) 协议。
STARTTLS 是使用TLS 启动安全SMTP 的SMTP 关键字。此安全连接可能建立在两台服务器
之间或一台服务器与一台客户机之间。安全连接定义如下:
源电子邮件地址和目标电子邮件地址都已加密。
电子邮件的内容已加密。
当客户机发出STARTTLS 命令时,服务器将使用以下各项之一来响应:
220 Ready to start TLS
501 Syntax error (no parameters allowed)
454 TLS not available due to temporary reason
220 响应要求客户机启动TLS 协商。501 响应指明客户机未正确发出STARTTLS 命令。发出
STARTTLS 时未使用任何参数。454 响应需要客户机应用规则集值来确定是接受还是维护连
接。
请注意,要维护Internet 的SMTP 基础结构,公共使用的服务器决不能要求TLS 协商。但
是,专用服务器可能会要求客户机执行TLS 协商。在这类情况下,服务器会返回以下响应
:
530 Must issue a STARTTLS command first
530 响应会指示客户机发出STARTTLS 命令,以建立连接。
如果不满足身份验证和保密性的级别,服务器或客户机可以拒绝连接。同样,由于大多数
SMTP 连接都不安全,因此服务器和客户机可能会保留不安全的连接。保留还是拒绝连接由
服务器和客户机的配置来确定。
sendmail 版本8.13 中的更改
330 系统管理指南:网络服务• 2006 年8 月
缺省情况下,不支持在运行SMTP 时使用TLS。SMTP 客户机发出STARTTLS 命令时,将启用
TLS。必须先设置允许sendmail 使用TLS 的证书,然后SMTP 客户机才能发出此命令。请参
见第265 页中的“如何设置SMTP 以使用TLS”。请注意,此过程包括定义新的配置文件选
项和重新生成sendmail.cf 文件。
用于在运行SMTP时使用TLS 的配置文件选项
下表介绍了用于在运行SMTP 时使用TLS 的配置文件选项。如果要声明其中的任何选项,
请使用以下语法之一:
O OptionName=argument # for the configuration file
-O OptionName=argument # for the command line
define(‘m4Name’,argument) # for m4 configuration
表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
缺省值:未定义
用于标识包含属于客户机证书的私钥的文件。
sendmail 版本8.13 中的更改
第14 章• 邮件服务(参考) 331
表14–13 用于在运行SMTP时使用TLS 的配置文件选项(续)
选项说明
CRLFile m4 名称: confCRL
参数: filename
缺省值:未定义
用于标识包含证书撤销状态的文件,该文件用于X.509v3 身份验证。
DHParameters m4 名称: confDH_PARAMETERS
参数: filename
缺省值:未定义
用于标识包含Diffie-Hellman (DH) 参数的文件。
RandFile m4 名称: confRAND_FILE
参数:file:filename 或egd: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,必须定义以下选项:
CACertPath
CACertFile
ServerCertFile
sendmail 版本8.13 中的更改
332 系统管理指南:网络服务• 2006 年8 月
ClientKeyFile
不需要定义其他选项。
用于在运行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 错误。
SOFTWARE-STARTTLS 握手失败。
${server_name} 保存当前具有外出SMTP 连接的服务器的名称。
${server_addr} 保存当前具有外出SMTP 连接的服务器的地址。
用于在运行SMTP时使用TLS 的规则集
下表介绍了一些规则集,用于确定应接受、继续还是拒绝使用TLS 的SMTP 连接。
表14–15 用于在运行SMTP时使用TLS 的规则集
规则集说明
tls_server 用作客户机时,sendmail 使用此规则集来确定TLS 当前是否支持该服务器。
sendmail 版本8.13 中的更改
第14 章• 邮件服务(参考) 333
表14–15 用于在运行SMTP时使用TLS 的规则集(续)
规则集说明
tls_client 用作服务器时,sendmail 使用此规则集来确定TLS 当前是否支持该客户机。
tls_rcpt 此规则集要求验证收件人的MTA。此收件人限制可完全避免DNS 电子欺骗等攻
击。
TLS_connection 此规则集针对当前TLS 连接的实际参数检查由访问映射的RHS 指定的要求。
try_tls sendmail 使用此规则集来确定连接到其他MTA时使用STARTTLS 的可行性。如果
MTA不能正确实现STARTTLS,则不使用STARTTLS。
有关更多信息,请参见以下内容:
Sendmail Installation and Operation
Guide-
cf/README for sendmail-
与运行SMTP时使用TLS 相关的安全注意事项
作为用于定义在Internet 中运行的邮件程序的标准邮件协议,SMTP 不是一种端对端机制。
由于此协议限制,通过SMTP 的TLS 安全性不包括邮件用户代理。邮件用户代理用作用户
与邮件传输代理(如sendmail)之间的接口。
另外,邮件也可以在多台服务器之间路由。为了实现完整的SMTP 安全性,整个SMTP 连接
链必须具有TLS 支持。
最后,还必须考虑在每对服务器之间或客户机和服务器对之间的协商身份验证和保密性的
级别。有关更多信息,请参见《System Administration Guide: Security Services》中
的“Authentication Services”。
sendmail 版本8.13 中新增的命令行选项
下表介绍了在sendmail 版本8.13 中新增的可用命令行选项。sendmail(1M) 手册页介绍了其
他命令行选项。
表14–16 sendmail 版本8.13 中可用的命令行选项
选项说明
-D logfile 将调试输出发送至指明的logfile,而不是将此信息包括在标准输出中。
-q[!]Qsubstr 指定对包含此substr 的隔离作业的处理,前者是隔离reason 的子字符串。请参见-Qreason 选
项的说明。如果添加!,此选项将处理不包含此substr 的隔离作业。
sendmail 版本8.13 中的更改
334 系统管理指南:网络服务• 2006 年8 月
表14–16 sendmail 版本8.13 中可用的命令行选项(续)
选项说明
-Qreason 以此reason 隔离标准队列项。如果未给定reason,则隔离的队列项将取消隔离。此选项可与
-q[!]Qsubstr 选项结合使用。substr 是reason 的一部分(或子字符串)。
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 退出时还将断开文件的链接。
sendmail 版本8.13 中的更改
第14 章• 邮件服务(参考) 335
表14–17 sendmail 版本8.13 中可用的配置文件选项(续)
选项说明
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
如果设置postmilter,sendmail 将推迟同步队列文件,直到所有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。
sendmail 版本8.13 中的更改
336 系统管理指南:网络服务• 2006 年8 月
表14–18 sendmail 版本8.13 中可用的FEATURE() 声明(续)
FEATURE() 的名称说明
ratecontrol 与access_db 规则集结合使用,用于控制主机的连接速率。有关详细信息,请参见
/etc/mail/cf/README。
use_client_ptr 如果启用此FEATURE(),规则集check_relay 将使用参数$&{client_ptr} 覆盖其第一个参数。
sendmail 版本8.12 中的更改
本节介绍了有关以下主题的信息。
第337 页中的“sendmail 版本8.12 支持TCP 包装”
第338 页中的“sendmail 版本8.12 中的配置文件submit.cf”
第339 页中的“sendmail 版本8.12 中新增或过时的命令行选项”
第340 页中的“sendmail 版本8.12 中新增的用于PidFile 和ProcessTitlePrefix 选项的
参数”
第340 页中的“sendmail 版本8.12 中新增的已定义宏”
第341 页中的“sendmail 版本8.12 中新增的宏”
第342 页中的“sendmail 版本8.12 中新增的MAX 宏”
第342 页中的“sendmail 版本8.12 中新增和修订的m4 配置宏”
第343 页中的“sendmail 版本8.12 中对FEATURE() 声明的更改”
第346 页中的“sendmail 版本8.12 中对MAILER() 声明的更改”
第346 页中的“sendmail 版本8.12 中新增的传送代理标志”
第347 页中的“sendmail 版本8.12 中新增的用于传送代理的等式”
第347 页中的“sendmail 版本8.12 中新增的队列功能”
第348 页中的“sendmail 版本8.12 中对LDAP 的更改”
第349 页中的“sendmail 版本8.12 中对内置邮件程序的更改”
第349 页中的“sendmail 版本8.12 中新增的规则集”
第350 页中的“sendmail 版本8.12 中对文件的更改”
第351 页中的“sendmail 版本8.12 和配置中的IPv6 地址”
sendmail 版本8.12 支持TCP 包装
TCP 包装提供了一种实现访问权控制的方法,即根据访问控制列表(access control list, ACL)
检查请求特定网络服务的主机的地址。请求将相应地被授权或拒绝。除了提供此项访问控
制机制外,TCP 包装还会记录对网络服务的主机请求,这是一项有用的监视功能。可能受
到访问控制的网络服务示例包括rlogind、telnetd 和ftpd。
从版本8.12 开始,sendmail 将允许使用TCP 包装。此项检查不会忽略其他安全标准。通过
在sendmail 中启用TCP 包装,在准许请求之前将进行检查,以验证网络请求的来源。请参
见hosts_access(4) 手册页。
sendmail 版本8.12 中的更改
第14 章• 邮件服务(参考) 337
注– 从Solaris 9 发行版开始,inetd(1M) 和sshd(1M) 中将支持TCP 包装。
有关ACL的信息,请参见《System Administration Guide: Security Services》中的“Using Access
Control Lists to Protect Files”。
sendmail 版本8.12 中的配置文件submit.cf
从版本8.12 开始,sendmail 包括一个附加配置文件/etc/mail/submit.cf。此submit.cf 文
件用于在邮件提交程序模式而非守护进程模式下运行sendmail。与守护进程模式不同,邮
件提交程序模式不要求root 权限,因此这一新模式可以提供更好的安全性。
请参见以下列出的submit.cf 功能:
sendmail 使用submit.cf 在邮件提交程序(mail-submission program, MSP) 模式下运行,
该模式可提交电子邮件并可由程序(如mailx)以及用户启动。请参阅sendmail(1M) 手
册页中有关-Ac 选项和-Am 选项的说明。
submit.cf 可用于以下操作模式中:
-bm,此为缺省操作模式
-bs,它使用标准输入来运行SMTP
-bt,此为用于解析地址的测试模式
sendmail 在使用submit.cf 时不会作为SMTP 守护进程运行。
sendmail,它使用submit.cf 时将使用仅客户机邮件队列/var/spool/clientmqueue,该
队列中保存未传送至sendmail 守护进程的邮件。仅客户机队列中的邮件由客户机“守护
进程”来传送,该守护进程实际用作客户机队列运行程序。
缺省情况下,sendmail 会定期使用submit.cf 来运行MSP 队列(也称为仅客户机队列)
/var/spool/clientmqueue。
/usr/lib/sendmail -Ac -q15m
请注意以下情况:
从Solaris 9 发行版开始,将自动提供submit.cf。
安装Solaris 9 发行版或更新发行版之前,submit.cf 不要求执行任何规划或预备过程。
除非指定配置文件,否则sendmail 将根据需要自动使用submit.cf。基本上,sendmail
知道哪些任务适合submit.cf,哪些任务适合sendmail.cf。
submit.cf 将不会进行修改。
可区分sendmail.cf 与submit.cf 的功能
sendmail.cf 配置文件用于守护进程模式。使用此文件时,sendmail 用作邮件传输代理
(mail transfer agent,MTA),该代理由root 启动。
/usr/lib/sendmail -L sm-mta -bd -q1h
sendmail 版本8.12 中的更改
338 系统管理指南:网络服务• 2006 年8 月
请参见以下列出的sendmail.cf 的其他特性:
缺省情况下,sendmail.cf 在端口25 和587 上接受SMTP 连接。
缺省情况下,sendmail.cf 会运行主队列/var/spool/mqueue。
sendmail 版本8.12 中功能的更改
除添加submit.cf 之外,在功能方面还有以下更改:
从sendmail 版本8.12 开始,仅有root 可以运行邮件队列。有关更多详细信息,请参阅
mailq(1) 手册页中介绍的更改。有关新任务的信息,请参阅第285 页中的“管理队列目
录(任务列表)”。
邮件提交程序模式运行时无需root 权限,这可能会导致sendmail 无法访问某些文件
(例如.forward 文件)。因此,sendmail 的-bv 选项为用户提供的输出可能具有误导
性。没有切实可行的解决方法。
在sendmail 版本8.12 之前,如果不在守护进程模式下运行sendmail,则只会阻止传入邮
件的传送。从sendmail 版本8.12 开始,如果不使用缺省配置运行sendmail 守护进程,
则还会阻止外发邮件的传送。客户机队列运行程序(又称为邮件提交程序)必须能够将
邮件提交至本地SMTP 端口上的守护进程。如果客户机队列运行程序尝试打开与本地主
机的SMTP 会话,并且守护进程未侦听SMTP 端口,则邮件将保留在队列中。缺省配置
确实会运行守护进程,因此使用缺省配置时不会出现此问题。但是,如果已禁用守护进
程,请参阅第273 页中的“使用备用配置管理邮件传送”以寻找解决此问题的方法。
sendmail 版本8.12 中新增或过时的命令行选项
下表介绍了sendmail 的新增或过时的命令行选项。sendmail(1M) 手册页介绍了其他命令行
选项。
表14–19 sendmail 版本8.12 中新增或过时的命令行选项
选项说明
-Ac 表示即使操作模式未指明初始邮件提交,仍希望使用配置文件submit.cf。有关submit.cf 的更多信
息,请参阅第338 页中的“sendmail 版本8.12 中的配置文件submit.cf”。
-Am 表示即使操作模式指明初始邮件提交,仍希望使用配置文件sendmail.cf。有关更多信息,请参阅
第338 页中的“sendmail 版本8.12 中的配置文件submit.cf”。
-bP 表示要列显每个队列中的项数。
-G 表示通过命令行提交的邮件将用于中继,而不用于初始提交。如果地址不是全限定地址,则会拒绝
该邮件。不会进行公理化。如 上的sendmail 分发所包含的发行说明所
述,将来的发行版中可能会拒绝形式不正确的邮件。
-L tag 将用于系统日志消息的标识符设置为所提供的tag。
sendmail 版本8.12 中的更改
第14 章• 邮件服务(参考) 339
表14–19 sendmail 版本8.12 中新增或过时的命令行选项(续)
选项说明
-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 如 上的sendmail 分发所包含的发行说明所述,在版本8.12 之前不提供此选
项。邮件用户代理应使用-G 参数。
sendmail 版本8.12 中新增的用于PidFile 和
ProcessTitlePrefix 选项的参数
下表介绍了新增的用于PidFile 和ProcessTitlePrefix 选项的宏处理参数。有关这些选项的
更多信息,请参见sendmail(1M) 手册页。
表14–20 用于PidFile 和ProcessTitlePrefix 选项的参数
宏说明
${daemon_addr} 用于提供守护进程地址(例如0.0.0.0)
${daemon_family} 用于提供守护进程系列(例如inet 和inet6)
${daemon_info} 用于提供守护进程信息(例如)
${daemon_name} 用于提供守护进程名称(例如MSA)
${daemon_port} 用于提供守护进程端口(例如25)
${queue_interval} 用于提供队列运行间隔(例如00:30:00)
sendmail 版本8.12 中新增的已定义宏
下表介绍了新增的、保留以供sendmail 程序使用的宏。这些宏的值在内部指定。有关更多
信息,请参见sendmail(1M) 手册页。
sendmail 版本8.12 中的更改
340 系统管理指南:网络服务• 2006 年8 月
表14–21 sendmail 新增的已定义宏
宏说明
${addr_type} 用于将当前地址标识为信封发件人地址或收件人
地址。
${client_resolve} 用于保存${client_name} 的解析调用结果:OK、
FAIL、FORGED 或TEMP。
${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}
用于保存RCPT 和MAIL 参数的分析结果,这是从
邮件传送代理($#mailer)、主机() 和用户
($:addr) 中解析出的右侧(right-hand side, RHS) 三
重参数。
sendmail 版本8.12 中新增的宏
本节中的表介绍了新增的用于生成sendmail 配置文件的宏。
sendmail 版本8.12 中的更改
第14 章• 邮件服务(参考) 341
表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 NOOP、VERB、ONEX、XUSR
MAXHELOCOMMANDS 3 HELO、EHLO
MAXVRFYCOMMANDS 6 VRFY、EXPN
MAXETRNCOMMANDS 8 ETRN
注– 通过将宏的值设置为零可以禁用宏检查。
sendmail 版本8.12 中新增和修订的m4 配置宏
本节中的表介绍了sendmail 中新增和修订的m4 配置宏。可使用以下语法来声明这些宏。
symbolic_name(‘value’)
如果需要生成新的sendmail.cf 文件,请参阅第13 章中的第264 页中的“生成sendmail.cf
配置文件”。
sendmail 版本8.12 中的更改
342 系统管理指南:网络服务• 2006 年8 月
表14–24 sendmail 中新增和修订的m4 配置宏
m4宏说明
FEATURE() 有关详细信息,请参阅第343 页中的“sendmail 版本8.12 中
对FEATURE() 声明的更改”。
LOCAL_DOMAIN() 此宏可向类w ($=w) 中添加项。
MASQUERADE_EXCEPTION() 用于定义不能伪装的主机或子域的新宏。
SMART_HOST() 现在,此宏可用于用括号括起来的地址,如]。
VIRTUSER_DOMAIN() 或
VIRTUSER_DOMAIN_FILE()
使用这些宏时,请在$=R 中包括$={VirtHost}。请记住,$=R
是可以中继的主机名集合。
sendmail 版本8.12 中对FEATURE() 声明的更改
有关对FEATURE() 声明的特定更改信息,请参阅下表。
要使用新增和修订的FEATURE 名称,请使用以下语法。
FEATURE(‘name’, ‘argument’)
如果需要生成新的sendmail.cf 文件,请参阅第13 章中的第264 页中的“生成sendmail.cf
配置文件”。
表14–25 新增和修订的FEATURE() 声明
FEATURE() 的名称说明
compat_check 参数:请参阅以下段落中的示例。
使用此新增的FEATURE(),可以在由发件人地址和收件人地址组成的访问映
射中查找关键字。此FEATURE() 由字符串<@> 来分隔。例如
。
delay_checks 参数:friend(用于启用垃圾邮件-朋友测试)或hater(用于启用垃圾邮
件-攻击者测试)。
可延迟所有检查的新增FEATURE()。通过使用FEATURE(‘delay_checks’),在
客户机分别连接或发出MAIL 命令时,将不调用规则集check_mail 和
check_relay, 而是由check_rcpt 规则集调用上述规则集。有关详细信息,
请参阅/etc/mail/cf/README 文件。
dnsbl 参数:此FEATURE() 最多可以接受两个参数:
DNS 服务器名
拒绝邮件
新增的FEATURE(),可以多次使用以检查DNS 查找的返回值。请注意,通过
此FEATURE() 可以指定临时查找失败时的行为。
sendmail 版本8.12 中的更改
第14 章• 邮件服务(参考) 343
表14–25 新增和修订的FEATURE() 声明(续)
FEATURE() 的名称说明
enhdnsbl 参数:域名。
新增的FEATURE(),它是dnsbl 的增强版本,可用于检查DNS 查找的返回
值。有关更多信息,请参阅/etc/mail/cf/README。
generics_entire_domain 参数:None。
新增的FEATURE(),使用它还可以将genericstable 应用于$=G 的子域。
ldap_routing 参数:有关详细信息,请参阅 中的“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_DOMAIN 或CANONIFY_DOMAIN_FILE 指定的一系列域传递给$[ 和$]
运算符进行公理化。
如果将canonify_hosts 指定为其参数,则可以对仅包含主机名的地址(如
<>)进行公理化。
向包含多个组成部分的地址添加尾随句点。
no_default_msa 参数:无。
这一新增的FEATURE() 可禁用m4 生成的配置文件中sendmail 的缺省设置,
以“侦听”多个不同端口,这是RFC 2476 的实现。
nouucp 参数:reject(不允许使用! 标记)或nospecial(允许使用! 标记)。
该FEATURE() 可确定是否允许在地址的本地部分中使用! 标记。
nullclient 参数:无。
该FEATURE() 现在可提供标准配置的完整规则集,从而允许执行防垃圾邮件
检查。
sendmail 版本8.12 中的更改
344 系统管理指南:网络服务• 2006 年8 月
表14–25 新增和修订的FEATURE() 声明(续)
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_DOMAIN 或VIRTUSER_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’)。$S 是sendmail.cf 中的SMART_HOST 值。
sun_reverse_alias_files FEATURE(‘genericstable’)。
sun_reverse_alias_nis FEATURE(‘genericstable’)。
sun_reverse_alias_nisplus FEATURE(‘genericstable’)。
sendmail 版本8.12 中的更改
第14 章• 邮件服务(参考) 345
sendmail 版本8.12 中对MAILER() 声明的更改
MAILER() 声明可指定对传送代理的支持。要声明传送代理,请使用以下语法。
MAILER(‘symbolic_name’)
请注意以下更改。
在此新版本的sendmail 中,MAILER(‘smtp’) 声明现在包括一个附加邮件程序dsmtp,该
邮件程序通过使用F=% 邮件程序标志可提供即时传送。dsmtp 邮件程序定义使用新增的
DSMTP_MAILER_ARGS,后者缺省为IPC $h。
MAILER 使用的规则集的数量已删除。现在无需按顺序列出MAILER,但MAILER(‘uucp’)
除外。如果使用了uucp-dom 和uucp-uudom,则它必须在MAILER(‘smtp’) 之后。
有关邮件程序的更多信息,请参阅第303 页中的“邮件程序与sendmail”。如果需要生成
新的sendmail.cf 文件,请参阅第13 章中的第264 页中的“生成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 中的更改
346 系统管理指南:网络服务• 2006 年8 月
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 章中的第264 页中的“生成sendmail.cf
配置文件”。
注– 通常,仅当进行微调时,才会修改mailer 目录中的等式定义。
表14–28用于传送代理的新增等式
等式说明
/= 参数:目录的路径。
用于指定执行邮件程序之前要应用chroot() 的目录。
m= 参数:以前使用define() 例程定义的以下任意m4 值
SMTP_MAILER_MAXMSGS,用于smtp 邮件程序
LOCAL_MAILER_MAXMSGS,用于local 邮件程序
RELAY_MAILER_MAXMSGS,用于relay 邮件程序
用于限制smtp、local 或relay 邮件程序每次连接时传送的邮件数量
W= 参数:时间增量
用于指定在发送所有数据后等待邮件程序返回的最长时间
sendmail 版本8.12 中新增的队列功能
以下列表提供了有关新增队列功能的详细信息。
此发行版可支持多个队列目录。要使用多个队列,请在配置文件中提供以星号(*) 结尾
的QueueDirectory 选项值,如以下示例所示。
sendmail 版本8.12 中的更改
第14 章• 邮件服务(参考) 347
O QueueDirectory=/var/spool/mqueue/q*
选项值/var/spool/mqueue/q* 使用以“q” 开头的所有目录(或指向这些目录的符号链
接)作为队列目录。请勿在sendmail 运行时更改队列目录结构。除非在非守护进程队
列运行中使用冗余标志(-v),否则队列运行会创建一个单独进程来运行每个队列。新项
将随机指定给队列。
新增的队列文件命名系统使用的文件名保证在60 年内唯一。使用此系统,可在不使用
复杂的文件系统锁定的情况下指定队列ID,并简化排队的项在队列之间的移动。
从版本8.12 开始,仅有root 才能运行邮件队列。有关更多详细信息,请参阅mailq(1) 手
册页中介绍的更改。有关新任务的信息,请参阅第285 页中的“管理队列目录(任务列
表)”。
为适应信封拆分,现在队列文件名长度为15 个字符,而不是14 个字符。将不再支持名
称限制为14 个字符的文件系统。
有关任务信息,请参阅第285 页中的“管理队列目录(任务列表)”。
sendmail 版本8.12 中对LDAP的更改
以下列表介绍了在将轻量目录访问协议(Lightweight Directory Access Protocol, LDAP) 用于
sendmail 时的一些更改。
LDAPROUTE_EQUIVALENT() 和LDAPROUTE_EQUIVALENT_FILE() 允许指定等效的主机名,这些
主机名将替换为用于LDAP 路由查找的伪装域名。有关更多信息,请参阅
/etc/mail/cf/README。
如 上的分发所包含的发行说明所述,LDAPX 映射已重命名为
LDAP。请针对LDAP 使用以下语法。
Kldap ldap options
此发行版支持一次LDAP 查找返回多个值。请使用-v 选项将要返回的值放入用逗号分
隔的字符串中,如下所示。
Kldap ldap -v"mail,more_mail"
如果LDAP 映射声明中未指定任何LDAP 属性,则会返回找到的所有匹配属性。
此版本的sendmail 可防止使用LDAP 别名文件规范中带引号的关键字和值字符串内的逗
号来将单个项划分为多个项。
此版本的sendmail 为LDAP 映射提供了一个新选项。使用选项-Vseparator,可指定一个
分隔符,这样查找便可返回由相关的separator 分隔的属性和值。
除了使用%s 标记分析LDAP 过滤器规范外,还可以使用新标记%0 对关键字缓冲区进行
编码。%0 标记会对LDAP 特殊字符应用字面含义。
以下示例显示了这些标记在用于“*” 查找时的差异。
sendmail 版本8.12 中的更改
348 系统管理指南:网络服务• 2006 年8 月
表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], :|, 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 中新增的规则集
下表列出了新增规则集并介绍了这些规则集的功能。
sendmail 版本8.12 中的更改
第14 章• 邮件服务(参考) 349
表14–32新规则集
集说明
check_eoh 将在头之间收集的信息关联并检查是否缺少头。此规则集用于宏存储映
射,并在收集所有头后调用。
check_etrn 使用ETRN 命令(与check_rcpt 使用RCPT 类似)。
check_expn 使用EXPN 命令(与check_rcpt 使用RCPT 类似)。
check_vrfy 使用VRFY 命令(与check_rcpt 使用RCPT 类似)。
以下列表介绍了新增的规则集功能。
编号的规则集也已命名,但仍然可以按编号访问相应的规则集。
H 头配置文件命令允许为头检查指定缺省的规则集。仅当未对个别头指定各自的规则集
时,才会调用此规则集。
如果配置文件的版本为9 或更高版本,则不删除规则集中的注释(即括号内的文本)。
例如,以下规则可匹配输入token (1),但不匹配输入token。
R$+ (1) $@ 1
sendmail 即使由于TCP 包装或check_relay 规则集而拒绝命令,也会接受SMTP RSET 命
令。
如果多次设置OperatorChars 选项,则会收到警告。另外,请勿在定义规则集之后设置
OperatorChars。
如果声明的规则集无效,则会忽略该规则集的名称以及其中的各行。该规则集行不会添
加至S0。
sendmail 版本8.12 中对文件的更改
请注意以下更改。
从Solaris 10 发行版开始,为了支持只读的/usr 文件系统,/usr/lib/mail 目录的内容已
移至/etc/mail/cf 目录。有关详细信息,请参阅第313 页中的“/etc/mail/cf 目录的内
容”。但请注意,shell 脚本/usr/lib/mail/sh/check-hostname 和
/usr/lib/mail/sh/check-permissions 现在位于/usr/sbin 目录中。请参见第315 页中的
“用于邮件服务的其他文件”。为了实现向下兼容,符号链接指向每个文件的新位置。
/usr/lib/mail/cf/main-v7sun.mc 的新名称是/etc/mail/cf/cf/main.mc。
/usr/lib/mail/cf/subsidiary-v7sun.mc 的新名称是/etc/mail/cf/cf/subsidiary.mc。
helpfile 现在位于/etc/mail/helpfile 中。旧名称(/etc/mail/sendmail.hf) 具有指向新
名称的符号链接。
trusted-users 文件现在位于/etc/mail/trusted-users 中。在升级过程中,如果检测到
旧名称(/etc/mail/sendmail.ct) 而未检测到新名称,则会创建从旧名称到新名称的硬链
接。否则,不会进行任何更改。缺省内容为root。
sendmail 版本8.12 中的更改
350 系统管理指南:网络服务• 2006 年8 月
local-host-names 文件现在位于/etc/mail/local-host-names 中。在升级过程中,如果
检测到旧名称(/etc/mail/sendmail.cw) 而未检测到新名称,则会创建从旧名称到新名称
的硬链接。否则,不会进行任何更改。缺省内容的长度为零。
sendmail 版本8.12 和配置中的IPv6 地址
从8.12 版本的sendmail 开始,在配置中使用的IPv6 地址应以IPv6: 标记作为前缀,以正确
标识地址。如果不标识IPv6 地址,则不会使用前缀标记。
sendmail 版本8.12 中的更改
第14 章• 邮件服务(参考) 351
352
串行网络主题
本节主要讲述串行网络,其中提供了有关PPP 和UUCP的概述、任务和参考信息。
第5 部分
353
354
Solaris PPP 4.0(概述)
本节介绍串行联网主题。串行联网是指使用串行接口(如RS-232 或V.35 端口)连接两台或
更多计算机,以便进行数据传送。与LAN 接口(如以太网)不同,这些串行接口用于连接
相距很远的系统。PPP(Point-to-Point Protocol,点对点协议)和UUCP(UNIX-to-UNIX
CoPy,UNIX 对UNIX 复制)是可用于实现串行联网的独特技术。为联网配置串行接口之
后,多个用户可以按照几乎与使用任何其他网络接口(如以太网)相同的方法使用该接
口。
本章介绍Solaris PPP 4.0。利用此版本的PPP,可以使位于不同物理位置的两台计算机能够
在多种介质上使用PPP 来相互通信。从Solaris 9 发行版开始,Solaris PPP 4.0 将作为基本安
装的一部分。
本章将讨论以下主题:
第355 页中的“Solaris PPP 4.0 基础”
第358 页中的“PPP 配置和术语”
第363 页中的“PPP 验证”
第365 页中的“通过PPPoE 支持DSL用户”
Solaris PPP4.0 基础
Solaris PPP 4.0 实现点对点协议(Point-to-Point Protocol, PPP),此协议为数据链路协议,是
TCP/IP 协议集的成员之一。PPP 说明通过通信介质(如电话线路)在两台端点计算机之间
传输数据的方式。
自20 世纪90 年代初以来,PPP 已广泛用作通过通信链路发送数据报的Internet 标准。PPP
标准由Internet 工程任务组(Internet Engineering Task Force, IETF) 的点对点工作组在RFC
1661 中说明。当远程计算机呼叫配置用于接收传入呼叫的Internet 服务提供商(Internet
service provider, ISP) 或公司服务器时,通常使用PPP。
Solaris PPP 4.0 基于公开的澳大利亚国立大学(Australian National University,ANU) PPP–2.4 并
实现PPP 标准。支持异步和同步PPP 链路。
15 第1 5 章
355
Solaris PPP4.0 兼容性
在整个Internet 社区中可以获取各种版本的标准PPP,并且正在广泛使用这些版本。ANU
PPP-2.4 广泛用于Linux、Tru64 UNIX,以及BSD 的三种最主要变体:
FreeBSD
OpenBSD
NetBSD
Solaris PPP 4.0 为运行Solaris 操作系统的计算机带来了ANU PPP-2.4 的高可配置特性。在运
行Solaris PPP 4.0 的计算机上可以轻易地设置连接到任何运行标准PPP 实现的计算机的PPP
链路。
不基于ANU 但却能成功地与Solaris PPP 4.0 进行交互操作的PPP 实现包括:
Solaris PPP,也称为asppp,在Solaris 2.4 到Solaris 8 发行版中可用
SolsticeTM PPP 3.0.1
MicrosoftWindows 98DUN
Cisco IOS 12.0(同步)
要使用的Solaris PPP版本
从Solaris 9 发行版开始,Solaris PPP 4.0 是受支持的PPP 实现。Solaris 9 发行版和Solaris 10 发
行版不包括早期的异步Solaris PPP (asppp) 软件。有关更多信息,请参阅以下内容:
第23 章
位于 上的Solaris 8 System Administrator Collection
为什么使用Solaris PPP4.0?
如果您当前使用的是asppp,可以考虑迁移到Solaris PPP 4.0。请注意这两种Solaris PPP 技术
之间的以下差别:
传送模式
asppp 仅支持异步通信。Solaris PPP 4.0 支持异步通信和同步通信。
配置过程
设置asppp 需要对asppp.cf 配置文件、三个UUCP文件和ifconfig 命令进行配置。此
外,必须为可能登录到计算机的所有用户预先配置接口。
设置Solaris PPP 4.0 需要为PPP 配置文件定义选项,或发出带选项的pppd 命令。您也可
以将配置文件和命令行方法结合使用。Solaris PPP 可动态创建和删除接口。不需要为每
个用户直接配置PPP 接口。
asppp 中无法提供的Solaris PPP 4.0 功能
MS-CHAPv1 和MS-CHAPv2 验证
基于以太网的PPP (PPP over Ethernet, PPPoE),用于支持ADSL网桥
PAM验证
Solaris PPP 4.0 基础
356 系统管理指南:网络服务• 2006 年8 月
插件模块
IPv6 寻址
使用Deflate 或BSD 压缩方法进行的数据压缩
Microsoft 客户端回叫支持
Solaris PPP4.0 升级路径
如果要将现有asppp 配置转换为Solaris PPP 4.0,可以使用此发行版附带的转换脚本。有关
完整说明,请参阅第490 页中的“如何从asppp 转换为Solaris PPP 4.0”。
其他可获取更多PPP信息的渠道
可利用印刷材料和联机文档等多种资源获取更多有关PPP 的信息。以下几个小节给出了一
些建议。
有关PPP的专业参考书籍
有关广泛使用的PPP 实现(包括ANU PPP)的更多信息,请参阅以下书籍:
由Carlson, James 编著的《PPP Design, Implementation, and Debugging》,第2 版。
Addison-Wesley 出版,2000。
由Sun, Andrew 编著的《Using and Managing PPP》。O’Reilly &Associates 出版,1999。
有关PPP的Web 站点
要获取有关PPP 的常规信息,请访问以下Web 站点:
有关ANU PPP 的信息,请访问澳大利亚公立大学的PPP 系统信息库,网址为
。
有关Solaris 系统管理和PPP 早期版本的技术信息、常见问题解答和讨论,请访问Sun
Microsystems 的系统管理员资源,网址为
。
有关许多不同PPP 实现的调制解调器配置和建议,请参阅Stokely Consulting 的Web 项目
管理与软件开发Web 站点
:。
有关PPP的请求注解文档(Requests for Comments, RFC)
有关PPP 的一些有用的Internet RFC 包括:
1661 和1662,说明PPP 的主要功能
1334,说明验证协议(如口令验证协议(Password Authentication Protocol, PAP) 和质询握
手身份验证协议(Challenge-Handshake Authentication Protocol, CHAP))
1332,说明基于以太网的PPP (PPP over Ethernet, PPPoE) 的信息性RFC
要获取PPP RFC 的副本,请在 的IETF RFCWeb 页上指定RFC 的
编号。
阅读(2291) | 评论(0) | 转发(0) |