本节提供有关邮件服务的概述、任务和参考信息。
设置和维护电子邮件服务涉及对日常网络操作而言非常重要的复杂任务。作为网络管理员,您可能需要扩展现有的邮件服务。或者,您可能需要在新的网络或子网中设置邮件服务。有关邮件服务的各章节可帮助您规划和设置网络的邮件服务。本章提供了指向 sendmail 中新功能的说明的链接,及其他信息源的列表。本章还将概述建立邮件服务所需的软件和硬件组件。
有关如何设置和管理邮件服务的过程信息,请参见第 13 章,邮件服务(任务)。有关详细信息,请参阅邮件服务任务列表。
有关邮件服务组件的更详细说明,请参见第 14 章,邮件服务(参考)。本章还将介绍邮件服务程序和文件、邮件路由过程、sendmail 与名称服务的交互,以及 sendmail 8.13 版的功能。请参见sendmail 版本 8.13 中的更改。
本节介绍有关 Solaris 10 发行版和 Solaris 10 1/06 发行版中新功能的信息。
从 Solaris 10 1/06 发行版开始,sendmail 支持使用传输层安全性 (Transport Layer Security, TLS) 的 SMTP。有关更多信息,请参见以下内容:
有关 Solaris 10 1/06 发行版中功能的完整列表,请参见 《Solaris 10 新增功能》。
从 Solaris 10 发行版开始,sendmail 的缺省版本为 8.13 版。有关 8.13 版和其他变化的信息,请参见以下内容:
另外,邮件服务由服务管理工具管理。可以使用 svcadm 命令对此服务执行启用、禁用或重新启动等管理操作。可以使用 svcs 命令查询该服务的状态。有关服务管理工具的更多信息,请参见 smf(5) 手册页和《系统管理指南:基本管理》中的第 14 章 “管理服务(概述)”。
以下是有关 sendmail 的其他信息源的列表。
由 Costales, Bryan 编著的《sendmail, Third Edition》。O'Reilly & Associates, Inc. 出版,2002。
sendmail 主页-http://www.sendmail.org。
sendmail 常见问题解答-http://www.sendmail.org/faq。
新 sendmail 配置文件的自述文件-http://www.sendmail.org/m4/readme.html。
与迁移到最新版本的 sendmail 有关的问题指南-http://www.sendmail.org/vendor/sun/。
建立邮件服务需要许多软件和硬件组件。以下各节对这些组件进行了简要介绍。这些节中还提供了用于说明这些组件的一些术语。
第一节软件组件概述定义了在讨论邮件传送系统的软件部分时使用的术语。下一节硬件组件概述集中介绍邮件配置中硬件系统的功能。
下表介绍了邮件系统的一些软件组件。有关所有软件组件的完整说明,请参阅软件组件。
组件 |
说明 |
---|---|
.forward 文件 |
可以在用户的起始目录中设置以重定向邮件,或将邮件自动发送到程序的文件 |
邮箱 |
邮件服务器(电子邮件的最终目标)上的文件 |
邮件地址 |
包含收件人姓名和邮件将传送到的系统的地址 |
邮件别名 |
邮件地址中使用的备选名称 |
邮件队列 |
需要邮件服务器处理的邮件的集合 |
邮寄主管 |
用于报告问题和询问有关邮件服务问题的特殊邮件别名 |
sendmail 配置文件 |
包含邮件路由需要的所有信息的文件 |
邮件配置需要以下三种元素,您可以在同一系统中合并这三者,也可以在不同的系统中提供。
邮件主机-被配置为用于处理难以解析的电子邮件地址的系统
最少一个邮件服务器-被配置为用于保存一个或多个邮箱的系统
邮件客户机-访问邮件服务器中邮件的系统
如果用户要与所在域之外的网络通信,则还必须添加第四种元素,邮件网关。
图 12–1 说明了一种典型的电子邮件配置,该配置使用三种基本邮件元素和一个邮件网关。
硬件组件中将详细介绍每一元素。
本章介绍如何设置和管理邮件服务。如果您不熟悉邮件服务管理,请阅读第 12 章,邮件服务(概述),以了解有关邮件服务组件的介绍。本章还将介绍典型的邮件服务配置,如图 12–1 中所示。通过以下列表,可以帮助您查找本章中涵盖的多组相关过程。
有关邮件服务组件的更详细说明,请参见第 14 章,邮件服务(参考)。此外,本章还将介绍邮件服务程序和文件、邮件路由进程、sendmail 与名称服务的交互,以及 sendmail(1M) 手册页中未全面介绍的 sendmail 8.13 版功能。
任务 |
说明 |
参考 |
---|---|---|
设置邮件服务 |
使用这些过程可设置邮件服务的各个组件。了解如何设置邮件服务器、邮件客户机、邮件主机、邮件网关和虚拟主机。了解如何使用 DNS 和 sendmail。 | |
生成 sendmail 配置文件 |
使用此过程可修改 sendmail.cf 文件。请参见如何启用域伪装的示例。 | |
设置 SMTP 以使用传输层安全性 (Transport Layer Security, TLS) |
使用此过程可启用 SMTP,以通过 TLS 建立安全连接。 | |
使用备用配置管理邮件传送 |
使用此过程可防止在禁用主守护进程时发生邮件传送问题。 | |
管理邮件别名文件 |
使用这些过程通过网络提供别名。了解如何管理 NIS+ 表中的项。另外,了解如何设置 NIS 映射、本地邮件别名、加密的映射文件以及邮寄主管的别名。 | |
管理邮件队列 |
使用这些过程可顺利进行队列处理。了解如何显示和移动邮件队列、强制进行邮件队列处理以及运行邮件队列的子集。另外,了解如何运行旧邮件队列。 | |
管理 .forward 文件 |
使用这些过程可禁用 .forward 文件或更改 .forward 文件的搜索路径。另外,还可了解如何通过创建和填充 /etc/shells,允许用户使用 .forward 文件。 | |
邮件服务疑难解答过程和技巧 |
使用这些过程和技巧可解决邮件服务问题。了解如何测试邮件配置、检查邮件别名、测试 sendmail 规则集、验证与其他系统的连接以及记录消息。另外,了解在何处查找其他邮件诊断信息。 | |
解析错误消息 |
使用本节中的信息可解析一些与邮件相关的错误消息。 |
确定符合要求的邮件配置类型。本节介绍了两种基本类型的邮件配置,并简要列出了设置每种配置所需的信息。如果您需要设置一个新邮件系统或扩展现有系统,则可能会发现本节信息很有帮助。仅本地邮件介绍了第一种配置类型,本地邮件和远程连接介绍了第二种配置类型。
根据需要,选择将充当邮件服务器、邮件主机和邮件网关的系统。
列出要为其提供服务的所有邮件客户机,并包含它们的邮箱位置。当您准备为用户创建邮件别名时,此列表可以提供帮助。
确定如何更新别名和转发邮件。您可以设置一个 aliases 邮箱,作为用户发送邮件转发请求的位置。此外,用户还可以使用此邮箱来发送更改其缺省邮件别名的请求。如果系统使用的是 NIS 或 NIS+,则可以管理邮件转发,而不需要用户来管理邮件转发。管理邮件别名文件(任务列表)中列出了与别名相关的任务。管理 .forward 文件(任务列表)中列出了与管理 .forward 文件有关的任务。
完成该规划过程后,请在站点中对系统进行设置,以执行设置邮件服务(任务列表)中描述的各种功能。有关其他任务信息,请参阅邮件服务任务列表。
如图 13–1 中所示,最简单的邮件配置是将两个或多个工作站连接到一台邮件主机。邮件完全是本地的。所有客户机均在其本地磁盘中存储邮件,并且由客户机充当邮件服务器。邮件地址使用 /etc/mail/aliases 文件进行解析。
要设置此类邮件配置,您需要满足以下条件:
指定一台服务器为邮件主机。如果运行的是 NIS 或 NIS+,则可通过为邮件主机中的 /etc/hosts 文件添加 mailhost.domain_name 来进行指定。如果运行的是其他名称服务(如 DNS 或 LDAP),则必须在 /etc/hosts 文件中提供其他信息。请参见如何设置邮件主机。
如果使用的是 NIS 或 NIS+ 以外的名称服务,则需要匹配具有本地邮箱的任何系统上的 /etc/mail/aliases 文件。
每个邮件客户机系统的 /var/mail 需要具有足够的空间来存储邮箱。
有关设置邮件服务的任务信息,请参阅设置邮件服务。如果要查找与邮件服务设置相关的特定过程,请参阅设置邮件服务(任务列表)。
在小型网络中,最常见的邮件配置如图 13–2 所示。在此配置中,一个系统包含邮件服务器、邮件主机和提供远程连接的邮件网关。邮件通过使用邮件网关中的 /etc/mail/aliases 文件进行分发。无需使用名称服务。
在此配置中,可以假定邮件客户机从邮件主机中的 /var/mail 挂载其邮件文件。要设置此类邮件配置,您需要满足以下条件:
在每个邮件客户机系统上提供缺省的 /etc/mail/sendmail.cf 文件。此文件无需进行任何编辑。
指定一台服务器为邮件主机。如果运行的是 NIS 或 NIS+,则可通过为邮件主机中的 /etc/hosts 文件添加 mailhost.domain_name 来进行指定。如果运行的是其他名称服务(如 DNS 或 LDAP),则必须在 /etc/hosts 文件中提供其他信息。请参见如何设置邮件主机。
如果使用的是 NIS 或 NIS+ 以外的名称服务,则需要匹配具有本地邮箱的任何系统上的 /etc/mail/aliases 文件。
邮件服务器的 /var/mail 需要具有足够的空间来存储客户机邮箱。
有关设置邮件服务的任务信息,请参阅设置邮件服务。如果要查找与邮件服务设置相关的特定过程,请参阅设置邮件服务(任务列表)。
任务 |
说明 |
参考 |
---|---|---|
设置邮件服务器 |
用于启用服务器以路由邮件的步骤 | |
设置邮件客户机 |
用于使用户接收邮件的步骤 | |
设置邮件主机 |
用于建立可解析电子邮件地址的邮件主机的步骤 | |
设置邮件网关 |
用于管理与域外部网络之间的通信的步骤 | |
使用 DNS 和 sendmail |
用于启用 DNS 主机查找的步骤 | |
设置虚拟主机 |
用于为主机指定多个 IP 地址的步骤 |
如果站点不提供与公司外部的电子邮件服务的连接,或者公司位于单个域中,则您可以轻松设置邮件服务。
对于本地邮件,邮件需要两种类型的配置。有关这些配置的说明,请参阅仅本地邮件中的图 13–1。对于与域外部网络之间的通信,邮件需要两种以上的配置。有关这些配置的说明,请参阅硬件组件概述中的图 12–1,或本地邮件和远程连接中的图 13–2。可以在同一系统上合并这些配置,也可以在不同系统上提供这些配置。例如,如果邮件主机和邮件服务器功能位于同一系统上,请按照本节中的指示将该系统设置为邮件主机。然后,按照本节中的指示将同一系统设置为邮件服务器。
以下用于设置邮件服务器和邮件客户机的过程在邮箱挂载了 NFS 的情况下适用。但是,邮箱通常保存在本地挂载的 /var/mail 目录中,因此无需执行以下过程。
请参阅以下内容:
设置仅为本地用户提供邮件服务的邮件服务器时,无需采取任何特殊步骤。在口令文件或名称空间中,必须包含用户项。另外,对于要传送的邮件,用户应具有用于检查 ~/.forward 文件的本地起始目录。为此,通常会将起始目录服务器设置为邮件服务器。有关邮件服务器的更多信息,请参阅第 14 章,邮件服务(参考)中的硬件组件。
该邮件服务器可以路由许多邮件客户机的邮件。此类型的邮件服务器必须为客户机邮箱提供足够的假脱机空间。
首次传送消息时,mail.local 程序会自动在 /var/mail 目录中创建邮箱。因此,无需为邮件客户机创建单独的邮箱。
对于访问其邮箱的客户机,/var/mail 目录应可用于远程挂载。或者,可使用该服务器提供的邮局协议 (Post Office Protocol, POP) 或 Internet 消息访问协议 (Internet Message Access Protocol, IMAP) 等服务。以下任务说明了如何通过 /var/mail 目录设置邮件服务器。提供 POP 或 IMAP 配置指南超出了本文档范围。
对于以下任务,请确保 /etc/dfs/dfstab 文件会显示已导出 /var/mail 目录。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
停止 sendmail。
# svcadm -t disable network/smtp:sendmail |
# share |
如果列出了 /var/mail 目录,请转到步骤 5。
如果未列出 /var/mail 目录或没有显示列表,请继续执行相应的子步骤。
(可选的)如果未显示列表,请启动 NFS 服务。
按照过程如何设置自动文件系统共享,使用 /var/mail 目录启动 NFS 服务。
(可选的)如果列表中未包含 /var/mail 目录,请将该目录添加到 /etc/dfs/dfstab。
将以下命令行添加到 /etc/dfs/dfstab 文件中。
share -F nfs -o rw /var/mail |
使文件系统可进行挂载。
# shareall |
确保已启动名称服务。
(可选的)如果运行的是 NIS,请使用以下命令。
# ypwhich |
有关更多信息,请参阅 ypwhich(1) 手册页。
(可选的)如果运行的是 NIS+,请使用以下命令。
# nisls |
有关更多信息,请参阅 nisls(1) 手册页。
(可选的)如果运行的是 DNS,请使用以下命令。
# nslookup hostname |
使用您的主机名。
有关更多信息,请参阅 nslookup(1M) 手册页。
(可选的)如果运行的是 LDAP,请使用以下命令。
# ldaplist |
有关更多信息,请参阅 ldaplist(1) 手册页。
重新启动 sendmail。
# svcadm enable network/smtp:sendmail |
邮件客户机是一个在邮件服务器上具有邮箱的邮件服务用户。此外,邮件客户机在指向邮箱位置的 /etc/mail/aliases 文件中还具有邮件别名。
通过邮局协议 (Post Office Protocol, POP) 或 Internet 消息访问协议 (Internet Message Access Protocol, IMAP) 等服务,还可以执行邮件客户机设置任务。但是,提供 POP 或 IMAP 配置指南超出了本文档范围。
成为邮件客户机系统的超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
停止 sendmail。
# svcadm -t disable network/smtp:sendmail |
该挂载点应已在安装过程中创建。您可以使用 ls 来确保此文件系统存在。以下示例显示了在未创建此文件系统时收到的响应。
# ls -l /var/mail /var/mail not found |
确保 /var/mail 目录中没有任何文件。
如果此目录中存在邮件文件,则应移动这些文件,以便在通过服务器挂载 /var/mail 目录时不会覆盖它们。
(可选的)自动挂载 /var/mail。
将如下所示的项添加到 /etc/auto_direct 文件中。
/var/mail -rw,hard,actimeo=0 server:/var/mail |
使用指定的服务器名。
(可选的)在引导时挂载 /var/mail。
将以下项添加到 /etc/vfstab 文件中。此项允许指定的邮件服务器中的 /var/mail 目录挂载本地 /var/mail 目录。
server:/var/mail - /var/mail nfs - no rw,hard,actimeo=0 |
重新引导系统时,会自动挂载客户机邮箱。如果不重新引导系统,请键入以下命令挂载客户机邮箱。
# mountall |
为正常使用邮箱锁定和邮箱访问,必须在从 NFS 服务器挂载邮件时包含 actimeo=0 选项。
更新 /etc/hosts。
编辑 /etc/hosts 文件,并为邮件服务器添加项。如果使用名称服务,则无需此步骤。
# cat /etc/hosts # # Internet host table # .. IP_address mailhost mailhost mailhost.example.com |
使用指定的 IP 地址。
使用指定的域。
使用指定的邮件主机。
有关更多信息,请参阅 hosts(4) 手册页。
将客户机项添加到其中一个别名文件。
有关管理邮件别名文件的任务列表,请参阅管理邮件别名文件(任务列表)。请注意,首次传送消息时,mail.local 程序会自动在 /var/mail 目录中创建邮箱。因此,无需为邮件客户机创建单独的邮箱。
重新启动 sendmail。
# svcadm enable network/smtp:sendmail |
邮件主机用于解析电子邮件地址并在域内重新路由邮件。合适的邮件主机候选系统是可为网络提供远程连接或将网络连接到父域的系统。以下过程说明了如何设置邮件主机。
成为邮件主机系统的超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
停止 sendmail。
# svcadm -t disable network/smtp:sendmail |
验证主机名配置。
运行 check-hostname 脚本,验证 sendmail 是否可以识别此服务器的全限定主机名。
% /usr/sbin/check-hostname hostname phoenix OK: fully qualified as phoenix.example.com |
如果此脚本无法成功识别全限定主机名,则需要将该全限定主机名作为主机的第一个别名添加到 /etc/hosts 中。
更新 /etc/hosts 文件
选择适合您的步骤。
(可选的)如果使用的是 NIS 或 NIS+,请在要作为新邮件主机的系统上编辑 /etc/hosts。
在 IP 地址和邮件主机系统的系统名之后,添加单词 mailhost 和 mailhost.domain。
IP_address mailhost mailhost mailhost.domain loghost |
使用指定的 IP 地址。
使用邮件主机系统的系统名。
使用扩展的域名。
现在,系统即被指定为邮件主机。domain 应与以下命令输出中指定为子域名的字符串相同。
% /usr/lib/sendmail -bt -d0 </dev/null Version 8.13.1+Sun Compiled with: LDAPMAP MAP_REGEX LOG MATCHGECOS MIME7TO8 MIME8TO7 NAMED_BIND NDBM NETINET NETINET6 NETUNIX NEWDB NIS NISPLUS QUEUE SCANF SMTP USERDB XDEBUG ============ SYSTEM IDENTITY (after readcf) ============ (short domain name) $w = phoenix (canonical domain name) $j = phoenix.example.com (subdomain name) $m = example.com (node name) $k = phoenix ======================================================== |
有关 hosts 文件应如何检查这些更改,请参见以下示例。
# cat /etc/hosts # # Internet host table # 172.31.255.255 localhost 192.168.255.255 phoenix mailhost mailhost.example.com loghost |
(可选的)如果未使用 NIS 或 NIS+,请在网络中的所有系统上编辑 /etc/hosts 文件。创建以下项。
IP_address mailhost mailhost mailhost.domain loghost |
重新启动 sendmail。
# svcadm enable network/smtp:sendmail |
测试邮件配置。
有关说明,请参见如何测试邮件配置。
有关邮件主机的详细信息,请参见第 14 章,邮件服务(参考)中的硬件组件。
邮件网关用于管理与域外部网络之间的通信。发送邮件网关中的邮件程序可以与接收系统中的邮件程序匹配。
适合作为邮件网关的系统是指连接到以太网和电话线的系统,此外,还可以是配置为 Internet 路由器的系统。可以将邮件主机或其他系统配置为邮件网关。您可能会选择为域配置多个邮件网关。如果使用 UNIX 对 UNIX 复制程序 (UNIX-to-UNIX Copy Program, UUCP) 连接,则应将采用 UUCP 连接的系统配置为邮件网关。
成为邮件网关的超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
停止 sendmail。
# svcadm -t disable network/smtp:sendmail |
验证主机名配置。
运行 check-hostname 脚本,验证 sendmail 是否可以识别此服务器的全限定主机名。
# /usr/sbin/check-hostname hostname phoenix OK: fully qualified as phoenix.example.com |
如果此脚本无法成功识别全限定主机名,则需要将该全限定主机名作为主机的第一个别名添加到 /etc/hosts 中。如果需要有关此步骤的帮助,请参阅如何设置邮件主机中的步骤 4。
确保已启动名称服务。
(可选的)如果运行的是 NIS,请使用以下命令。
# ypwhich |
有关更多信息,请参阅 ypwhich(1) 手册页。
(可选的)如果运行的是 NIS+,请使用以下命令。
# nisls |
有关更多信息,请参阅 nisls(1) 手册页。
(可选的)如果运行的是 DNS,请使用以下命令。
# nslookup hostname |
使用您的主机名。
有关更多信息,请参阅 nslookup(1M) 手册页。
(可选的)如果运行的是 LDAP,请使用以下命令。
# ldaplist |
有关更多信息,请参阅 ldaplist(1) 手册页。
重新启动 sendmail。
# svcadm enable network/smtp:sendmail |
测试邮件配置。
有关说明,请参见如何测试邮件配置。
有关邮件网关的更多信息,请参阅第 14 章,邮件服务(参考)中的硬件组件。
DNS 名称服务不支持单个别名。此名称服务支持使用邮件交换器 (Mail Exchanger, MX) 记录和 CNAME 记录的主机或域的别名。您可以在 DNS 数据库中指定主机名、域名或同时指定这两个名称。有关 sendmail 和 DNS 的更多信息,请参见第 14 章,邮件服务(参考) 中的sendmail 与名称服务的交互 或参见《系统管理指南:名称和目录服务(DNS、NIS 和 LDAP)》。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
启用 DNS 主机查找(仅限 NIS+)。
编辑 /etc/nsswitch.conf 文件,并从包含 dns 标志的 hosts 定义中删除 #。如下例所示,主机项必须包含 dns 标志,以便使用 DNS 主机别名。
# grep hosts /etc/nsswitch.conf #hosts: nisplus [NOTFOUND=return] files hosts: dns nisplus [NOTFOUND=return] files |
检查 mailhost 和 mailhost.domain 项。
使用 nslookup 确保 DNS 数据库中存在 mailhost 和 mailhost.domain 项。有关更多信息,请参阅 nslookup(1M) 手册页。
如果需要为主机指定多个 IP 地址,请参见以下 Web 站点:http://www.sendmail.org/virtual-hosting.html。此站点完整介绍了如何使用 sendmail 设置虚拟主机。但是,在“Sendmail 配置”部分中,不会执行步骤 3b,如以下所示。
# cd sendmail-VERSION/cf/cf # ./Build mailserver.cf # cp mailserver.cf /etc/mail/sendmail.cf |
相反,对于 Solaris 操作系统,会执行以下步骤。
# cd /etc/mail/cf/cf # /usr/ccs/bin/make mailserver.cf # cp mailserver.cf /etc/mail/sendmail.cf |
使用 .cf 文件的名称。
生成 sendmail.cf 配置文件中将这相同的三个步骤作为生成过程的一部分进行了概述。
生成 /etc/mail/sendmail.cf 文件后,可以继续执行以下步骤创建虚拟用户表。
如何生成新的 sendmail.cf 文件说明了如何生成该配置文件。尽管您仍可使用旧版本的 sendmail.cf 文件,但最佳做法是使用新格式。
/etc/mail/cf/README 完整说明了配置过程。
http://www.sendmail.org 概述了有关 sendmail 配置的信息。
第 14 章,邮件服务(参考)中的配置文件的版本和sendmail 配置文件提供了一些指南。
以下过程说明了如何生成新的配置文件。
/usr/lib/mail/cf/main-v7sun.mc 现在是 /etc/mail/cf/cf/main.mc。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
停止 sendmail。
# svcadm -t disable network/smtp:sendmail |
复制要更改的配置文件。
# cd /etc/mail/cf/cf # cp sendmail.mc myhost.mc |
选择 .mc 文件的新名称。
根据需要,编辑新配置文件(如 myhost.mc)。
例如,添加以下命令行以启用域伪装。
# cat myhost.mc .. MASQUERADE_AS(`host.domain') |
使用所需的主机名和域名。
在此示例中,MASQUERADE_AS 将已发送邮件标记为来自 host.domain,而不是 $j。
使用 m4 生成配置文件。
# /usr/ccs/bin/make myhost.cf |
使用 -C 选项指定新文件,以测试新配置文件。
# /usr/lib/sendmail -C myhost.cf -v testaddr </dev/null |
当此命令显示消息时,将会向 testaddr 发送一条消息。如果不重新启动系统中的 sendmail 服务,则只能对外发邮件进行测试。对于尚未处理邮件的系统,请使用如何测试邮件配置所介绍的完整测试过程。
复制原始配置文件后,安装新配置文件。
# cp /etc/mail/sendmail.cf /etc/mail/sendmail.cf.save # cp myhost.cf /etc/mail/sendmail.cf |
重新启动 sendmail 服务。
# svcadm enable network/smtp:sendmail |
从 Solaris 10 1/06 发行版开始,SMTP 可在 sendmail 8.13 版中使用传输层安全性 (Transport Layer Security, TLS)。此服务面向 SMTP 服务器和客户机,通过 Internet 提供专用的、认证的通信,并且可保护系统免受窃听者和攻击者的侵害。请注意,缺省情况下不会启用此服务。
以下过程使用样例数据说明如何设置证书,以便 sendmail 使用 TLS。有关更多信息,请参见sendmail 版本 8.13 支持运行 SMTP 时使用 TLS。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
停止 sendmail。
# svcadm -t disable network/smtp:sendmail |
设置相应证书,以便 sendmail 使用 TLS。
完成以下命令:
# cd /etc/mail # mkdir -p certs/CA # cd certs/CA # mkdir certs crl newcerts private # echo "01" > serial # cp /dev/null index.txt # cp /etc/sfw/openssl/openssl.cnf . |
使用您选择的文本编辑器,将 openssl.cnf 文件中的 dir 值从 /etc/sfw/openssl 更改为 /etc/mail/certs/CA。
请注意,以下命令行会生成交互式文本。
# openssl req -new -x509 -keyout private/cakey.pem -out cacert.pem -days 365 \ -config openssl.cnf Generating a 1024 bit RSA private key .....................................++++++ .....................................++++++ writing new private key to 'private/cakey.pem' Enter PEM pass phrase: Verifying - Enter PEM pass phrase: ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) []:US State or Province Name (full name) []:California Locality Name (eg, city) []:Menlo Park Organization Name (eg, company) [Unconfigured OpenSSL Installation]:Sun Microsystems Organizational Unit Name (eg, section) []:Solaris Common Name (eg, YOUR name) []:somehost.somedomain.example.com Email Address []:someuser@example.com |
此命令用于创建和处理证书请求。
此 req 选项用于生成一个新的证书请求。
此 req 选项用于创建一个自签名证书。
此 req 选项允许将 private/cakey.pem 指定为新建的私钥的文件名。
此 req 选项允许将 cacert.pem 指定为输出文件。
此 req 选项允许确保证书有效期为 365 天。缺省值为 30。
此 req 选项允许将 openssl.cnf 指定为配置文件。
请注意,此命令要求您提供以下信息:
Country Name,如 US。
State or Province Name,如 California。
Locality Name,如 Menlo Park。
Organization Name,如 Sun Microsystems。
Organizational Unit Name,如 Solaris。
Common Name,该名称是计算机的全限定主机名。有关更多信息,请参见 check-hostname(1M) 手册页。
Email Address,如 someuser@example.com。
(可选的)如果需要新的安全连接,请创建新证书并使用证书颁发机构签名。
创建新证书。
# cd /etc/mail/certs/CA # openssl req -nodes -new -x509 -keyout newreq.pem -out newreq.pem -days 365 \ -config openssl.cnf Generating a 1024 bit RSA private key ..............++++++ ..............++++++ writing new private key to 'newreq.pem' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) []:US State or Province Name (full name) []:California Locality Name (eg, city) []:Menlo Park Organization Name (eg, company) [Unconfigured OpenSSL Installation]:Sun Microsystems Organizational Unit Name (eg, section) []:Solaris Common Name (eg, YOUR name) []:somehost.somedomain.example.com Email Address []:someuser@example.com |
此命令要求您提供的信息与步骤 3c 中提供的信息相同。
请注意,在此示例中,证书和私钥位于文件 newreq.pem 中。
使用证书颁发机构对新证书进行签名。
# cd /etc/mail/certs/CA # openssl x509 -x509toreq -in newreq.pem -signkey newreq.pem -out tmp.pem Getting request Private Key Generating certificate request # openssl ca -config openssl.cnf -policy policy_anything -out newcert.pem -infiles tmp.pem Using configuration from openssl.cnf Enter pass phrase for /etc/mail/certs/CA/private/cakey.pem: Check that the request matches the signature Signature ok Certificate Details: Serial Number: 1 (0x1) Validity Not Before: Jun 23 18:44:38 2005 GMT Not After : Jun 23 18:44:38 2006 GMT Subject: countryName = US stateOrProvinceName = California localityName = Menlo Park organizationName = Sun Microsystems organizationalUnitName = Solaris commonName = somehost.somedomain.example.com emailAddress = someuser@example.com X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 93:D4:1F:C3:36:50:C5:97:D7:5E:01:E4:E3:4B:5D:0B:1F:96:9C:E2 X509v3 Authority Key Identifier: keyid:99:47:F7:17:CF:52:2A:74:A2:C0:13:38:20:6B:F1:B3:89:84:CC:68 DirName:/C=US/ST=California/L=Menlo Park/O=Sun Microsystems/OU=Solaris/\ CN=someuser@example.com/emailAddress=someuser@example.com serial:00 Certificate is to be certified until Jun 23 18:44:38 2006 GMT (365 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated # rm -f tmp.pem |
在此示例中,文件 newreq.pem 包含未签名证书和私钥。文件 newcert.pem 包含已签名证书。
显示证书信息、将证书转换为各种格式以及对证书请求进行签名
用于对各种格式的证书请求进行签名以及生成 CRL(certificate revocation list,证书撤销列表)
在 .mc 文件中添加以下行,以便 sendmail 使用证书。
define(`confCACERT_PATH', `/etc/mail/certs')dnl define(`confCACERT', `/etc/mail/certs/CAcert.pem')dnl define(`confSERVER_CERT', `/etc/mail/certs/MYcert.pem')dnl define(`confSERVER_KEY', `/etc/mail/certs/MYkey.pem')dnl define(`confCLIENT_CERT', `/etc/mail/certs/MYcert.pem')dnl define(`confCLIENT_KEY', `/etc/mail/certs/MYkey.pem')dnl |
有关更多信息,请参见用于在运行 SMTP 时使用 TLS 的配置文件选项。
在 /etc/mail 目录中重新生成并安装 sendmail.cf 文件。
有关详细说明,请参见生成 sendmail.cf 配置文件。
创建从使用 openssl 创建的文件到 .mc 文件中定义的文件的符号链接。
# cd /etc/mail/certs # ln -s CA/cacert.pem CAcert.pem # ln -s CA/newcert.pem MYcert.pem # ln -s CA/newreq.pem MYkey.pem |
为提高安全性,拒绝对 MYkey.pem 的组和其他项目的读取权限。
# chmod go-r MYkey.pem |
使用符号链接将 CA 证书安装在指定给 confCACERT_PATH 的目录中。
# C=CAcert.pem # ln -s $C `openssl x509 -noout -hash < $C`.0 |
为确保其他主机的邮件安全,安装相应的主机证书。
重新启动 sendmail。
# svcadm enable network/smtp:sendmail |
以下是使用 TLS 的安全邮件的 Received: 头示例。
Received: from his.example.com ([IPv6:2001:db8:3c4d:15::1a2f:1a2b]) by her.example.com (8.13.4+Sun/8.13.4) with ESMTP id j2TNUB8i242496 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for <janepc@her.example.com>; Tue, 29 Mar 2005 15:30:11 -0800 (PST) Received: from her.example.com (her.city.example.com [192.168.0.0]) by his.example.com (8.13.4+Sun/8.13.4) with ESMTP id j2TNU7cl571102 version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for <janepc@her.example.com>; Tue, 29 Mar 2005 15:30:07 -0800 (PST) |
请注意,verify 的值为 OK,这表明验证成功。有关更多信息,请参见用于在运行 SMTP 时使用 TLS 的宏。
以下 OpenSSL 手册页:
为便于传入邮件和外发邮件的传输,sendmail 的新缺省配置使用了守护进程和客户机队列运行器。如果已禁用守护进程,则应执行以下任务。有关详细说明,请参阅sendmail 版本 8.12 中的配置文件 submit.cf。
在 sendmail 的缺省配置中,客户机队列运行器必须能够将邮件提交给本地 SMTP 端口上的守护进程。如果该守护进程没有侦听 SMTP 端口,邮件将保留在队列中。要避免此问题,请执行以下任务。有关守护进程和客户机队列运行器的更多信息,以及要了解可能必须使用此备用配置的原因,请参阅sendmail 版本 8.12 中的配置文件 submit.cf。
此过程可确保守护进程的运行仅用于接受来自本地主机的连接。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
停止 sendmail。
# svcadm -t disable network/smtp:sendmail |
复制要更改的配置文件。
# cd /etc/mail/cf/cf # cp sendmail.mc myhost.mc |
选择 .mc 文件的新名称。
编辑新配置文件(例如,myhost.mc)。
在 MAILER() 行前添加以下行。
# cat myhost.mc .. FEATURE(`no_default_msa')dnl DAEMON_OPTIONS(`NAME=NoMTA4, Family=inet, Addr=127.0.0.1')dnl DAEMON_OPTIONS(`Name=MSA4, Family=inet, Addr=127.0.0.1, Port=587, M=E')dnl |
请在仅配置了 IPv4 地址的计算机上使用这些配置宏。
(可选的)如果主机启用了 IPv6 本地主机地址,请按如下所示编辑新配置文件。
在 MAILER() 行前添加以下行。
# cat myhost.mc .. FEATURE(`no_default_msa')dnl DAEMON_OPTIONS(`NAME=NoMTA4, Family=inet, Addr=127.0.0.1')dnl DAEMON_OPTIONS(`Name=MSA4, Family=inet, Addr=127.0.0.1, Port=587, M=E')dnl DAEMON_OPTIONS(`NAME=NoMTA6, Family=inet6, Addr=::1')dnl DAEMON_OPTIONS(`Name=MSA6, Family=inet6, Addr=::1, Port=587, M=E')dnl |
要添加这些配置宏,必须配置 IPv4 和 IPv6 地址。
(可选的)要查看主机是否启用了 IPv6 本地主机地址,请运行以下命令。
# /usr/sbin/ifconfig -a |
如果启用了 IPv6,将显示以下类似输出。
lo0: flags=2000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv6> mtu 8252 index 1 inet6 ::1/128 |
使用 m4 生成配置文件。
# /usr/ccs/bin/make myhost.cf |
复制原始配置文件后,安装新配置文件。
# cp /etc/mail/sendmail.cf /etc/mail/sendmail.cf.save # cp myhost.cf /etc/mail/sendmail.cf |
重新启动 sendmail 服务。
# svcadm enable network/smtp:sendmail |
下表介绍了管理邮件别名文件的过程。有关本主题的更多信息,请参阅第 14 章,邮件服务(参考)中的邮件别名文件。
任务 |
说明 |
参考 |
---|---|---|
管理 NIS+ mail_aliases 表中的别名项 |
如果名称服务是 NIS+,请使用这些过程管理 mail_aliases 表中的内容。 初始化 NIS+ mail_aliases 表。 | |
列出 NIS+ mail_aliases 表中的内容。 此过程包含有关如何列出单项以及如何列出部分匹配项的示例。 | ||
通过命令行向 NIS+ mail_aliases 表添加别名。 | ||
通过编辑 NIS+ mail_aliases 表添加项。 | ||
编辑 NIS+ mail_aliases 表中的项。 此过程包含有关如何删除项的示例。 | ||
设置 NIS mail.aliases 映射 |
如果名称服务是 NIS,请按照以下说明简化 mail.aliases 映射的别名设置。 | |
设置本地邮件别名文件 |
如果未使用名称服务(如 NIS 或 NIS+),请按照以下说明简化 /etc/mail/aliases 文件的别名设置。 | |
创建加密映射文件 |
使用以下步骤可简化加密映射文件的别名设置。 | |
设置 postmaster 别名 |
使用本节中的过程可管理 postmaster 别名。您必须使用此别名。 |
邮件别名在域中必须唯一。本节介绍管理邮件别名文件的过程。或者,您可以使用 Solaris Management Console 的邮递列表功能,在别名数据库上执行这些任务。
另外,您还可以使用 makemap 为本地邮件主机创建数据库文件。请参阅 makemap(1M) 手册页。使用这些数据库文件不会提供使用 NIS 或 NIS+ 等名称服务的所有优点。但是,由于不涉及网络查找,因此可以更快地从这些本地数据库文件检索数据。有关更多信息,请参阅sendmail 与名称服务的交互,以及第 14 章,邮件服务(参考)中的邮件别名文件。
请从以下过程中进行选择:
您可以使用 aliasadm 命令来管理 NIS+ 表中的项。要创建表,请按照以下说明操作。有关更多信息,请参阅 aliasadm(1M) 手册页。
成为拥有该表的 NIS+ 组的成员或邮件服务器的 root,或者承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
初始化 NIS+ 表。
# aliasadm -I |
将项添加到该表中。
要添加两个或三个别名,请参阅如何通过命令行向 NIS+ mail_aliases 表添加别名。
要添加两个或三个以上的别名,请参阅如何通过编辑 NIS+ mail_aliases 表添加项。
成为拥有该表的 NIS+ 组的成员或邮件服务器的 root,或者承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
按别名字母顺序列出所有项。
# aliasadm -1 |
有关更多信息,请参阅 aliasadm(1M) 手册页。
或者,可以使用 aliasadm 命令列出单项。完成此过程的第一步后,请键入以下内容:
# aliasadm -m ignatz ignatz: ignatz@saturn # Alias for Iggy Ignatz |
该命令仅会匹配完整的别名,而不会匹配部分字符串。不能将 * 和 ? 等元字符与 aliasadm -m 一起使用。
另外,还可以使用 aliasadm 命令列出部分匹配项。完成此过程的第一步后,请键入以下内容:
# aliasadm -l | grep partial_string |
将 partial_string 替换为搜索所需的字符串。
要将两个或三个别名添加到该表中,请按照以下说明操作。如果要添加两个或三个以上的别名,请参见如何通过编辑 NIS+ mail_aliases 表添加项。
编辑各个邮件客户机、邮箱位置和邮件服务器系统名称的列表。
成为拥有该表的 NIS+ 组的成员或邮件服务器的 root,或者承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
(可选的)如有必要,请初始化 NIS+ 表。
如果创建的是一个全新的 NIS+ mail_aliases 表,则必须首先初始化该表。要完成此任务,请参阅如何初始化 NIS+ mail_aliases 表。
将别名添加到该表中。
请参见以下典型项示例。
# aliasadm -a iggy iggy.ignatz@saturn "Iggy Ignatz" |
以下列表说明了上面示例的输入。
用于添加别名的选项
别名的缩写
扩展的别名
使用引号的别名
显示创建的项并确保其正确。
# aliasadm -m alias |
创建的项
有关更多信息,请参阅 aliasadm(1M) 手册页。
您可以使用 aliasadm 命令来管理 NIS+ 表中的项。要将两个或三个以上的别名添加到该表中,请按照以下说明操作。
编辑各个邮件客户机、邮箱位置和邮件服务器系统名称的列表。
成为拥有该表的 NIS+ 组的成员或邮件服务器的 root,或者承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
显示并编辑该别名表。
# aliasadm -e |
此命令将显示该表,并允许您对其进行编辑。所用的编辑器已使用 $EDITOR 环境变量进行了设置。如果未设置此变量,则 vi 为缺省编辑器。
使用以下格式在单独一行中键入每个别名。
alias: expanded_alias # ["option" # "comments"] |
此列用于别名的缩写。
此列用于扩展的别名。
此列保留供将来使用。
此列用于有关单个别名的注释,如别名的名称。
如果将选项列保留为空,请键入一对空引号 ("") 并添加注释。
项的顺序对 NIS+ mail_aliases 表并不重要。aliasadm -l 命令按字母顺序对列表进行排序并显示项。
有关更多信息,请参阅邮件别名文件和 aliasadm(1M) 手册页。
成为拥有该表的 NIS+ 组的成员或邮件服务器的 root,或者承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
显示别名项。
# aliasadm -m alias |
将 alias 替换为指定的别名。
根据需要编辑别名项。
# aliasadm -c alias expanded_alias [options comments] |
如有必要,编辑别名。
如有必要,编辑扩展的别名。
如有必要,编辑选项。
如有必要,编辑此项的注释。
有关更多信息,请参阅 aliasadm(1M) 手册页以及邮件别名文件。
显示编辑的项并确保其正确。
# aliasadm -m alias |
有关更多信息,请参阅 aliasadm(1M) 手册页。
# aliasadm -d alias |
将 alias 替换为要删除的项的别名。
使用以下过程可简化 NIS mail.aliases 映射的别名设置。
编辑各个邮件客户机、邮箱位置和邮件服务器系统名称的列表。
成为 NIS 主服务器的 root 或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
编辑 /etc/mail/aliases 文件,并创建以下项。
为每台邮件客户机添加项。
# cat /etc/mail/aliases .. alias:expanded_alias |
使用缩写的别名。
使用扩展的别名 (user@host.domain.com)。
确保具有 Postmaster: root 项。
# cat /etc/mail/aliases .. Postmaster: root |
为 root 添加别名。使用指定为邮寄主管的人员的邮件地址。
# cat /etc/mail/aliases .. root: user@host.domain.com |
使用指定的邮寄主管的指定地址。
确保 NIS 主服务器正在运行名称服务,以解析每台邮件服务器上的主机名。
转至 /var/yp 目录。
# cd /var/yp |
应用 make 命令。
# make |
/etc/hosts 和 /etc/mail/aliases 文件的更改将传播到 NIS 从属系统。这些更改至多仅在几分钟后便会生效。
编辑各个用户及其邮箱位置的列表。
成为邮件服务器的 root 或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
编辑 /etc/mail/aliases 文件,并创建以下项。
重新生成别名数据库。
# newaliases |
/etc/mail/sendmail.cf 中 AliasFile 选项的配置可确定此命令是以二进制格式生成单个文件 /etc/mail/aliases.db,还是生成文件对 /etc/mail/aliases.dir 和 /etc/mail/aliases.pag。
执行以下步骤之一,复制生成的文件。
(可选的)将 /etc/mail/aliases、/etc/mail/aliases.dir 和 /etc/mail/aliases.pag 文件复制到其他各个系统中。
您可以使用 rcp 或 rdist 命令复制这三个文件。有关更多信息,请参阅 rcp(1) 手册页或 rdist(1) 手册页。或者,可以为此创建脚本。
复制这些文件时,无需在其他各个系统上都运行 newaliases 命令。但是请记住,每次添加或删除邮件客户机时,必须更新所有 /etc/mail/aliases 文件。
(可选的)将 /etc/mail/aliases 和 /etc/mail/aliases.db 文件复制到其他各个系统中。
您可以使用 rcp 或 rdist 命令复制这些文件。有关更多信息,请参阅 rcp(1) 手册页或 rdist(1) 手册页。或者,可以为此创建脚本。
复制这些文件时,无需在其他各个系统上都运行 newaliases 命令。但是请记住,每次添加或删除邮件客户机时,必须更新所有 /etc/mail/aliases 文件。
要创建加密映射文件,请按照以下说明操作。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
项可以使用以下语法。
old_name@newdomain.com new_name@newdomain.com old_name@olddomain.com error:nouser No such user here @olddomain.com %1@newdomain.com |
使用以前指定的用户名以及新指定的域。
使用新指定的地址。
使用以前指定的用户名及域。
使用以前指定的域。
使用新指定的域。
第一项将邮件重定向到新别名。下一项在使用的别名错误时创建一条消息。最后一项将所有传入邮件从 olddomain 重定向到 newdomain。
创建数据库文件。
# /usr/sbin/makemap maptype newmap < newmap |
选择数据库类型,如 dbm、btree 或 hash。
使用输入文件名称以及数据库文件名称的第一部分。如果选择 dbm 数据库类型,则会使用 .pag 和 .dir 后缀创建数据库文件。对于其他两种数据库类型,文件名后跟 .db。
每个系统都必须能够将邮件发送到 postmaster 邮箱。您可以为 postmaster 创建 NIS 或 NIS+ 别名,也可在每个本地 /etc/mail/aliases 文件中创建该别名。请参阅以下过程。
如果要在每个本地 /etc/mail/aliases 文件中创建 postmaster 别名,请按照以下说明操作。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
查看 /etc/mail/aliases 项。
# cat /etc/mail/aliases # Following alias is required by the mail protocol, RFC 2821 # Set it to the address of a HUMAN who deals with this system's # mail problems. Postmaster: root |
编辑每个系统的 /etc/mail/aliases 文件。
将 root 更改成指定为邮寄主管的人员的邮件地址。
Postmaster: mail_address |
使用指定为邮寄主管的人员的指定地址。
(可选的)为邮寄主管创建单独的邮箱。
可以为邮寄主管创建单独的邮箱,以便将邮寄主管邮件与个人邮件分开。如果创建单独的邮箱,请在编辑 /etc/mail/aliases 文件时使用该邮箱地址,而不要使用邮寄主管的个人邮件地址。有关详细信息,请参阅如何为 postmaster 创建单独的邮箱。
如果要为 postmaster 创建单独的邮箱,请按照以下说明操作。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
为指定为 postmaster 的人员创建用户帐户。在口令字段中放置一个星号 (*)。
有关添加用户帐户的详细信息,请参阅《系统管理指南:基本管理》中的第 5 章 “管理用户帐户和组(任务)”。
完成邮件传送后,启用 mail 程序读取和写入邮箱名称。
# mail -f postmaster |
使用指定的地址。
如果要为 /etc/mail/aliases 文件中的别名添加 postmaster 邮箱,请按照以下说明操作。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
为 root 添加别名。使用指定为邮寄主管的人员的邮件地址。
# cat /etc/mail/aliases .. root: user@host.domain.com |
使用指定为邮寄主管的人员的指定地址。
在邮寄主管本地系统的 /etc/mail/aliases 文件中,创建一个定义别名名称的项。以 sysadmin 为例。另外,还在其中包含指向本地邮箱的路径。
# cat /etc/mail/aliases .. sysadmin: /usr/somewhere/somefile |
为新别名创建名称。
使用指向本地邮箱的路径。
重新生成别名数据库。
# newaliases |
任务 |
说明 |
参考 |
---|---|---|
显示邮件队列 /var/spool/mqueue 的内容 |
使用此过程可查看队列中的消息数,以及从队列中清除消息的速度。 | |
强制对邮件队列 /var/spool/mqueue 进行邮件队列处理 |
使用此过程可处理向以前无法接收消息的系统发送的消息。 | |
运行邮件队列 /var/spool/mqueue 的子集 |
使用此过程可强制处理地址子串(如主机名)。另外,使用此过程还可强制处理队列中的特定消息。 | |
移动邮件队列 /var/spool/mqueue |
使用此过程可移动该邮件队列。 | |
运行旧邮件队列 /var/spool/omqueue |
使用此过程可运行旧邮件队列。 |
本节介绍了一些有助于队列管理的任务。有关仅客户机适用的队列的信息,请参阅sendmail 版本 8.12 中的配置文件 submit.cf。有关其他相关信息,可以参阅sendmail 版本 8.12 中新增的队列功能。
请参阅以下内容:
显示队列中的消息数以及从队列中清除消息的速度。
键入以下命令:
# /usr/bin/mailq | more |
此命令将提供以下信息。
队列 ID
消息大小
消息进入队列的日期
消息状态
发件人和收件人
另外,此命令还会立即检查授权属性 solaris.admin.mail.mailq。如果检查成功,将执行与使用 sendmail 指定 -bp 标志等效的操作。如果检查失败,则会列显一条错误消息。缺省情况下,对所有用户均会启用此授权属性。通过修改 prof_attr 中的用户项,可以禁用该授权属性。有关更多信息,请参阅 prof_attr(4) 和 mailq(1) 手册页。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
强制进行队列处理,并在清空队列时显示作业进度。
# /usr/lib/sendmail -q -v |
例如,使用此过程可强制处理地址子串(如主机名)。另外,使用此过程还可强制处理队列中的特定消息。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
使用 -qRstring 随时运行该邮件队列的子集。
# /usr/lib/sendmail -qRstring |
使用收件人别名或 user@host.domain 的子串(如主机名)。
或者,可使用 -qInnnnn 运行该邮件队列的子集。
# /usr/lib/sendmail -qInnnnn |
使用队列 ID。
成为邮件主机的 root 或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
中止 sendmail 守护进程。
# svcadm disable network/smtp:sendmail |
现在,sendmail 将不再处理该队列目录。
转至 /var/spool 目录。
# cd /var/spool |
将目录 mqueue 及其所有内容移动到 omqueue 目录中。然后,创建一个名为 mqueue 的新的空目录。
# mv mqueue omqueue; mkdir mqueue |
将该目录权限按属主设置为读取/写入/执行,按组设置为读取/执行。另外,将属主和组设置为 daemon。
# chmod 750 mqueue; chown root:bin mqueue |
启动 sendmail。
# svcadm enable network/smtp:sendmail |
成为 root 或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
运行该旧邮件队列。
# /usr/lib/sendmail -oQ/var/spool/omqueue -q |
-oQ 标志用于指定备用队列目录。-q 标志用于指示运行该队列中的所有作业。如果要在屏幕中显示详细输出,请使用 -v 标志。
删除该空目录。
# rmdir /var/spool/omqueue |
下表介绍了管理 .forward 文件的过程。有关更多信息,请参阅第 14 章,邮件服务(参考)中的 .forward 文件。
任务 |
说明 |
参考 |
---|---|---|
禁用 .forward 文件 |
例如,如果要阻止自动转发,请使用此过程。 | |
更改 .forward 文件搜索路径 |
例如,如果要将所有 .forward 文件移动到公用目录中,请使用此过程。 | |
创建和填充 /etc/shells |
通过此过程,用户可使用 .forward 文件将邮件转发到程序或文件。 |
本节介绍了与 .forward 文件管理相关的若干过程。由于用户可以编辑这些文件,因此可能导致出现问题。有关更多信息,请参阅第 14 章,邮件服务(参考)中的 .forward 文件。
请参阅以下过程:
此过程用于阻止自动转发,可禁用特定主机的 .forward 文件。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
复制 /etc/mail/cf/domain/solaris-generic.m4 或站点特定的域 m4 文件。
# cd /etc/mail/cf/domain # cp solaris-generic.m4 mydomain.m4 |
define(`confFORWARD_PATH',`')dnl |
如果 m4 文件中已存在 confFORWARD_PATH 的值,请将该值替换为该空值。
生成并安装新的配置文件。
如果需要有关此步骤的帮助信息,请参阅如何生成新的 sendmail.cf 文件。
编辑 .mc 文件时,请记住将 DOMAIN(`solaris-generic') 更改为 DOMAIN(`mydomain')。
例如,如果要将所有 .forward 文件放置在公用目录中,请按照以下说明操作。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
复制 /etc/mail/cf/domain/solaris-generic.m4 或站点特定的域 m4 文件。
# cd /etc/mail/cf/domain # cp solaris-generic.m4 mydomain.m4 |
在刚创建的文件中添加以下行。
define(`confFORWARD_PATH',`$z/.forward:/var/forward/$u')dnl |
生成并安装新的配置文件。
如果需要有关此步骤的帮助信息,请参阅如何生成新的 sendmail.cf 文件。
编辑 .mc 文件时,请记住将 DOMAIN(`solaris-generic') 更改为 DOMAIN(`mydomain')。
此文件未包含在标准发行版中。如果要允许用户使用 .forward 文件将邮件转发到程序或文件,则必须添加该文件。您可以通过使用 grep 标识口令文件中列出的所有 shell,手动创建该文件。然后,可将这些 shell 键入到文件中。但是,使用可下载脚本的以下过程更易于使用。
下载相应脚本。
成为 root 或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
要生成 shell 列表,请运行 gen-etc-shells 脚本。
# ./gen-etc-shells.sh > /tmp/shells |
此脚本使用 getent 命令收集 /etc/nsswitch.conf 中列出的口令文件源所包含的 shell 名称。
检查并编辑 /tmp/shells 中的 shell 列表。
使用您选择的编辑器,删除不包含的所有 shell。
将文件移动到 /etc/shells。
# mv /tmp/shells /etc/shells |
任务 |
说明 |
参考 |
---|---|---|
测试邮件配置 |
用于测试对 sendmail 配置文件的更改的步骤 | |
检查邮件别名 |
用于确认是否能将邮件传送到指定收件人的步骤 | |
测试规则集 |
用于检查 sendmail 规则集的输入和返回的步骤 | |
验证与其他系统的连接 |
用于验证与其他系统的连接的技巧 | |
使用 syslogd 程序记录消息 |
用于收集错误消息信息的技巧 | |
检查其他源的诊断信息 |
用于从其他源获取诊断信息的技巧 |
本节介绍了一些可用于解决邮件服务问题的过程和技巧。
在包含已修订的配置文件的任何系统上重新启动 sendmail。
# svcadm refresh network/smtp:sendmail |
从各个系统发送测试消息。
# /usr/lib/sendmail -v names </dev/null |
指定收件人的电子邮件地址。
此命令会向指定的收件人发送一条空消息,并在监视器上显示该消息的活动。
通过将该消息发送至常规用户名,向您自己或本地系统中的其他人发送邮件。
(可选的)如果已连接到网络,请按三个方向将邮件发送到其他系统中的某个用户。
从主系统到客户机系统
从客户机系统到主系统
从一台客户机系统到另一台客户机系统
(可选的)如果通过电话线设置了与另一台主机的 UUCP 连接,请将邮件发送到该主机的某个用户,并要求该用户回复邮件或在收到消息时与您联系。
要求某用户通过 UUCP 连接向您发送邮件。
由于 sendmail 程序会将消息传递给 UUCP 进行传送,因此该程序无法检测消息是否已传送。
以下示例说明了如何验证别名。
% mconnect connecting to host localhost (127.0.0.1), port 25 connection open 220 your.domain.com ESMTP Sendmail 8.13.6+Sun/8.13.6; Tue, 12 Sep 2004 13:34:13 -0800 (PST) expn sandy 250 2.1.5 <sandy@phoenix.example.com> quit 221 2.0.0 your.domain.com closing connection % |
在此示例中,mconnect 程序打开了一个与本地主机上的邮件服务器的连接,并允许您测试该连接。该程序以交互方式运行,因此可以发出各种诊断命令。有关完整说明,请参见 mconnect(1) 手册页。项 expn sandy 提供了扩展地址 sandy@phoenix.example.com。因此,您已验证了使用别名 sandy 时可以传送邮件。
使用本地范围和域范围的别名时,请记住避免产生循环和不一致的数据库。尤其要注意,在系统之间移动用户时应避免创建别名循环。
要检查 sendmail 规则集的输入和返回,请按照以下说明操作。
更改为地址测试模式。
# /usr/lib/sendmail -bt |
测试邮件地址。
在最后一个提示符 (>) 下提供以下数字和地址。
> 3,0 mail_address |
使用要测试的邮件地址。
结束会话。
按 Control-D 组合键。
以下是地址测试模式的输出示例。
% /usr/lib/sendmail -bt ADDRESS TEST MODE (ruleset 3 NOT automatically invoked) Enter <ruleset> <address> > 3,0 sandy@phoenix canonify input: sandy @ phoenix Canonify2 input: sandy < @ phoenix > Canonify2 returns: sandy < @ phoenix . example . com . > canonify returns: sandy < @ phoenix . example . com . > parse input: sandy < @ phoenix . example . com . > Parse0 input: sandy < @ phoenix . example . com . > Parse0 returns: sandy < @ phoenix . example . com . > ParseLocal input: sandy < @ phoenix . example . com . > ParseLocal returns: sandy < @ phoenix . example . com . > Parse1 input: sandy < @ phoenix . example . com . > MailerToTriple input: < mailhost . phoenix . example . com > sandy < @ phoenix . example . com . > MailerToTriple returns: $# relay $@ mailhost . phoenix . example . com $: sandy < @ phoenix . example . com . > Parse1 returns: $# relay $@ mailhost . phoenix . example . com $: sandy < @ phoenix . example . com . > parse returns: $# relay $@ mailhost . phoenix . example . com $: sandy < @ phoenix . example . com . > |
mconnect 程序打开一个与指定主机上邮件服务器的连接,并允许您测试该连接。该程序以交互方式运行,因此可以发出各种诊断命令。有关完整说明,请参见 mconnect(1) 手册页。以下示例确认发送到用户名 sandy 的邮件是可传送的。
% mconnect phoenix connecting to host phoenix (172.31.255.255), port 25 connection open 220 phoenix.example.com ESMTP Sendmail 8.13.1+Sun/8.13.1; Sat, 4 Sep 2004 3:52:56 -0700 expn sandy 250 2.1.5 <sandy@phoenix.example.com> quit |
如果无法使用 mconnect 连接到某个 SMTP 端口,请检查以下情况。
系统负载是否太高?
sendmail 守护进程是否正在运行?
系统是否具有相应的 /etc/mail/sendmail.cf 文件?
sendmail 使用的端口 25 是否处于活动状态?
邮件服务使用 syslogd 程序记录大多数错误消息。缺省情况下,syslogd 程序会将这些消息发送到一个称为 loghost 的系统,该系统可在 /etc/hosts 文件中指定。可以将 loghost 定义为保存整个 NIS 域的所有日志。如果未指定 loghost,则不会报告 syslogd 中的错误消息。
/etc/syslog.conf 文件用于控制 syslogd 程序转发消息的位置。可以通过编辑 /etc/syslog.conf 文件来更改缺省配置。为使所有更改生效,必须重新启动 syslog 守护进程。要收集有关邮件的信息,可在该文件中添加以下选项。
mail.alert -有关应立即修复的情况的消息
mail.crit -关键消息
mail.warning -警告消息
mail.notice -并非错误,但可能需要注意的消息
mail.info -提示性消息
mail.debug -调试消息
/etc/syslog.conf 文件中的以下项会将所有关键消息、提示性消息和调试消息的副本发送到 /var/log/syslog。
mail.crit;mail.info;mail.debug /var/log/syslog |
在系统日志中,每一行都包含时间标记、生成该行的系统名称以及消息。syslog 文件可以记录大量信息。
该日志按级别顺序进行排列。在最低级别,仅记录异常情况。在最高级别,即使最普通和最不受关注的事件也会被记录。根据约定,10 以下的日志级别被视为“有用”级别。10 以上的日志级别通常用于调试。有关 loghost 和 syslogd 程序的信息,请参见《系统管理指南:高级管理》中的“自定义系统消息日志”。
对于其他诊断信息,请检查以下源。
查看消息头中的 Received 行。这些行跟踪中继消息时消息所采用的路由。请记住考虑时区差异。
检查记录系统组传送问题的系统日志。sendmail 程序始终在系统日志中记录其活动。您可能需要修改 crontab 文件,以便在夜间运行 shell 脚本。该脚本在日志中搜索 SYSERR 消息,并将找到的任何消息发送到邮寄主管。
使用 mailstats 程序测试邮件类型,并确定传入消息和外发消息的数量。
本节介绍了如何解析一些与 sendmail 相关的错误消息。此外,还可参阅 http://www.sendmail.org/faq/。
以下错误消息包含两种或多种以下类型的信息。
原因:何种情况可能会导致出现该消息
说明:出现错误消息时用户正在执行哪些操作
解决方案:采取何种措施可解决问题或继续工作
451 timeout waiting for input during source
原因:当 sendmail 从可能超时的任何源(如 SMTP 连接)进行读取时,该程序会在开始读取之前将计时器设置为各种 Timeout 选项的值。如果在计时器到期之前没有完成读取,则会出现此消息并且停止读取。通常,这种情况发生在 RCPT 过程中。然后,该邮件在队列中排队以便以后传送。
解决方法:如果经常显示此消息,请增大 /etc/mail/sendmail.cf 文件中各种 Timeout 选项的值。如果已将计时器设置为一个较大的数字,请查找硬件问题(如网络线路或连接不正确)。
550 hostname... Host unknown
原因:此 sendmail 消息表明,在域名系统 (Domain Name System, DNS) 查找过程中,找不到通过 at 符号 (@) 后面的地址部分指定的目标主机计算机。
解决方法:使用 nslookup 命令验证在该域或其他域中是否存在此目标主机,可能是由于拼写有所不同。否则,请与预定收件人联系并请求正确的地址。
550 username... User unknown
原因:此 sendmail 消息表明,在目标主机计算机上,找不到通过 at 符号 (@) 前面的地址部分指定的预定收件人。
解决方法:检查该电子邮件地址并重试,可能是由于拼写有所不同。如果此修正方法无效,请与预定收件人联系并请求正确的地址。
554 hostname... Local configuration error
原因:此 sendmail 消息通常表明,本地主机正尝试向其本身发送邮件。
解决方法:检查 /etc/mail/sendmail.cf 文件中的 $j 宏的值,确保该值为全限定域名。
描述:当发送系统在 SMTP HELO 命令中将其主机名提供给接收系统时,接收系统会将其名称与发件人名称进行比较。如果这些名称相同,接收系统将发出此错误消息并关闭连接。HELO 命令中提供的名称即 $j 宏的值。
有关其他信息,请参阅 http://www.sendmail.org/faq/section4.html#4.5。
config error: mail loops back to myself.
原因:如果设置了 MX 记录并使主机 bar 成为域 foo 的邮件交换器,则会出现此错误消息。但是,配置主机 bar 失败,无法了解它即是域 foo 的邮件交换器。
此外,另一种可能是发送系统和接收系统都识别为同一个域。
解决方法:有关说明,请参阅 http://www.sendmail.org/faq/section4.html#4.5。
host name configuration error
描述:这是一条旧的 sendmail 消息,该消息替换了 I refuse to talk to myself,现在则替换为 Local configuration error 消息。
解决方法:按照为解析错误消息 554 hostname... Local configuration error 提供的说明进行操作。
user unknown
原因:尝试向某用户发送邮件时,显示了 Username... user unknown 错误。 该用户位于同一系统中。
解决方法:检查所输入的电子邮件地址是否存在拼写错误。或者,可将该用户的别名设置为 /etc/mail/aliases 或该用户的 .mailrc 文件中不存在的电子邮件地址。另外,检查用户名的大写字符。电子邮件地址最好不要区分大小写。
有关其他信息,请参阅 http://www.sendmail.org/faq/section4.html#4.17。
sendmail 程序是一个邮件传输代理。该程序使用配置文件来提供别名和转发、到网络网关的自动路由以及灵活的配置。Solaris OS 提供了大多数站点都可以使用的标准配置文件。第 12 章,邮件服务(概述)介绍了邮件服务的组件,并对典型邮件服务配置进行了说明。第 13 章,邮件服务(任务)说明了如何设置和管理电子邮件系统。本章介绍了有关以下主题的信息。
有关这些章节中未介绍的详细信息,请参见以下手册页:
本节包括以下主题,其中介绍了 sendmail 的 Solaris 版本与普通 Berkeley 版本之间的一些差异。
从 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,通过它第三方程序可在处理邮件以过滤元信息和内容时访问邮件。无需构造过滤器并配置 sendmail 即可使用它。缺省情况下,sendmail 版本 8.13 中会启用该 API。
有关更多详细信息,请访问以下站点:
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。 可将版本级别设置为 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。有关更多信息,请参阅 http://www.sendmail.org/vendor/sun/differences.html#4。
有关任务信息,请参阅第 13 章,邮件服务(任务)中的生成 sendmail.cf 配置文件。
本节介绍了邮件系统的软件和硬件组件。
本节还介绍了以下软件组件。
邮件用户代理是用户与邮件传输代理之间用作接口的程序。sendmail 程序是一个邮件传输代理。Solaris 操作系统提供了以下邮件用户代理。
/usr/bin/mail
/usr/bin/mailx
/usr/dt/bin/dtmail
邮件传输代理负责邮件的路由以及邮件地址的解析。此代理也称为邮件传输代理。用于 Solaris 操作系统的传输代理是 sendmail。该传输代理可执行以下功能。
接受来自邮件用户代理的邮件
解析目标地址
选择正确的传送代理来传送邮件
接收从其他邮件传输代理传入的邮件
本地传送代理是实现邮件传送协议的程序。Solaris 操作系统附带了以下本地传送代理。
UUCP 本地传送代理,它使用 uux 传送邮件
本地传送代理,它是标准 Solaris 发行版中的 mail.local
sendmail 版本 8.12 中的更改提供了有关以下相关主题的信息。
邮件程序是特定于 sendmail 的术语。sendmail 使用邮件程序来标识自定义的本地传送代理或自定义的邮件传输代理的特定实例。至少需要在 sendmail.cf 文件中指定一个邮件程序。有关任务信息,请参阅第 13 章,邮件服务(任务)中的生成 sendmail.cf 配置文件。本节对以下两种类型的邮件程序进行了简短说明。
有关邮件程序的其他信息,请参见 http://www.sendmail.org/m4/readme.html 或 /etc/mail/cf/README。
SMTP 是在 Internet 中使用的标准邮件协议。此协议定义了以下邮件程序。
smtp,用于向其他服务器提供常规 SMTP 传输。
esmtp,用于向其他服务器提供扩展 SMTP 传输。
smtp8,用于向其他服务器提供 SMTP 传输,而不会将 8 位数据转换为 MIME。
dsmtp,用于通过使用 F=% 邮件程序标志来提供即时传送。 请参阅sendmail 版本 8.12 中对 MAILER() 声明的更改和sendmail 版本 8.12 中新增的传送代理标志 。
应尽可能避免使用 UUCP。有关说明,请参阅 http://www.sendmail.org/m4/uucp_mailers.html 或在 /etc/mail/cf/README 中搜索以下字符串:USING UUCP MAILERS。
UUCP 定义了以下邮件程序。
$=U 类中的名称将发送至 uucp-old。uucp 是此邮件程序的废弃名称。uucp-old 邮件程序在头中使用叹号地址。
$=Y 类中的名称将发送至 uucp-new。如果知道接收 UUCP 的邮件程序可在一次传输中管理多个收件人,请使用此邮件程序。suucp 是此邮件程序的废弃名称。uucp-new 邮件程序在头中也使用叹号地址。
如果配置中还指定了 MAILER(smtp),则还需定义另外两个邮件程序。
此邮件程序使用域样式地址,并且基本上应用 SMTP 重写规则。
$=Z 类中的名称将发送至 uucp-uudom。uucp-uudom 和 uucp-dom 使用相同的头地址格式,即域样式地址。
由于 smtp 邮件程序会修改 UUCP 邮件程序,因此在 .mc 文件中应始终将 MAILER(smtp) 放在 MAILER(uucp) 的前面。
邮件地址包含邮件传送到的收件人和系统的名称。管理不使用名称服务的小型邮件系统时,对邮件进行寻址很容易。登录名可以唯一标识用户。如果管理的邮件系统中存在多个具有邮箱的系统,或者该邮件系统有一个或多个域,则情况会变得很复杂。如果与网络之外的服务器之间建立了 UUCP(或其他)邮件连接,则会进一步增加复杂性。以下各节中的信息有助于理解邮件地址的各个部分及其复杂性。
电子邮件地址会使用域。域是用于网络地址命名的目录结构。一个域可以包含一个或多个子域。地址的域和子域与文件系统的分层结构类似。正如我们认为子目录位于其上面的目录之内,同样可以认为邮件地址中的每个子域位于其右侧的位置之内。
表 14–7 顶层域
域 |
说明 |
---|---|
com |
商业站点 |
edu |
教育站点 |
gov |
美国政府机构 |
mil |
美国军事机构 |
net |
联网组织 |
org |
其他非赢利组织 |
域不区分大小写。在地址的域部分中,可以使用大写、小写或大小写混合的字母,而不会产生任何错误。
使用名称服务域名和邮件域名时,请记住以下几点。
缺省情况下,sendmail 程序会从 NIS 或 NIS+ 域名中去除第一个组成部分,以形成邮件域名。例如,如果 NIS+ 域名为 bldg5.example.com,则其邮件域名将为 example.com。
尽管邮件域地址不区分大小写,但 NIS 或 NIS+ 域名会区分大小写。为了获得最佳结果,在设置邮件以及 NIS 或 NIS+ 域名时请使用小写字符。
DNS 域名和邮件域名必须相同。
有关更多信息,请参阅sendmail 与名称服务的交互。
通常,邮件地址具有以下格式。有关详细信息,请参阅与路由无关的邮件地址。
user@subdomain. ... .subdomain2.subdomain1.top-level-domain |
@ 符号左侧的地址部分是本地地址。本地地址可以包含以下内容。
有关其他邮件传输的路由信息(例如 bob::vmsvax@gateway 或 smallberries%mill.uucp@gateway)
别名(例如 iggy.ignatz)
接收邮件程序负责确定地址的本地部分的含义。有关邮件程序的信息,请参阅邮件程序与 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 针对邮箱名称格式的约定
从 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。现在,向用户域之外发送邮件时,发件人的电子邮件地址会自动转换为全限定域名。
以下列表介绍了创建和管理邮件别名文件的方法。
可以创建在 NIS+ mail_aliases 表、NIS aliases 映射或本地 /etc/mail/aliases 文件中全局使用的邮件别名。另外,还可以创建和管理使用相同别名文件的邮递列表。
根据邮件服务的配置,可以通过使用 NIS 或 NIS+ 名称服务来管理别名,以维护全局 aliases 数据库。或者,也可以更新所有本地 /etc/mail/aliases 文件,以使别名保持同步。
用户还可以创建和使用别名。用户可以在其本地 ~/.mailrc 文件(仅供该用户使用)或在本地 /etc/mail/aliases 文件(可供任何用户使用)中创建别名。用户通常不能创建或管理 NIS 或 NIS+ 别名文件。
可在同一系统中提供三种必需的邮件配置元素,也可通过单独的系统来提供这些元素。
当用户要与域之外的网络通信时,还必须添加第四个元素,即邮件网关。有关更多信息,请参阅邮件网关。以下各节介绍了每个硬件组件。
邮件主机是在网络中指定作为主邮件计算机的计算机。站点中的其他系统会将无法传送的邮件转发给邮件主机。通过在本地 /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 文件,这可能是一个很困难并且耗时的过程。
如果有一台机器与 Internet 建立连接,则可将该机器配置为邮件网关。配置邮件网关之前,请仔细考虑站点的安全需求。您可能需要在公司网络与其他网络之间创建防火墙网关,并将该网关设置为邮件网关。有关任务信息,请参阅第 13 章,邮件服务(任务)中的如何设置邮件网关。
邮件服务包括许多彼此交互的程序和守护进程。本节介绍了与管理电子邮件相关的文件、程序、术语和概念。
从 Solaris 10 发行版开始,vacation 实用程序进行了增强,允许用户指定哪些传入邮件可以接收自动生成的回复。使用此增强功能,用户可以避免与不认识的人共享机密信息或联系人信息。来自垃圾邮件发件人或不认识的人的邮件将不会收到回复。
此增强功能可将传入的发件人电子邮件地址与 .vacation.filter 文件中的域或电子邮件地址的列表进行比较。该文件由用户创建,并保存在用户的起始目录中。如果找到了匹配的域或电子邮件地址,则会发送回复。如果没有找到,则不发送回复。
.vacation.filter 可能包含以下类似项:
company.com mydomain.com onefriend@hisisp.com anotherfriend@herisp.com |
请注意,每一行包含一个域或一个电子邮件地址。每项必须位于单独的一行中。要使发件人的电子邮件地址与某个电子邮件地址项匹配,除大小写之外,该匹配必须是精确匹配。发件人地址中的字母是大写还是小写将会忽略。要使发件人的电子邮件地址与某个域项匹配,该发件人的地址必须包含列出的域。例如,somebody@dept.company.com 和 someone@company.com 都可与域项 company.com 匹配。
有关更多信息,请参见 vacation(1) 手册页。
名称 |
类型 |
说明 |
---|---|---|
文件 |
用于处理 NIS+ 别名映射的程序。 |
|
文件 |
用户代理。 |
|
文件 |
用于以 SunOS 4.1 邮箱格式存储邮件的过滤器。 |
|
文件 |
用于列出邮件队列内容的程序。 |
|
文件 |
用于读取 /etc/mail/statistics 文件(如果存在)中存储的邮件统计信息的程序。 |
|
文件 |
用户代理。 |
|
文件 |
用于连接至邮件程序以进行地址验证和调试的程序。 |
|
文件 |
用于“取消编译”别名数据库的命令。请参阅 praliases(1) 手册页中提供的取消编译信息。 |
|
符号链接 |
指向 /usr/bin/mail 的符号链接。通常用于仅允许发送邮件的命令。 |
|
文件 |
用于设置自动回复邮件的命令。 |
名称 |
类型 |
说明 |
---|---|---|
文件 |
mailx 用户代理的缺省设置。 |
|
文件 |
邮件转发信息。 |
|
文件 |
通过运行 newaliases 创建的缺省二进制形式的邮件转发信息。 |
|
文件 |
通过运行 newaliases 创建的二进制形式的邮件转发信息。仍然可以使用,但从 Solaris 9 发行版开始,缺省情况下不会再使用该文件。 |
|
文件 |
通过运行 newaliases 创建的二进制形式的邮件转发信息。仍然可以使用,但从 Solaris 9 发行版开始,缺省情况下不会再使用该文件。 |
|
文件 |
mailx 用户代理的缺省设置。 |
|
符号链接 |
提供从主系统的此样例配置文件到 sendmail.cf 的符号链接是为了实现向下兼容。在 sendmail 版本 8.13 中,无需此文件。 |
|
文件 |
允许进行中继的所有域的列表。缺省情况下,仅本地域允许进行中继。 |
|
文件 |
用于邮件路由的配置文件。 |
|
文件 |
用于邮件提交程序 (mail submission program, MSP) 的新配置文件。有关更多信息,请参阅sendmail 版本 8.12 中的配置文件 submit.cf。 |
|
文件 |
在邮件主机的别名数太长时可以创建的可选文件。 |
|
文件 |
SMTP HELP 命令使用的帮助文件。 |
|
文件 |
用于列出侦听守护进程的 PID 并且现在位于 /var/run 中的文件。 |
|
文件 |
sendmail 统计文件。如果存在此文件,sendmail 会记录通过每个邮件程序的流量。以前,此文件名为 sendmail.st。 |
|
符号链接 |
提供从辅助系统的此样例配置文件到 sendmail.cf 的符号链接是为了实现向下兼容。在 sendmail 版本 8.13 中,无需此文件。 |
|
文件 |
用于列出执行某些邮件操作时可信任的用户(每行一个用户)的文件。缺省情况下,此文件中仅包含 root。不可信用户执行某些邮件操作时,将产生以下警告 X-Authentication-Warning:header being added to a message。 |
/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 目录的内容
名称 |
类型 |
说明 |
---|---|---|
文件 |
介绍配置文件。 |
|
文件 |
以前名为 cf/main-v7sun.mc。它是主配置文件。 |
|
文件 |
提供生成新配置文件的规则。 |
|
文件 |
邮件提交程序 (mail submission program, MSP) 的配置文件,用于提交邮件。 |
|
文件 |
以前名为 cf/subsidiary-v7sun.mc。它是 NFS 挂载了其他主机中的 /var/mail 的主机的配置文件。 |
|
目录 |
提供与站点有关的子域说明。 |
|
文件 |
来自 Berkeley 软件分发机构的普通域文件。 |
|
文件 |
域文件,可将 sendmail 的功能更改为类似于以前的 Solaris 版本的 sendmail。但是完全禁用了中继,因此将拒绝没有主机名的发件人地址和无法解析的域。 |
|
文件 |
缺省的域文件,可将 sendmail 的功能更改为类似于以前的 Solaris 版本的 sendmail。 |
|
目录 |
包含对特定主机的特定功能的定义。有关这些功能的完整说明,请参见 README。 |
|
目录 |
包含与站点无关的头文件。 |
|
目录 |
包含邮件程序的定义,包括 local、smtp 和 uucp 的定义。 |
|
目录 |
介绍各种操作系统环境。 |
|
文件 |
用于将缺省的本地邮件程序定义为 mail.local。 |
|
文件 |
用于将缺省的本地邮件程序定义为 mail.local。 |
|
文件 |
用于将本地邮件程序定义为 mail。 |
|
文件 |
用于将本地邮件程序定义为 mail.local(在 LMTP 模式下),启用 IPv6,将 /var/run 指定为 sendmail.pid 文件的目录。 |
名称 |
类型 |
说明 |
---|---|---|
mail.local |
文件 |
用于将邮件传送到邮箱的邮件程序。 |
sendmail |
文件 |
路由程序,也称为邮件传输代理。 |
smrsh |
文件 |
Shell 程序(限制 sendmail 的 shell),该程序使用 sendmail 的 “|program” 语法将 sendmail 可以运行的程序限制为 /var/adm/sm.bin 目录中列出的程序。有关对 /var/adm/sm.bin 中所包括内容的建议,请参阅 smrsh(1M) 手册页。要启用该程序,请在 mc 文件中包括此 m4 命令 FEATURE(`smrsh')。 |
|
符号链接 |
指向 /etc/mail/cf 目录的符号链接。有关更多信息,请参阅/etc/mail/cf 目录的内容。 |
如表 14–11 所示,还有几个其他文件和目录可用于邮件服务。
表 14–11 用于邮件服务的其他文件
名称 |
类型 |
说明 |
---|---|---|
/etc/default/sendmail |
文件 |
用于列出 sendmail 的启动脚本的环境变量。 |
/etc/shells |
文件 |
用于列出有效的登录 shell。 |
/etc/mail/cf/sh |
目录 |
包含 m4 生成过程和迁移帮助使用的 shell 脚本。 |
文件 |
用于检查 :include: 别名的权限以及 .forward 文件及其父目录路径是否具有正确权限。 |
|
文件 |
用于验证 sendmail 是否可确定全限定主机名。 |
|
文件 |
在数据库映射中查询和编辑用于 sendmail 的单个记录。 |
|
文件 |
邮件通知守护进程。 |
|
文件 |
生成二进制形式的加密映射。 |
|
符号链接 |
指向 /usr/lib/sendmail 的符号链接。用于创建二进制形式的别名数据库。以前位于 /usr/bin 中。 |
|
文件 |
sendmail 使用的错误消息记录程序。 |
|
文件 |
用于启动客户端远程邮件队列的 Perl 脚本。 |
|
文件 |
CDE(公用桌面环境)邮件用户代理 |
|
文件 |
用于已传送邮件的邮箱。 |
|
目录 |
客户机守护进程传送的邮件的存储器。 |
|
目录 |
主守护进程传送的邮件的存储器。 |
|
文件 |
用于列出侦听守护进程的 PID 的文件。 |
邮件服务由以下程序的组合提供,这些程序按图 14–2 的简图中所示进行交互。
下面对邮件程序的交互进行了说明。
用户使用程序(如 mailx)发送邮件。有关更多信息,请参见 mailx(1) 手册页。
邮件由生成它的程序收集,然后传递给 sendmail 守护进程。
sendmail 守护进程解析邮件中的地址(将其划分为可识别的段)。该守护进程使用配置文件 /etc/mail/sendmail.cf 中的信息来确定网络名的语法、别名、转发信息和网络拓扑。通过使用此信息,sendmail 可以确定邮件要到达收件人所必须采用的路由。
sendmail 守护进程将邮件传递给相应系统。
本地系统中的 /usr/lib/mail.local 程序将邮件传送至邮件收件人在 /var/mail/ username 目录中的邮箱。
通知收件人邮件已到达,收件人使用 mail、mailx 或类似程序检索邮件。
sendmail 可以使用不同类型的通信协议,如 TCP/IP 和 UUCP。
sendmail 可以实现 SMTP 服务器、邮件排队和邮递列表。
sendmail 可以通过使用符合以下命名约定的模式匹配系统来控制名称解释。
基于域的命名约定。通过域技术可以区分物理命名和逻辑命名问题。有关域的更多信息,请参阅邮件地址。
临时技术,如提供对于其他网络中的主机而言看似位于本地的网络名。
任意(早期)命名语法。
完全不同的命名方案。
Solaris 操作系统使用 sendmail 程序作为邮件路由器。以下列表介绍了该程序的一些功能。
sendmail 负责接收电子邮件并将其传送给本地传送代理,如 mail.local 或 procmail。
sendmail 是一个邮件传输代理,用于接受来自用户代理(如 mailx 和 Mozilla 邮件)的邮件并通过 Internet 将其路由至目标。
sendmail 通过以下方法来控制用户发送的电子邮件。
确定收件人的地址
选择合适的传送程序
以传送代理可以处理的格式重写地址
根据需要重新格式化邮件头
最后将已转换的邮件传递给邮件程序以进行传送
有关 sendmail 程序的更多信息,请参阅以下主题。
sendmail 程序支持三种邮件重新路由机制。您选择的机制取决于涉及的更改类型。
服务器更改
域范围的更改
面向一个用户的更改
此外,您选择的重新路由机制还会影响所需要的管理级别。请考虑以下选项。
一种重新路由机制是别名。
根据使用的文件类型,别名可在服务器范围内或名称服务范围内将名称映射为地址。
请考虑名称服务别名的以下优点和缺点。
使用名称服务别名文件允许从单个源中管理邮件重新路由更改。但是传播重新路由更改时,名称服务别名会产生延迟时间。
名称服务管理通常限制为一组选定的系统管理员。普通用户将不能管理此文件。
请考虑使用服务器别名文件的以下优点和缺点。
通过使用服务器别名文件,指定的服务器上能够成为 root 的任何用户都可管理重新路由。
传播重新路由更改时,服务器别名会产生很短的延迟时间或消除延迟时间。
更改仅会影响本地服务器,这在大多数邮件都发送至一台服务器时可以接受。但是,如果需要将此更改传播至许多邮件服务器,请使用名称服务。
普通用户将不能管理此更改。
有关更多信息,请参阅本章中的邮件别名文件。有关任务列表,请参阅第 13 章,邮件服务(任务)中的管理邮件别名文件(任务列表)。
第二种机制是转发。
通过此机制,用户可以管理邮件重新路由。本地用户可将其传入邮件重新路由至以下位置。
其他邮箱
不同的邮件程序
其他邮件主机
通过使用 .forward 文件可支持此机制。有关这些文件的更多信息,请参阅本章中的.forward 文件。有关任务列表,请参阅第 13 章,邮件服务(任务)中的管理 .forward 文件(任务列表)。
最后一种重新路由机制是包含。
通过此机制,用户可维护别名列表而不会要求 root 访问。要提供此功能,root 用户必须在服务器上的别名文件中创建相应的项。创建该项之后,用户即可根据需要重新路由邮件。有关包含的更多信息,请参阅本章中的/etc/mail/aliases 文件。有关任务列表,请参阅第 13 章,邮件服务(任务)中的管理邮件别名文件(任务列表)。
读取邮件的程序(如 /usr/bin/mailx)可以有自己的别名,该别名在邮件到达 sendmail 之前会进行扩展。sendmail 的别名可以来自许多名称服务源,如本地文件、NIS 或 NIS+。查找的顺序由 nsswitch.conf 文件确定。请参阅 nsswitch.conf(4) 手册页。
sendmail 很可靠。该程序旨在正确传送每封邮件。任何邮件都不会完全丢失。
sendmail 会尽可能使用现有软件进行传送。例如,用户会与邮件生成程序和邮件发送程序进行交互。提交邮件时,邮件生成程序会调用 sendmail,后者将邮件路由至正确的邮件程序。由于有些发送器可能是网络服务器,有些邮件程序可能是网络客户机,因此可将 sendmail 用作 Internet 邮件网关。有关该过程的更详细说明,请参见邮件程序的交互。
可将 sendmail 配置为用于包括多个网络的复杂环境。sendmail 会检查地址的内容及其语法,以确定要使用的邮件程序。
sendmail 使用配置文件来控制邮件配置,而不要求将该配置信息编译成代码。
用户可以维护各自的邮递列表。此外,各用户还可以指定各自的转发机制,而无需修改域范围的别名文件,该文件通常位于 NIS 或 NIS+ 维护的域范围别名中。
每个用户可以指定自定义邮件程序,以处理传入邮件。自定义邮件程序可以提供返回内容为“I am on vacation.”等类似邮件的功能。有关更多信息,请参见 vacation(1) 手册页。
sendmail 可将地址批处理至单独一台主机,以减少网络通信流量。
配置文件控制 sendmail 执行其功能的方法。配置文件可确定要选择的传送代理、地址重写规则以及邮件头格式。sendmail 程序使用 /etc/mail/sendmail.cf 文件中的信息来执行其功能。
Solaris 操作系统在 /etc/mail 目录中提供了两个缺省配置文件。
submit.cf,用于在邮件提交程序模式而非守护进程模式下运行 sendmail 的配置文件。有关更多信息,请参阅sendmail 版本 8.12 中的配置文件 submit.cf。
设置邮件客户机、邮件服务器、邮件主机或邮件网关时,请考虑以下情况:
要设置邮件主机或邮件网关,需要设置邮件配置所需的中继邮件程序和中继主机参数。有关任务信息,请参阅第 13 章,邮件服务(任务)中的设置邮件服务(任务列表)或生成 sendmail.cf 配置文件。请注意,在 sendmail 版本 8.13 中,不再需要 main.cf 文件。
以下列表介绍了可以根据站点的要求来更改的一些配置参数。
时间值,用于指定以下信息。
读取超时。
将邮件返回给发件人之前,该邮件在队列中保持未传送状态的时间长度。请参阅sendmail 版本 8.12 中新增的队列功能。有关任务列表,请参阅管理队列目录(任务列表)。
传送模式,用于指定传送邮件的快速程度。
负荷限制,可在繁忙期间提高效率。这些参数可防止 sendmail 尝试传送大型邮件、向许多收件人传送邮件以及向已长时间关闭的站点传送邮件。
维护别名的方法取决于使用别名的用户以及需要可更改别名的用户。每种别名类型都具有唯一的格式要求。
如果要查找任务信息,请参阅第 13 章,邮件服务(任务)中的管理邮件别名文件(任务列表)。
.mailrc 文件中列出的别名仅能由拥有该文件的用户进行访问。借助此限制,用户可以建立由其控制并且仅能由属主使用的别名文件。.mailrc 文件中的别名遵循以下格式。
alias aliasname value value value ... |
aliasname 是用户在发送邮件时使用的名称,value 是有效的电子邮件地址。
如果用户为 scott 建立的个人别名在名称服务中与 scott 的电子邮件地址不匹配,则会出现错误。人们尝试回复此用户生成的邮件时,邮件会路由至错误的人员。唯一的解决方法是使用其他任一别名机制。
知道别名名称和包含该文件的系统的主机名的任何用户都可以使用 /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 映射中的各项。原因是 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 表包含在本地域中用于标识系统或个人的名称。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 文件,以供 sendmail 以及其他程序用于重定向邮件或发送邮件。请参阅以下主题。
有关任务列表,请参阅第 13 章,邮件服务(任务)中的管理 .forward 文件(任务列表)。
以下列表介绍了可以避免或轻松解决问题的一些情况。
如果邮件未传送至预期的地址,请检查该用户的 .forward 文件。用户可能已将 .forward 文件放入了 host1 的起始目录,该文件会将邮件转发至 user@host2。邮件到达 host2 时,sendmail 会在 NIS 或 NIS+ 别名中检查 user 并将邮件发回至 user@host1。此路由将产生循环以及更多退回的邮件。
要避免安全问题,请勿将 .forward 文件放在 root 和 bin 帐户中。如有必要,请改用 aliases 文件转发邮件。
要使 .forward 文件成为邮件传送中的有效部分,请确保正确应用以下控制(主要是权限设置)。
.forward 文件必须只能由文件属主写入。此限制可以防止其他用户破坏安全性。
至起始目录的路径必须只能由 root 拥有和写入。例如,如果 .forward 文件位于 /export/home/terry 中,则 /export 和 /export/home 必须只能由 root 拥有和写入。
实际起始目录应只能由用户写入。
.forward 文件不能是符号链接,并且此文件不能包含多个硬链接。
可以创建一个 .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 文件。detail 字符串可以是除运算符字符之外的任意字符序列。运算符字符包括 .:%&!^[]+。通过使用此类型的文件,可以确定是否有其他人在您不知情的情况下使用您的电子邮件地址。例如,如果某个用户告诉其他人使用电子邮件地址 sandy+test1@example.com,该用户将能够识别将来传送给此别名的任何邮件。缺省情况下,将根据别名和 .forward+detail 文件对发送至 sandy+test1@example.com 别名的所有邮件进行检查。如果未找到任何匹配项,邮件将转而传送至 sandy@example.com,但用户可以看到 To: 邮件头中的更改。
此文件用于存储 sendmail 的启动选项,以免在升级主机时删除这些选项。可以使用以下变量。
选择要用于客户机守护进程的其他选项,该守护进程会查看仅客户机队列 (/var/spool/clientmqueue) 并可用作客户机队列运行程序。不会进行任何语法检查,因此在更改此变量时请务必小心。
与 QUEUEINTERVAL 选项类似,CLIENTQUEUEINTERVAL 用于设置邮件队列运行的时间间隔。但是,CLIENTQUEUEINTERVAL 选项将控制客户机守护进程的功能而非主守护进程的功能。通常,主守护进程可将所有邮件都传送至 SMTP 端口。但是,如果邮件负荷过高或主守护进程未运行,则邮件会进入仅客户机队列 /var/spool/clientmqueue。然后,检查仅客户机队列的客户机守护进程将用作客户机队列处理器。
可使 SMTP 客户机和服务器立即交互,而无需等待达到队列运行间隔,该间隔是固定的。服务器可以立即传送队列中转至指定主机的部分。有关更多信息,请参阅 etrn(1M) 手册页。
选择用于启动 sendmail 的模式。使用 -bd 选项或不予以定义。
选择要用于主守护进程的其他选项。不会进行任何语法检查,因此在更改此变量时请务必小心。
设置邮件队列在主守护进程中的运行间隔。# 可以是一个正整数,后跟 s(秒)、m(分钟)、h(小时)、d(天)或 w(星期)。在启动 sendmail 之前会先检查语法。如果间隔为负或者该项不是以合适字母结尾,则会忽视该间隔,sendmail 将以 15 分钟的队列间隔启动。
启用一个在队列运行间隔之间休眠的持久性队列运行程序,而不是为每个队列运行间隔启用一个新队列运行程序。可将此选项设置为 p,这是唯一可用的设置。否则,将不设置此选项。
邮件在传送过程中所遵循的路径取决于客户机系统的设置以及邮件域的拓扑。邮件主机或邮件域每增加一个级别,便需要多进行一次别名解析,但路由过程在大多数主机上基本相同。
可将客户机系统设置为在本地接收邮件。在本地接收邮件即是在本地模式下运行 sendmail。本地模式是所有邮件服务器和一些客户机的缺省模式。在本地模式下的邮件服务器或邮件客户机上,邮件通过以下方式进行路由。
以下示例假定您使用的是 sendmail.cf 文件中设置的缺省规则。
如果可能,请扩展邮件别名,并重新启动本地路由进程。
邮件地址是通过检查名称服务中的邮件别名并替换新值(如果找到新值)来扩展的。新别名随后会再次进行检查。
如果邮件是本地的,则将其传送至 /usr/lib/mail.local。
邮件将传送至本地邮箱。
如果邮件地址中包括此邮件域内的一台主机,则将邮件传送至该主机。
如果地址中不包括此域内的主机,则将邮件转发至邮件主机。
邮件主机使用与邮件服务器相同的路由进程。但是,邮件主机可以接收发往域名以及主机名的邮件。
本节介绍应用于 sendmail 和名称服务的域名。此外,本节还介绍了有效使用名称服务的规则以及 sendmail 与名称服务的特定交互。有关详细信息,请参阅以下主题。
如果要查找相关的任务信息,请参阅第 13 章,邮件服务(任务)中的如何使用 DNS 和sendmail或管理邮件别名文件(任务列表)。
标准的 sendmail.cf 文件使用邮件域来确定是直接传送还是通过邮件主机传送邮件。域内邮件通过直接的 SMTP 连接传送,而域间邮件则会转发至邮件主机。
在安全网络中,仅会对少数选定的主机进行授权,允许其生成向外部目标发送的包。即使主机具有邮件域外部的远程主机的 IP 地址,也不能保证可以建立 SMTP 连接。标准的 sendmail.cf 假定以下情况成立。
未授权当前主机直接向邮件域外部的主机发送包。
邮件主机能够将邮件转发给授权主机,该主机可以直接将包传输给外部主机。实际上,邮件主机可以是授权主机。
通过这些假设,邮件主机将负责传送或转发域间邮件。
sendmail 可对名称服务强加各种要求。为增强您对这些要求的理解,本节将首先介绍邮件域与名称服务域之间的关系。然后,本节会介绍各种要求。请参阅以下主题。
邮件域名必须是名称服务域名的后缀。例如,如果名称服务的域名为 A.B.C.D,则邮件域名可能是以下各项之一。
A.B.C.D
B.C.D
C.D
D
最初建立时,邮件域名通常与名称服务域名相同。随着网络规模的变大,名称服务域可以划分为几个较小的部分,以使名称服务更易于管理。但是,为提供一致的别名,邮件域通常保持不划分状态。
本节介绍 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) 手册页。
以下列表介绍了 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 域。
有关任务信息,请参阅第 13 章,邮件服务(任务)中的管理邮件别名文件(任务列表)。
以下列表介绍了 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 章,邮件服务(任务)中的如何使用 DNS 和sendmail和管理邮件别名文件(任务列表)。
以下列表介绍了 sendmail 与 NIS+ 的交互并提供了一些指导。
邮件域名-如果要将 NIS+ 设置为主名称服务,则 sendmail 可检查 NIS+ sendmailvars 表中的邮件域。此 NIS+表包含一个关键字列和一个值列。要设置邮件域,必须向该表中添加一项。此项应将关键字列设置为字符串 maildomain,将值列设置为邮件域名。例如 admin.acme.com。尽管 NIS+ 允许 sendmailvars 表中包含任何字符串,但要使邮件系统正常工作,仍需应用后缀规则。可以使用 nistbladm 将 maildomain 项添加到 sendmailvars 表中。请注意,在以下示例中,邮件域是 NIS+ 域的后缀。
nistbladm -A key="maildomain" value=<mail domain> sendmailvars.org_dir.<NIS+ domain> |
Mailhost 主机名-必须在 NIS+ 主机表中具有一个 mailhost 项。
完整主机名-NIS+ 可以“识别”完整主机名。遵循常规的 NIS+ 设置过程即可满足此要求。
匹配完整主机名和短主机名-要满足此要求,可以复制主机表中的项。或者,也可以将用户名称服务域中的所有主机项都输入到邮件域级别的主主机表中。
多个 NIS 域在一个邮件域中-要满足此要求,可复制所有主机表中的项。或者,也可以将用户名称服务域中的所有主机项都输入到邮件域级别的主主机表中。比较有效的方法是,将多个逻辑或物理主机表合并为一个主机表。因此,在共享一个通用邮件域的多个名称服务域中,不能重用相同的主机名。
有关任务信息,请参阅第 13 章,邮件服务(任务)中的管理邮件别名文件(任务列表)。
以下列表介绍了 sendmail 与 NIS+ 和 DNS 的交互并提供了一些指导。
邮件域名-如果要将 NIS+ 设置为主名称服务,则 sendmail 可检查 NIS+ sendmailvars 表中的邮件域。此 NIS+ 表包含一个关键字列和一个值列。要设置邮件域,必须向该表中添加一项。此项应将关键字列设置为字符串 maildomain,将值列设置为邮件域名。例如 admin.acme.com。尽管 NIS+ 允许 sendmailvars 表中包含任何字符串,但要使邮件系统正常工作,仍需应用后缀规则。可以使用 nistbladm 将 maildomain 项添加到 sendmailvars 表中。请注意,在以下示例中,邮件域是 NIS+ 域的后缀。
nistbladm -A key="maildomain" value=<mail domain> sendmailvars.org_dir.<NIS+ domain> |
Mailhost 主机名-如果网络同时使用 NIS+ 和 DNS 作为主机数据库源,则可将 mailhost 项放入 NIS+ 或 DNS 主机表中。请确保用户在 /etc/nsswitch.conf 文件中同时包括 NIS+ 和 DNS 作为主机数据库源。
完整主机名-NIS+ 和 DNS 都可以“识别”完整主机名。遵循常规 NIS+ 和 DNS 设置过程即可满足此要求。
匹配完整主机名和短主机名-对于 NIS+ 主机表中的每个主机项,必须在 DNS 中具有对应的主机项。
多个 NIS 域在一个邮件域中-要满足此要求,可复制所有主机表中的项。或者,也可以将用户名称服务域中的所有主机项都输入到邮件域级别的主主机表中。
有关任务信息,请参阅第 13 章,邮件服务(任务)中的管理邮件别名文件(任务列表)和如何使用 DNS 和sendmail。
从 Solaris 10 发行版开始,版本 8.13 为缺省版本。虽然此新版本的 sendmail 提供了许多新增功能,但最重要的是添加了 FallBackSmartHost 选项。由于此选项,您无需再使用 main.cf 和 subsidiary.cf。main.cf 文件用于支持 MX 记录的环境中。subsidiary.cf 文件用于不具备完全功能的 DNS 的环境中。上述环境使用智能主机,不使用 MX 记录。FallBackSmartHost 选项可提供统一的配置。此选项的作用与所有环境最不可能首选的 MX 记录类似。要确保邮件传送到客户机,此选项(如果启用)需提供一台正确连接的(或智能)主机,此主机将用作出现故障的 MX 记录的备份(或故障转移)。
有关版本 8.13 的更多信息,请参见以下各节:
此外,从 Solaris 10 1/06 发行版开始,SMTP 运行时可以使用传输层安全性 (Transport Layer Security, 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 连接都不安全,因此服务器和客户机可能会保留不安全的连接。保留还是拒绝连接由服务器和客户机的配置来确定。
缺省情况下,不支持在运行 SMTP 时使用 TLS。SMTP 客户机发出 STARTTLS 命令时,将启用 TLS。必须先设置允许 sendmail 使用 TLS 的证书,然后 SMTP 客户机才能发出此命令。请参见如何设置 SMTP 以使用 TLS。请注意,此过程包括定义新的配置文件选项和重新生成 sendmail.cf 文件。
下表介绍了用于在运行 SMTP 时使用 TLS 的配置文件选项。如果要声明其中的任何选项,请使用以下语法之一:
O OptionName=argument # for the configuration file
-O OptionName=argument # for the command line
define(`m4Name',argument) # for m4 configuration
选项 |
说明 |
---|---|
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: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
ClientKeyFile
不需要定义其他选项。
下表介绍了 STARTTLS 命令使用的宏。
表 14–14 用于在运行 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。 |
有关更多信息,请参见以下内容:
Sendmail Installation and Operation Guide-http://people.freenet.de/slgig/op_en/rules.html
cf/README for sendmail-http://people.freenet.de/slgig/op_en/rules.html
作为用于定义在 Internet 中运行的邮件程序的标准邮件协议,SMTP 不是一种端对端机制。由于此协议限制,通过 SMTP 的 TLS 安全性不包括邮件用户代理。邮件用户代理用作用户与邮件传输代理(如 sendmail)之间的接口。
另外,邮件也可以在多台服务器之间路由。为了实现完整的 SMTP 安全性,整个 SMTP 连接链必须具有 TLS 支持。
最后,还必须考虑在每对服务器之间或客户机和服务器对之间的协商身份验证和保密性的级别。有关更多信息,请参见《系统管理指南:安全性服务》中的“验证服务”。
下表介绍了在 sendmail 版本 8.13 中新增的可用命令行选项。sendmail(1M) 手册页介绍了其他命令行选项。
表 14–16 sendmail 版本 8.13 中可用的命令行选项
选项 |
说明 |
---|---|
-D logfile |
将调试输出发送至指明的 logfile,而不是将此信息包括在标准输出中。 |
-q[!]Qsubstr |
指定对包含此 substr 的隔离作业的处理,前者是隔离 reason 的子字符串。请参见 -Qreason 选项的说明。如果添加 !,此选项将处理不包含此 substr 的隔离作业。 |
-Qreason |
以此 reason 隔离标准队列项。如果未给定 reason,则隔离的队列项将取消隔离。此选项可与 -q[!]Qsubstr 选项结合使用。substr 是 reason 的一部分(或子字符串)。 |
下表介绍了添加和修订的配置文件选项。如果要声明其中的任何选项,请使用以下语法之一。
O OptionName=argument # for the configuration file -O OptionName=argument # for the command line define(`m4Name',argument) # for m4 configuration |
选项 |
说明 |
---|---|
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 如果设置 postmilter,sendmail 将推迟同步队列文件,直到所有 milters 都已发出接受邮件的信号为止。要使此参数可用,sendmail 必须作为 SMTP 服务器运行。否则,postmilter 的运行将类似于使用 true 参数。 |
下表介绍了添加和修订的 FEATURE() 声明。此 m4 宏使用以下语法。
FEATURE(`name', `argument') |
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 功能的邮件程序,则可将其路径名指定为第二个参数,并且可在第三个参数中指定传递给第二个参数的参数。例如:
|
|
mtamark |
对“在带有 TXT RR 的反向 DNS 中标记邮件传输代理”(MTAMark) 提供实验支持。有关详细信息,请参见 /etc/mail/cf/README。 |
|
ratecontrol |
与 access_db 规则集结合使用,用于控制主机的连接速率。有关详细信息,请参见 /etc/mail/cf/README。 |
|
use_client_ptr |
如果启用此 FEATURE(),规则集 check_relay 将使用参数 $&{client_ptr} 覆盖其第一个参数。 |
TCP 包装提供了一种实现访问权控制的方法,即根据访问控制列表 (access control list, ACL) 检查请求特定网络服务的主机的地址。请求将相应地被授权或拒绝。除了提供此项访问控制机制外,TCP 包装还会记录对网络服务的主机请求,这是一项有用的监视功能。可能受到访问控制的网络服务示例包括 rlogind、telnetd 和 ftpd。
从版本 8.12 开始,sendmail 将允许使用 TCP 包装。此项检查不会忽略其他安全标准。通过在 sendmail 中启用 TCP 包装,在准许请求之前将进行检查,以验证网络请求的来源。请参见 hosts_access(4) 手册页。
从 Solaris 9 发行版开始,inetd(1M) 和 sshd(1M) 中将支持 TCP 包装。
有关 ACL 的信息,请参见《系统管理指南:安全性服务》中的“使用访问控制列表保护文件”。
从版本 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 配置文件用于守护进程模式。使用此文件时,sendmail 用作邮件传输代理 (mail transfer agent, MTA),该代理由 root 启动。
/usr/lib/sendmail -L sm-mta -bd -q1h |
请参见以下列出的 sendmail.cf 的其他特性:
除添加 submit.cf 之外,在功能方面还有以下更改:
从 sendmail 版本 8.12 开始,仅有 root 可以运行邮件队列。有关更多详细信息,请参阅 mailq(1) 手册页中介绍的更改。有关新任务的信息,请参阅管理队列目录(任务列表)。
邮件提交程序模式运行时无需 root 权限,这可能会导致 sendmail 无法访问某些文件(例如 .forward 文件)。因此,sendmail 的 -bv 选项为用户提供的输出可能具有误导性。没有切实可行的解决方法。
在 sendmail 版本 8.12 之前,如果不在守护进程模式下运行 sendmail,则只会阻止传入邮件的传送。从 sendmail 版本 8.12 开始,如果不使用缺省配置运行 sendmail 守护进程,则还会阻止外发邮件的传送。客户机队列运行程序(又称为邮件提交程序)必须能够将邮件提交至本地 SMTP 端口上的守护进程。如果客户机队列运行程序尝试打开与本地主机的 SMTP 会话,并且守护进程未侦听 SMTP 端口,则邮件将保留在队列中。缺省配置确实会运行守护进程,因此使用缺省配置时不会出现此问题。但是,如果已禁用守护进程,请参阅使用备用配置管理邮件传送以寻找解决此问题的方法。
下表介绍了 sendmail 的新增或过时的命令行选项。sendmail(1M) 手册页介绍了其他命令行选项。
表 14–19 sendmail 版本 8.12 中新增或过时的命令行选项
选项 |
说明 |
---|---|
表示即使操作模式未指明初始邮件提交,仍希望使用配置文件 submit.cf。有关 submit.cf 的更多信息,请参阅sendmail 版本 8.12 中的配置文件 submit.cf。 |
|
表示即使操作模式指明初始邮件提交,仍希望使用配置文件 sendmail.cf。有关更多信息,请参阅sendmail 版本 8.12 中的配置文件 submit.cf。 |
|
表示要列显每个队列中的项数。 |
|
表示通过命令行提交的邮件将用于中继,而不用于初始提交。如果地址不是全限定地址,则会拒绝该邮件。不会进行公理化。 如 ftp://ftp.sendmail.org 上的 sendmail 分发所包含的发行说明所述,将来的发行版中可能会拒绝形式不正确的邮件。 |
|
将用于系统日志消息的标识符设置为所提供的 tag。 |
|
仅处理其中一个收件人包含此 substring 的作业。添加 ! 之后,该选项仅处理其中一个收件人不包含此 substring 的作业。 |
|
仅处理队列 ID 中包含此 substring 的作业。添加 ! 之后,该选项仅处理队列 ID 中不包含此 substring 的作业。 |
|
仅处理发件人包含此 substring 的作业。添加 ! 之后,该选项仅处理发件人不包含此 substring 的作业。 |
|
一次处理队列中保存的邮件而不使用 fork 系统调用,并在前台运行该进程。请参阅 fork(2) 手册页。 |
|
仅处理 name 队列组中的邮件。 |
|
使用为每个队列派生的单个子项并以特定时间间隔来处理队列中保存的邮件。该子项在队列的每两次运行之间处于休眠状态。这一新选项与 -qtime 类似,后者会定期派生一个子项来处理队列。 |
|
如 ftp://ftp.sendmail.org 上的 sendmail 分发所包含的发行说明所述,在版本 8.12 之前不提供此选项。邮件用户代理应使用 -G 参数。 |
下表介绍了新增的用于 PidFile 和 ProcessTitlePrefix 选项的宏处理参数。有关这些选项的更多信息,请参见 sendmail(1M) 手册页。
表 14–20 用于PidFile 和 ProcessTitlePrefix 选项的参数
宏 |
说明 |
---|---|
${daemon_addr} |
用于提供守护进程地址(例如 0.0.0.0) |
${daemon_family} |
用于提供守护进程系列(例如 inet 和 inet6) |
${daemon_info} |
用于提供守护进程信息(例如 SMTP+queueing@00:30:00) |
${daemon_name} |
用于提供守护进程名称(例如 MSA) |
${daemon_port} |
用于提供守护进程端口(例如 25) |
${queue_interval} |
用于提供队列运行间隔(例如 00:30:00) |
下表介绍了新增的、保留以供 sendmail 程序使用的宏。这些宏的值在内部指定。有关更多信息,请参见 sendmail(1M) 手册页。
表 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)、主机 ($@host) 和用户 ($:addr) 中解析出的右侧 (right-hand side, RHS) 三重参数。 |
本节中的表介绍了新增的用于生成 sendmail 配置文件的宏。
表 14–22 新增的用于生成 sendmail 配置文件的宏
宏 |
说明 |
---|---|
LOCAL_MAILER_EOL |
用于覆盖本地邮件程序缺省的行结束字符串。 |
LOCAL_MAILER_FLAGS |
用于在缺省情况下添加 Return-Path: 头。 |
MAIL_SETTINGS_DIR |
用于包含邮件设置目录的路径(包括结尾斜杠)。 |
MODIFY_MAILER_FLAGS |
用于改进 *_MAILER_FLAGS。此宏可以设置、添加或删除标志。 |
RELAY_MAILER_FLAGS |
用于为中继邮件程序定义新增标志。 |
使用以下宏可以配置在 sendmail 降低传送速度之前可以接收的命令的最大数目。可在编译时设置这些 MAX 宏。下表中的最大值也表示当前的缺省值。
表 14–23 新增的 MAX 宏
宏 |
最大值 |
每个宏检查的命令 |
---|---|---|
25 |
未知命令 |
|
20 |
NOOP、VERB、ONEX、 XUSR |
|
3 |
HELO、EHLO |
|
6 |
VRFY、EXPN |
|
8 |
ETRN |
通过将宏的值设置为零可以禁用宏检查。
本节中的表介绍了 sendmail 中新增和修订的 m4 配置宏。可使用以下语法来声明这些宏。
symbolic_name(`value') |
如果需要生成新的 sendmail.cf 文件,请参阅第 13 章,邮件服务(任务)中的生成 sendmail.cf 配置文件。
表 14–24 sendmail 中新增和修订的 m4 配置宏
m4 宏 |
说明 |
---|---|
FEATURE() |
有关详细信息,请参阅sendmail 版本 8.12 中对 FEATURE() 声明的更改。 |
此宏可向类 w ($=w) 中添加项。 |
|
用于定义不能伪装的主机或子域的新宏。 |
|
现在,此宏可用于用括号括起来的地址,如 user@[host]。 |
|
使用这些宏时,请在 $=R 中包括 $={VirtHost}。请记住,$=R 是可以中继的主机名集合。 |
有关对 FEATURE() 声明的特定更改信息,请参阅下表。
要使用新增和修订的 FEATURE 名称,请使用以下语法。
FEATURE(`name', `argument') |
如果需要生成新的 sendmail.cf 文件,请参阅第 13 章,邮件服务(任务)中的生成 sendmail.cf 配置文件。
表 14–25 新增和修订的 FEATURE() 声明
FEATURE() 的名称 |
说明 |
---|---|
参数:请参阅以下段落中的示例。 使用此新增的 FEATURE(),可以在由发件人地址和收件人地址组成的访问映射中查找关键字。此 FEATURE() 由字符串 <@> 来分隔。例如 sender@sdomain<@>recipient@rdomain。 |
|
参数:friend(用于启用垃圾邮件-朋友测试)或 hater(用于启用垃圾邮件-攻击者测试)。 可延迟所有检查的新增 FEATURE()。通过使用 FEATURE(`delay_checks'),在客户机分别连接或发出 MAIL 命令时,将不调用规则集 check_mail 和 check_relay, 而是由 check_rcpt 规则集调用上述规则集。有关详细信息,请参阅 /etc/mail/cf/README 文件。 |
|
参数:此 FEATURE() 最多可以接受两个参数:
新增的 FEATURE(),可以多次使用以检查 DNS 查找的返回值。请注意,通过此 FEATURE() 可以指定临时查找失败时的行为。 |
|
参数:域名。 新增的 FEATURE(),它是 dnsbl 的增强版本,可用于检查 DNS 查找的返回值。有关更多信息,请参阅 /etc/mail/cf/README。 |
|
参数:None。 新增的 FEATURE(),使用它还可以将 genericstable 应用于 $=G 的子域。 |
|
参数:有关详细信息,请参阅 http://www.sendmail.org 中的 “Release Notes”。 可实现 LDAP 地址路由的新增 FEATURE()。 |
|
参数:具有 LMTP 功能的邮件程序的路径名。缺省为 mail.local,它在此 Solaris 发行版中具有 LMTP 功能。 该 FEATURE() 现在可将本地邮件程序的传送状态通知 (delivery status notification, DSN) 诊断代码类型设置为正确的值 SMTP。 |
|
参数:无。 可用于避免伪装本地邮件程序的新增 FEATURE()。 |
|
参数:无。 也可用于在访问映射中查找 .domain 的新增 FEATURE()。 |
|
参数:canonify_hosts 或无参数。 该 FEATURE() 现在包括以下功能。 将 CANONIFY_DOMAIN 或 CANONIFY_DOMAIN_FILE 指定的一系列域传递给 $[ 和 $] 运算符进行公理化。 如果将 canonify_hosts 指定为其参数,则可以对仅包含主机名的地址(如 <user@host>)进行公理化。 向包含多个组成部分的地址添加尾随句点。 |
|
参数:无。 这一新增的 FEATURE() 可禁用 m4 生成的配置文件中 sendmail 的缺省设置,以“侦听”多个不同端口,这是 RFC 2476 的实现。 |
|
参数:reject(不允许使用 ! 标记)或 nospecial(允许使用 ! 标记)。 该 FEATURE() 可确定是否允许在地址的本地部分中使用 ! 标记。 |
|
参数:无。 该 FEATURE() 现在可提供标准配置的完整规则集,从而允许执行防垃圾邮件检查。 |
|
参数:无。 通过这一新增的 FEATURE(),可在 sendmail 将地址传递给本地传送代理时保留地址中的 +detail 部分。 |
|
参数:无。 如果使用 LUSER_RELAY,则通过这一新增的 FEATURE() 可以保留收件人主机的名称。 |
|
参数:无。 通过这一新增的 FEATURE(),可以选择基于完整电子邮件地址或基于收件人的域的队列组。 |
|
参数:domain 是一个可选参数。 如果邮件发件人在访问映射中列为 RELAY 并使用 From: 头行来标记,则通过这一新增的 FEATURE() 可进行中继。如果给定可选的 domain 参数,则还会检查邮件发件人的域部分。 |
|
参数:无。 现在,可以使用该 FEATURE() 来应用 $={VirtHost},这是一个新类,用于匹配可由 VIRTUSER_DOMAIN 或 VIRTUSER_DOMAIN_FILE 填充的 virtusertable 项。 FEATURE(`virtuser_entire_domain') 还可以将类 $={VirtHost} 应用于整个子域。 |
表 14–26 不支持的 FEATURE() 声明
FEATURE() 的名称 |
替代 |
---|---|
MASQUERADE_AS(`$S') 将替代 /etc/mail/cf/subsidiary.mc 中的FEATURE(`remote_mode')。$S 是 sendmail.cf 中的 SMART_HOST 值。 |
|
FEATURE(`genericstable')。 |
|
FEATURE(`genericstable')。 |
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') 之后。
有关邮件程序的更多信息,请参阅邮件程序与 sendmail。如果需要生成新的 sendmail.cf 文件,请参阅第 13 章,邮件服务(任务)中的生成 sendmail.cf 配置文件。
下表介绍了新增的传送代理标志,缺省情况下不会设置这些标志。这些单字符标志是布尔型的。通过在配置文件的 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, |
标志 |
说明 |
---|---|
% |
除非使用 ETRN 请求或以下队列选项之一选择排队的邮件,否则使用此标志的邮件程序不会尝试向邮件的初始收件人或队列运行中传送邮件:-qI、-qR 或 -qS。 |
1 |
此标志可禁用邮件程序发送空字符的功能(例如 \0)。 |
2 |
此标志可禁用 ESMTP 并要求改用 SMTP。 |
6 |
此标志可使邮件程序将头缩减至 7 位。 |
下表介绍了新增的可用于 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 目录中的等式定义。
此发行版可支持多个队列目录。要使用多个队列,请在配置文件中提供以星号 (*) 结尾的 QueueDirectory 选项值,如以下示例所示。
O QueueDirectory=/var/spool/mqueue/q* |
选项值 /var/spool/mqueue/q* 使用以 “q” 开头的所有目录(或指向这些目录的符号链接)作为队列目录。 请勿在 sendmail 运行时更改队列目录结构。 除非在非守护进程队列运行中使用冗余标志 (-v),否则队列运行会创建一个单独进程来运行每个队列。新项将随机指定给队列。
新增的队列文件命名系统使用的文件名保证在 60 年内唯一。使用此系统,可在不使用复杂的文件系统锁定的情况下指定队列 ID,并简化排队的项在队列之间的移动。
从版本 8.12 开始,仅有 root 才能运行邮件队列。有关更多详细信息,请参阅 mailq(1) 手册页中介绍的更改。有关新任务的信息,请参阅管理队列目录(任务列表)。
为适应信封拆分,现在队列文件名长度为 15 个字符,而不是 14 个字符。将不再支持名称限制为 14 个字符的文件系统。
有关任务信息,请参阅管理队列目录(任务列表)。
以下列表介绍了在将轻量目录访问协议 (Lightweight Directory Access Protocol, LDAP) 用于 sendmail 时的一些更改。
LDAPROUTE_EQUIVALENT() 和 LDAPROUTE_EQUIVALENT_FILE() 允许指定等效的主机名,这些主机名将替换为用于 LDAP 路由查找的伪装域名。有关更多信息,请参阅 /etc/mail/cf/README。
如 ftp://ftp.sendmail.org 上的分发所包含的发行说明所述,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 特殊字符应用字面含义。
以下示例显示了这些标记在用于 “*” 查找时的差异。
表 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 |
限制要返回的匹配项数。 |
原有的 [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 |
不再用作第一个邮件程序参数 |
集 |
说明 |
---|---|
将在头之间收集的信息关联并检查是否缺少头。此规则集用于宏存储映射,并在收集所有头后调用。 |
|
使用 ETRN 命令(与 check_rcpt 使用 RCPT 类似)。 |
|
使用 EXPN 命令(与 check_rcpt 使用 RCPT 类似)。 |
|
使用 VRFY 命令(与 check_rcpt 使用 RCPT 类似)。 |
以下列表介绍了新增的规则集功能。
编号的规则集也已命名,但仍然可以按编号访问相应的规则集。
H 头配置文件命令允许为头检查指定缺省的规则集。仅当未对个别头指定各自的规则集时,才会调用此规则集。
如果配置文件的版本为 9 或更高版本,则不删除规则集中的注释(即括号内的文本)。 例如,以下规则可匹配输入 token (1),但不匹配输入 token。
R$+ (1) $@ 1 |
sendmail 即使由于 TCP 包装或 check_relay 规则集而拒绝命令,也会接受 SMTP RSET 命令。
如果多次设置 OperatorChars 选项,则会收到警告。 另外,请勿在定义规则集之后设置 OperatorChars。
如果声明的规则集无效,则会忽略该规则集的名称以及其中的各行。该规则集行不会添加至 S0。
从 Solaris 10 发行版开始,为了支持只读的 /usr 文件系统,/usr/lib/mail 目录的内容已移至 /etc/mail/cf 目录。有关详细信息,请参阅/etc/mail/cf 目录的内容。但请注意,shell 脚本 /usr/lib/mail/sh/check-hostname 和 /usr/lib/mail/sh/check-permissions 现在位于 /usr/sbin 目录中。请参见用于邮件服务的其他文件。为了实现向下兼容,符号链接指向每个文件的新位置。
/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。
local-host-names 文件现在位于 /etc/mail/local-host-names 中。在升级过程中,如果检测到旧名称 (/etc/mail/sendmail.cw) 而未检测到新名称,则会创建从旧名称到新名称的硬链接。否则,不会进行任何更改。缺省内容的长度为零。
从 8.12 版本的 sendmail 开始,在配置中使用的 IPv6 地址应以 IPv6: 标记作为前缀,以正确标识地址。如果不标识 IPv6 地址,则不会使用前缀标记。