本章介绍如何设置和管理邮件服务。如果您不熟悉邮件服务管理,请阅读第 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。