系统管理指南:网络服务

第 4 部分 邮件服务主题

本节提供有关邮件服务的概述、任务和参考信息。

第 12 章 邮件服务(概述)

设置和维护电子邮件服务涉及对日常网络操作而言非常重要的复杂任务。作为网络管理员,您可能需要扩展现有的邮件服务。或者,您可能需要在新的网络或子网中设置邮件服务。有关邮件服务的各章节可帮助您规划和设置网络的邮件服务。本章提供了指向 sendmail 中新功能的说明的链接,及其他信息源的列表。本章还将概述建立邮件服务所需的软件和硬件组件。

有关如何设置和管理邮件服务的过程信息,请参见第 13 章,邮件服务(任务)。有关详细信息,请参阅邮件服务任务列表

有关邮件服务组件的更详细说明,请参见第 14 章,邮件服务(参考)。本章还将介绍邮件服务程序和文件、邮件路由过程、sendmail 与名称服务的交互,以及 sendmail 8.13 版的功能。请参见sendmail 版本 8.13 中的更改

邮件服务的新增功能

本节介绍有关 Solaris 10 发行版和 Solaris 10 1/06 发行版中新功能的信息。

Solaris 10 1/06 发行版中的变化

从 Solaris 10 1/06 发行版开始,sendmail 支持使用传输层安全性 (Transport Layer Security, TLS) 的 SMTP。有关更多信息,请参见以下内容:

有关 Solaris 10 1/06 发行版中功能的完整列表,请参见 《Solaris 10 新增功能》

Solaris 10 发行版中的变化

从 Solaris 10 发行版开始,sendmail 的缺省版本为 8.13 版。有关 8.13 版和其他变化的信息,请参见以下内容:

另外,邮件服务由服务管理工具管理。可以使用 svcadm 命令对此服务执行启用、禁用或重新启动等管理操作。可以使用 svcs 命令查询该服务的状态。有关服务管理工具的更多信息,请参见 smf(5) 手册页和《系统管理指南:基本管理》中的第 14  章 “管理服务(概述)”

其他 sendmail 信息源

以下是有关 sendmail 的其他信息源的列表。

邮件服务组件介绍

建立邮件服务需要许多软件和硬件组件。以下各节对这些组件进行了简要介绍。这些节中还提供了用于说明这些组件的一些术语。

第一节软件组件概述定义了在讨论邮件传送系统的软件部分时使用的术语。下一节硬件组件概述集中介绍邮件配置中硬件系统的功能。

软件组件概述

下表介绍了邮件系统的一些软件组件。有关所有软件组件的完整说明,请参阅软件组件

组件 

说明 

.forward 文件

可以在用户的起始目录中设置以重定向邮件,或将邮件自动发送到程序的文件 

邮箱 

邮件服务器(电子邮件的最终目标)上的文件 

邮件地址 

包含收件人姓名和邮件将传送到的系统的地址 

邮件别名 

邮件地址中使用的备选名称 

邮件队列 

需要邮件服务器处理的邮件的集合 

邮寄主管 

用于报告问题和询问有关邮件服务问题的特殊邮件别名 

sendmail 配置文件 

包含邮件路由需要的所有信息的文件 

硬件组件概述

邮件配置需要以下三种元素,您可以在同一系统中合并这三者,也可以在不同的系统中提供。

如果用户要与所在域之外的网络通信,则还必须添加第四种元素,邮件网关。

图 12–1 说明了一种典型的电子邮件配置,该配置使用三种基本邮件元素和一个邮件网关。

图 12–1 典型电子邮件配置

说明邮件网关、邮件主机、邮件服务器、邮箱和客户机之间的相关性的示图。

硬件组件中将详细介绍每一元素。

第 13 章 邮件服务(任务)

本章介绍如何设置和管理邮件服务。如果您不熟悉邮件服务管理,请阅读第 12 章,邮件服务(概述),以了解有关邮件服务组件的介绍。本章还将介绍典型的邮件服务配置,如图 12–1 中所示。通过以下列表,可以帮助您查找本章中涵盖的多组相关过程。

有关邮件服务组件的更详细说明,请参见第 14 章,邮件服务(参考)。此外,本章还将介绍邮件服务程序和文件、邮件路由进程、sendmail 与名称服务的交互,以及 sendmail(1M) 手册页中未全面介绍的 sendmail 8.13 版功能。

邮件服务任务列表

下表重点向您介绍特定过程组的其他任务列表。

任务 

说明 

参考 

设置邮件服务 

使用这些过程可设置邮件服务的各个组件。了解如何设置邮件服务器、邮件客户机、邮件主机、邮件网关和虚拟主机。了解如何使用 DNS 和 sendmail

设置邮件服务(任务列表)

生成 sendmail 配置文件

使用此过程可修改 sendmail.cf 文件。请参见如何启用域伪装的示例。

生成 sendmail.cf 配置文件

设置 SMTP 以使用传输层安全性 (Transport Layer Security, TLS) 

使用此过程可启用 SMTP,以通过 TLS 建立安全连接。 

设置 SMTP 以使用 TLS

使用备用配置管理邮件传送 

使用此过程可防止在禁用主守护进程时发生邮件传送问题。 

使用备用配置管理邮件传送

管理邮件别名文件 

使用这些过程通过网络提供别名。了解如何管理 NIS+ 表中的项。另外,了解如何设置 NIS 映射、本地邮件别名、加密的映射文件以及邮寄主管的别名。 

管理邮件别名文件(任务列表)

管理邮件队列 

使用这些过程可顺利进行队列处理。了解如何显示和移动邮件队列、强制进行邮件队列处理以及运行邮件队列的子集。另外,了解如何运行旧邮件队列。 

管理队列目录(任务列表)

管理 .forward 文件

使用这些过程可禁用 .forward 文件或更改 .forward 文件的搜索路径。另外,还可了解如何通过创建和填充 /etc/shells,允许用户使用 .forward 文件。

管理 .forward 文件(任务列表)

邮件服务疑难解答过程和技巧 

使用这些过程和技巧可解决邮件服务问题。了解如何测试邮件配置、检查邮件别名、测试 sendmail 规则集、验证与其他系统的连接以及记录消息。另外,了解在何处查找其他邮件诊断信息。

邮件服务疑难解答过程和技巧(任务列表)

解析错误消息 

使用本节中的信息可解析一些与邮件相关的错误消息。 

解析错误消息

规划邮件系统

以下列表说明了在规划过程中应考虑的一些问题。

完成该规划过程后,请在站点中对系统进行设置,以执行设置邮件服务(任务列表)中描述的各种功能。有关其他任务信息,请参阅邮件服务任务列表

仅本地邮件

图 13–1 中所示,最简单的邮件配置是将两个或多个工作站连接到一台邮件主机。邮件完全是本地的。所有客户机均在其本地磁盘中存储邮件,并且由客户机充当邮件服务器。邮件地址使用 /etc/mail/aliases 文件进行解析。

图 13–1 本地邮件配置

该图显示了邮件主机和邮件客户机的有关性。

要设置此类邮件配置,您需要满足以下条件:

有关设置邮件服务的任务信息,请参阅设置邮件服务。如果要查找与邮件服务设置相关的特定过程,请参阅设置邮件服务(任务列表)

本地邮件和远程连接

在小型网络中,最常见的邮件配置如图 13–2 所示。在此配置中,一个系统包含邮件服务器、邮件主机和提供远程连接的邮件网关。邮件通过使用邮件网关中的 /etc/mail/aliases 文件进行分发。无需使用名称服务。

图 13–2 采用 UUCP 连接的本地邮件配置

该图显示了邮件客户机和邮件网关的有关性。

在此配置中,可以假定邮件客户机从邮件主机中的 /var/mail 挂载其邮件文件。要设置此类邮件配置,您需要满足以下条件:

有关设置邮件服务的任务信息,请参阅设置邮件服务。如果要查找与邮件服务设置相关的特定过程,请参阅设置邮件服务(任务列表)

设置邮件服务(任务列表)

下表介绍了设置邮件服务的过程。

任务 

说明 

参考 

设置邮件服务器 

用于启用服务器以路由邮件的步骤 

如何设置邮件服务器

设置邮件客户机 

用于使用户接收邮件的步骤 

如何设置邮件客户机

设置邮件主机 

用于建立可解析电子邮件地址的邮件主机的步骤 

如何设置邮件主机

设置邮件网关 

用于管理与域外部网络之间的通信的步骤 

如何设置邮件网关

使用 DNS 和 sendmail

用于启用 DNS 主机查找的步骤 

如何使用 DNS 和sendmail

设置虚拟主机 

用于为主机指定多个 IP 地址的步骤 

设置虚拟主机

设置邮件服务

如果站点不提供与公司外部的电子邮件服务的连接,或者公司位于单个域中,则您可以轻松设置邮件服务。

对于本地邮件,邮件需要两种类型的配置。有关这些配置的说明,请参阅仅本地邮件中的图 13–1。对于与域外部网络之间的通信,邮件需要两种以上的配置。有关这些配置的说明,请参阅硬件组件概述中的图 12–1,或本地邮件和远程连接中的图 13–2。可以在同一系统上合并这些配置,也可以在不同系统上提供这些配置。例如,如果邮件主机和邮件服务器功能位于同一系统上,请按照本节中的指示将该系统设置为邮件主机。然后,按照本节中的指示将同一系统设置为邮件服务器。


注 –

以下用于设置邮件服务器和邮件客户机的过程在邮箱挂载了 NFS 的情况下适用。但是,邮箱通常保存在本地挂载的 /var/mail 目录中,因此无需执行以下过程。


请参阅以下内容:

Procedure如何设置邮件服务器

设置仅为本地用户提供邮件服务的邮件服务器时,无需采取任何特殊步骤。在口令文件或名称空间中,必须包含用户项。另外,对于要传送的邮件,用户应具有用于检查 ~/.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 目录。

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 停止 sendmail


    # svcadm -t disable network/smtp:sendmail
    
  3. 检查 /var/mail 目录是否可用于远程访问。


    # share
    

    如果列出了 /var/mail 目录,请转到步骤 5。

    如果未列出 /var/mail 目录或没有显示列表,请继续执行相应的子步骤。

    1. (可选的)如果未显示列表,请启动 NFS 服务。

      按照过程如何设置自动文件系统共享,使用 /var/mail 目录启动 NFS 服务。

    2. (可选的)如果列表中未包含 /var/mail 目录,请将该目录添加到 /etc/dfs/dfstab

      将以下命令行添加到 /etc/dfs/dfstab 文件中。


      share -F nfs -o rw /var/mail
      
  4. 使文件系统可进行挂载。


    # shareall
    
  5. 确保已启动名称服务。

    1. (可选的)如果运行的是 NIS,请使用以下命令。


      # ypwhich
      

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

    2. (可选的)如果运行的是 NIS+,请使用以下命令。


      # nisls
      

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

    3. (可选的)如果运行的是 DNS,请使用以下命令。


      # nslookup hostname
      
      hostname

      使用您的主机名。

      有关更多信息,请参阅 nslookup(1M) 手册页。

    4. (可选的)如果运行的是 LDAP,请使用以下命令。


      # ldaplist
      

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

  6. 重新启动 sendmail


    # svcadm enable network/smtp:sendmail
    

Procedure如何设置邮件客户机

邮件客户机是一个在邮件服务器上具有邮箱的邮件服务用户。此外,邮件客户机在指向邮箱位置的 /etc/mail/aliases 文件中还具有邮件别名。


注 –

通过邮局协议 (Post Office Protocol, POP) 或 Internet 消息访问协议 (Internet Message Access Protocol, IMAP) 等服务,还可以执行邮件客户机设置任务。但是,提供 POP 或 IMAP 配置指南超出了本文档范围。


  1. 成为邮件客户机系统的超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 停止 sendmail


    # svcadm -t disable network/smtp:sendmail
    
  3. 确保邮件客户机系统上存在 /var/mail 挂载点。

    该挂载点应已在安装过程中创建。您可以使用 ls 来确保此文件系统存在。以下示例显示了在未创建此文件系统时收到的响应。


    # ls -l /var/mail
    
    /var/mail not found
  4. 确保 /var/mail 目录中没有任何文件。

    如果此目录中存在邮件文件,则应移动这些文件,以便在通过服务器挂载 /var/mail 目录时不会覆盖它们。

  5. 通过邮件服务器挂载 /var/mail 目录。

    您可以自动挂载或在引导时挂载该邮件目录。

    1. (可选的)自动挂载 /var/mail

      将如下所示的项添加到 /etc/auto_direct 文件中。


      /var/mail -rw,hard,actimeo=0 server:/var/mail
      server

      使用指定的服务器名。

    2. (可选的)在引导时挂载 /var/mail

      将以下项添加到 /etc/vfstab 文件中。此项允许指定的邮件服务器中的 /var/mail 目录挂载本地 /var/mail 目录。


      server:/var/mail - /var/mail nfs - no rw,hard,actimeo=0

      重新引导系统时,会自动挂载客户机邮箱。如果不重新引导系统,请键入以下命令挂载客户机邮箱。


      # mountall
      

      注意 – 注意 –

      为正常使用邮箱锁定和邮箱访问,必须在从 NFS 服务器挂载邮件时包含 actimeo=0 选项。


  6. 更新 /etc/hosts

    编辑 /etc/hosts 文件,并为邮件服务器添加项。如果使用名称服务,则无需此步骤。


    # cat /etc/hosts
    
    #
    
    # Internet host table
    
    #
    
    ..
    
    IP_address     mailhost  mailhost  mailhost.example.com
    
    IP_address

    使用指定的 IP 地址。

    example.com

    使用指定的域。

    mailhost

    使用指定的邮件主机。

    有关更多信息,请参阅 hosts(4) 手册页。

  7. 将客户机项添加到其中一个别名文件。

    有关管理邮件别名文件的任务列表,请参阅管理邮件别名文件(任务列表)。请注意,首次传送消息时,mail.local 程序会自动在 /var/mail 目录中创建邮箱。因此,无需为邮件客户机创建单独的邮箱。

  8. 重新启动 sendmail


    # svcadm enable network/smtp:sendmail
    

Procedure如何设置邮件主机

邮件主机用于解析电子邮件地址并在域内重新路由邮件。合适的邮件主机候选系统是可为网络提供远程连接或将网络连接到父域的系统。以下过程说明了如何设置邮件主机。

  1. 成为邮件主机系统的超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 停止 sendmail


    # svcadm -t disable network/smtp:sendmail
    
  3. 验证主机名配置。

    运行 check-hostname 脚本,验证 sendmail 是否可以识别此服务器的全限定主机名。


    % /usr/sbin/check-hostname
    
    hostname phoenix OK: fully qualified as phoenix.example.com

    如果此脚本无法成功识别全限定主机名,则需要将该全限定主机名作为主机的第一个别名添加到 /etc/hosts 中。

  4. 更新 /etc/hosts 文件

    选择适合您的步骤。

    1. (可选的)如果使用的是 NIS 或 NIS+,请在要作为新邮件主机的系统上编辑 /etc/hosts

      在 IP 地址和邮件主机系统的系统名之后,添加单词 mailhostmailhost.domain


      IP_address mailhost mailhost mailhost.domain loghost
      IP_address

      使用指定的 IP 地址。

      mailhost

      使用邮件主机系统的系统名。

      domain

      使用扩展的域名。

      现在,系统即被指定为邮件主机。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
    2. (可选的)如果未使用 NIS 或 NIS+,请在网络中的所有系统上编辑 /etc/hosts 文件。创建以下项。


      IP_address mailhost mailhost mailhost.domain loghost
  5. 重新启动 sendmail


    # svcadm enable network/smtp:sendmail
    
  6. 测试邮件配置。

    有关说明,请参见如何测试邮件配置


    注 –

    有关邮件主机的详细信息,请参见第 14 章,邮件服务(参考)中的硬件组件


Procedure如何设置邮件网关

邮件网关用于管理与域外部网络之间的通信。发送邮件网关中的邮件程序可以与接收系统中的邮件程序匹配。

适合作为邮件网关的系统是指连接到以太网和电话线的系统,此外,还可以是配置为 Internet 路由器的系统。可以将邮件主机或其他系统配置为邮件网关。您可能会选择为域配置多个邮件网关。如果使用 UNIX 对 UNIX 复制程序 (UNIX-to-UNIX Copy Program, UUCP) 连接,则应将采用 UUCP 连接的系统配置为邮件网关。

  1. 成为邮件网关的超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 停止 sendmail


    # svcadm -t disable network/smtp:sendmail
    
  3. 验证主机名配置。

    运行 check-hostname 脚本,验证 sendmail 是否可以识别此服务器的全限定主机名。


    # /usr/sbin/check-hostname
    
    hostname phoenix OK: fully qualified as phoenix.example.com

    如果此脚本无法成功识别全限定主机名,则需要将该全限定主机名作为主机的第一个别名添加到 /etc/hosts 中。如果需要有关此步骤的帮助,请参阅如何设置邮件主机中的步骤 4

  4. 确保已启动名称服务。

    1. (可选的)如果运行的是 NIS,请使用以下命令。


      # ypwhich
      

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

    2. (可选的)如果运行的是 NIS+,请使用以下命令。


      # nisls
      

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

    3. (可选的)如果运行的是 DNS,请使用以下命令。


      # nslookup hostname
      
      hostname

      使用您的主机名。

      有关更多信息,请参阅 nslookup(1M) 手册页。

    4. (可选的)如果运行的是 LDAP,请使用以下命令。


      # ldaplist
      

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

  5. 重新启动 sendmail


    # svcadm enable network/smtp:sendmail
    
  6. 测试邮件配置。

    有关说明,请参见如何测试邮件配置


    注 –

    有关邮件网关的更多信息,请参阅第 14 章,邮件服务(参考)中的硬件组件


Procedure如何使用 DNS 和sendmail

DNS 名称服务不支持单个别名。此名称服务支持使用邮件交换器 (Mail Exchanger, MX) 记录和 CNAME 记录的主机或域的别名。您可以在 DNS 数据库中指定主机名、域名或同时指定这两个名称。有关 sendmail 和 DNS 的更多信息,请参见第 14 章,邮件服务(参考) 中的sendmail 与名称服务的交互 或参见《系统管理指南:名称和目录服务(DNS、NIS 和 LDAP)》

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 启用 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
  3. 检查 mailhostmailhost.domain 项。

    使用 nslookup 确保 DNS 数据库中存在 mailhostmailhost.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
mailserver

使用 .cf 文件的名称。

生成 sendmail.cf 配置文件中将这相同的三个步骤作为生成过程的一部分进行了概述。

生成 /etc/mail/sendmail.cf 文件后,可以继续执行以下步骤创建虚拟用户表。

生成 sendmail.cf 配置文件

如何生成新的 sendmail.cf 文件说明了如何生成该配置文件。尽管您仍可使用旧版本的 sendmail.cf 文件,但最佳做法是使用新格式。

有关更多详细信息,请参阅以下内容。

Procedure如何生成新的 sendmail.cf 文件

以下过程说明了如何生成新的配置文件。


注 –

/usr/lib/mail/cf/main-v7sun.mc 现在是 /etc/mail/cf/cf/main.mc


  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 停止 sendmail


    # svcadm -t disable network/smtp:sendmail
    
  3. 复制要更改的配置文件。


    # cd /etc/mail/cf/cf
    
    # cp sendmail.mc myhost.mc
    
    myhost

    选择 .mc 文件的新名称。

  4. 根据需要,编辑新配置文件(如 myhost.mc)。

    例如,添加以下命令行以启用域伪装。


    # cat myhost.mc
    
    ..
    
    MASQUERADE_AS(`host.domain')
    host.domain

    使用所需的主机名和域名。

    在此示例中,MASQUERADE_AS 将已发送邮件标记为来自 host.domain,而不是 $j

  5. 使用 m4 生成配置文件。


    # /usr/ccs/bin/make myhost.cf
    
  6. 使用 -C 选项指定新文件,以测试新配置文件。


    # /usr/lib/sendmail -C myhost.cf -v testaddr </dev/null
    

    当此命令显示消息时,将会向 testaddr 发送一条消息。如果不重新启动系统中的 sendmail 服务,则只能对外发邮件进行测试。对于尚未处理邮件的系统,请使用如何测试邮件配置所介绍的完整测试过程。

  7. 复制原始配置文件后,安装新配置文件。


    # cp /etc/mail/sendmail.cf /etc/mail/sendmail.cf.save
    
    # cp myhost.cf /etc/mail/sendmail.cf
    
  8. 重新启动 sendmail 服务。


    # svcadm enable network/smtp:sendmail
    

设置 SMTP 以使用 TLS

从 Solaris 10 1/06 发行版开始,SMTP 可在 sendmail 8.13 版中使用传输层安全性 (Transport Layer Security, TLS)。此服务面向 SMTP 服务器和客户机,通过 Internet 提供专用的、认证的通信,并且可保护系统免受窃听者和攻击者的侵害。请注意,缺省情况下不会启用此服务。

Procedure如何设置 SMTP 以使用 TLS

以下过程使用样例数据说明如何设置证书,以便 sendmail 使用 TLS。有关更多信息,请参见sendmail 版本 8.13 支持运行 SMTP 时使用 TLS

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 停止 sendmail


    # svcadm -t disable network/smtp:sendmail
    
  3. 设置相应证书,以便 sendmail 使用 TLS。

    1. 完成以下命令:


      # 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 .
      
    2. 使用您选择的文本编辑器,将 openssl.cnf 文件中的 dir 值从 /etc/sfw/openssl 更改为 /etc/mail/certs/CA

    3. 使用 openssl 命令行工具实现 TLS。

      请注意,以下命令行会生成交互式文本。


      # 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

      此命令用于创建和处理证书请求。

      -new

      req 选项用于生成一个新的证书请求。

      -x509

      req 选项用于创建一个自签名证书。

      -keyout private/cakey.pem

      req 选项允许将 private/cakey.pem 指定为新建的私钥的文件名。

      -out cacert.pem

      req 选项允许将 cacert.pem 指定为输出文件。

      -days 365

      req 选项允许确保证书有效期为 365 天。缺省值为 30

      -config openssl.cnf

      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

  4. (可选的)如果需要新的安全连接,请创建新证书并使用证书颁发机构签名。

    1. 创建新证书。


      # 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 中。

    2. 使用证书颁发机构对新证书进行签名。


      # 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 包含已签名证书。

      x509 实用程序

      显示证书信息、将证书转换为各种格式以及对证书请求进行签名

      ca 应用程序

      用于对各种格式的证书请求进行签名以及生成 CRL(certificate revocation list,证书撤销列表)

  5. .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 的配置文件选项

  6. /etc/mail 目录中重新生成并安装 sendmail.cf 文件。

    有关详细说明,请参见生成 sendmail.cf 配置文件

  7. 创建从使用 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
    
  8. 为提高安全性,拒绝对 MYkey.pem 的组和其他项目的读取权限。


    # chmod go-r MYkey.pem
    
  9. 使用符号链接将 CA 证书安装在指定给 confCACERT_PATH 的目录中。


    # C=CAcert.pem
    
    # ln -s $C `openssl x509 -noout -hash < $C`.0
    
  10. 为确保其他主机的邮件安全,安装相应的主机证书。

    1. 将通过其他主机的 confCACERT 选项定义的文件复制到 /etc/mail/certs/host.domain.cert.pem

      host.domain 替换为其他主机的全限定主机名。

    2. 使用符号链接将 CA 证书安装在指定给 confCACERT_PATH 的目录中。


      # C=host.domain.cert.pem
      
      # ln -s $C `openssl x509 -noout -hash < $C`.0
      
      

      host.domain 替换为其他主机的全限定主机名。

  11. 重新启动 sendmail


    # svcadm enable network/smtp:sendmail
    

示例 13–1 Received: 邮件头

以下是使用 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

Procedure如何使用 sendmail.cf 的备用配置管理邮件传送

sendmail 的缺省配置中,客户机队列运行器必须能够将邮件提交给本地 SMTP 端口上的守护进程。如果该守护进程没有侦听 SMTP 端口,邮件将保留在队列中。要避免此问题,请执行以下任务。有关守护进程和客户机队列运行器的更多信息,以及要了解可能必须使用此备用配置的原因,请参阅sendmail 版本 8.12 中的配置文件 submit.cf

此过程可确保守护进程的运行仅用于接受来自本地主机的连接。

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 停止 sendmail


    # svcadm -t disable network/smtp:sendmail
    
  3. 复制要更改的配置文件。


    # cd /etc/mail/cf/cf
    
    # cp sendmail.mc myhost.mc
    
    myhost

    选择 .mc 文件的新名称。

  4. 编辑新配置文件(例如,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 地址的计算机上使用这些配置宏。


    1. (可选的)如果主机启用了 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 地址。


    2. (可选的)要查看主机是否启用了 IPv6 本地主机地址,请运行以下命令。


      # /usr/sbin/ifconfig -a

      如果启用了 IPv6,将显示以下类似输出。


      lo0: flags=2000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv6> mtu 8252 index 1
      
                    inet6 ::1/128
  5. 使用 m4 生成配置文件。


    # /usr/ccs/bin/make myhost.cf
    
  6. 复制原始配置文件后,安装新配置文件。


    # cp /etc/mail/sendmail.cf /etc/mail/sendmail.cf.save
    
    # cp myhost.cf /etc/mail/sendmail.cf
    
  7. 重新启动 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+ mail_aliases 表添加项

 

编辑 NIS+ mail_aliases 表中的项。

此过程包含有关如何删除项的示例。 

如何编辑 NIS+ mail_aliases 表中的项

设置 NIS mail.aliases 映射

如果名称服务是 NIS,请按照以下说明简化 mail.aliases 映射的别名设置。

如何设置 NIS mail.aliases 映射

设置本地邮件别名文件 

如果未使用名称服务(如 NIS 或 NIS+),请按照以下说明简化 /etc/mail/aliases 文件的别名设置。

如何设置本地邮件别名文件

创建加密映射文件 

使用以下步骤可简化加密映射文件的别名设置。 

如何创建加密映射文件

设置 postmaster 别名

使用本节中的过程可管理 postmaster 别名。您必须使用此别名。

管理 postmaster 别名

管理邮件别名文件

邮件别名在域中必须唯一。本节介绍管理邮件别名文件的过程。或者,您可以使用 Solaris Management Console 的邮递列表功能,在别名数据库上执行这些任务。

另外,您还可以使用 makemap 为本地邮件主机创建数据库文件。请参阅 makemap(1M) 手册页。使用这些数据库文件不会提供使用 NIS 或 NIS+ 等名称服务的所有优点。但是,由于不涉及网络查找,因此可以更快地从这些本地数据库文件检索数据。有关更多信息,请参阅sendmail 与名称服务的交互,以及第 14 章,邮件服务(参考)中的邮件别名文件

请从以下过程中进行选择:

Procedure如何初始化 NIS+ mail_aliases

您可以使用 aliasadm 命令来管理 NIS+ 表中的项。要创建表,请按照以下说明操作。有关更多信息,请参阅 aliasadm(1M) 手册页。

  1. 成为拥有该表的 NIS+ 组的成员或邮件服务器的 root,或者承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 初始化 NIS+ 表。


    # aliasadm -I
    
  3. 将项添加到该表中。

Procedure如何列出 NIS+ mail_aliases 表中的内容。

要查看该表中的完整内容列表,请按照以下说明操作。

  1. 成为拥有该表的 NIS+ 组的成员或邮件服务器的 root,或者承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 按别名字母顺序列出所有项。


    # aliasadm -1
    

    有关更多信息,请参阅 aliasadm(1M) 手册页。


示例 13–2 列出 NIS+ mail_aliases 表中的单项

或者,可以使用 aliasadm 命令列出单项。完成此过程的第一步后,请键入以下内容:


# aliasadm -m ignatz

ignatz: ignatz@saturn # Alias for Iggy Ignatz

该命令仅会匹配完整的别名,而不会匹配部分字符串。不能将 *? 等元字符与 aliasadm -m 一起使用。



示例 13–3 列出 NIS+ mail_aliases 表中的部分匹配项

另外,还可以使用 aliasadm 命令列出部分匹配项。完成此过程的第一步后,请键入以下内容:


# aliasadm -l | grep partial_string

partial_string 替换为搜索所需的字符串。


Procedure如何通过命令行向 NIS+ mail_aliases 表添加别名

要将两个或三个别名添加到该表中,请按照以下说明操作。如果要添加两个或三个以上的别名,请参见如何通过编辑 NIS+ mail_aliases 表添加项

  1. 编辑各个邮件客户机、邮箱位置和邮件服务器系统名称的列表。

  2. 成为拥有该表的 NIS+ 组的成员或邮件服务器的 root,或者承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  3. (可选的)如有必要,请初始化 NIS+ 表。

    如果创建的是一个全新的 NIS+ mail_aliases 表,则必须首先初始化该表。要完成此任务,请参阅如何初始化 NIS+ mail_aliases

  4. 将别名添加到该表中。

    请参见以下典型项示例。


    # aliasadm -a iggy iggy.ignatz@saturn "Iggy Ignatz"
    

    以下列表说明了上面示例的输入。

    -a

    用于添加别名的选项

    iggy

    别名的缩写

    iggy.ignatz@saturn

    扩展的别名

    "Iggy Ignatz"

    使用引号的别名

  5. 显示创建的项并确保其正确。


    # aliasadm -m alias
    
    alias

    创建的项

    有关更多信息,请参阅 aliasadm(1M) 手册页。

Procedure如何通过编辑 NIS+ mail_aliases 表添加项

您可以使用 aliasadm 命令来管理 NIS+ 表中的项。要将两个或三个以上的别名添加到该表中,请按照以下说明操作。

  1. 编辑各个邮件客户机、邮箱位置和邮件服务器系统名称的列表。

  2. 成为拥有该表的 NIS+ 组的成员或邮件服务器的 root,或者承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  3. 显示并编辑该别名表。


    # aliasadm -e
    

    此命令将显示该表,并允许您对其进行编辑。所用的编辑器已使用 $EDITOR 环境变量进行了设置。如果未设置此变量,则 vi 为缺省编辑器。

  4. 使用以下格式在单独一行中键入每个别名。


    alias: expanded_alias # ["option" # "comments"]
    alias

    此列用于别名的缩写。

    expanded_alias

    此列用于扩展的别名。

    option

    此列保留供将来使用。

    comments

    此列用于有关单个别名的注释,如别名的名称。

    如果将选项列保留为空,请键入一对空引号 ("") 并添加注释。

    项的顺序对 NIS+ mail_aliases 表并不重要。aliasadm -l 命令按字母顺序对列表进行排序并显示项。

    有关更多信息,请参阅邮件别名文件aliasadm(1M) 手册页。

Procedure如何编辑 NIS+ mail_aliases 表中的项

要编辑该表中的项,请按照以下说明操作。

  1. 成为拥有该表的 NIS+ 组的成员或邮件服务器的 root,或者承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 显示别名项。


    # aliasadm -m alias
    

    alias 替换为指定的别名。

  3. 根据需要编辑别名项。


    # aliasadm -c alias expanded_alias [options comments]
    alias

    如有必要,编辑别名。

    expanded_alias

    如有必要,编辑扩展的别名。

    options

    如有必要,编辑选项。

    comments

    如有必要,编辑此项的注释。

    有关更多信息,请参阅 aliasadm(1M) 手册页以及邮件别名文件

  4. 显示编辑的项并确保其正确。


    # aliasadm -m alias
    

    有关更多信息,请参阅 aliasadm(1M) 手册页。


示例 13–4 删除 NIS+ mail_aliases 表中的项

要删除该表中的项,请在完成此过程的第一步后使用以下语法:


# aliasadm -d alias

alias 替换为要删除的项的别名。


Procedure如何设置 NIS mail.aliases 映射

使用以下过程可简化 NIS mail.aliases 映射的别名设置。

  1. 编辑各个邮件客户机、邮箱位置和邮件服务器系统名称的列表。

  2. 成为 NIS 主服务器的 root 或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  3. 编辑 /etc/mail/aliases 文件,并创建以下项。

    1. 为每台邮件客户机添加项。


      # cat /etc/mail/aliases
      
      ..
      
      alias:expanded_alias
      
      alias

      使用缩写的别名。

      expanded_alias

      使用扩展的别名 (user@host.domain.com)。

    2. 确保具有 Postmaster: root 项。


      # cat /etc/mail/aliases
      
      ..
      
      Postmaster: root
      
    3. root 添加别名。使用指定为邮寄主管的人员的邮件地址。


      # cat /etc/mail/aliases
      
      ..
      
      root: user@host.domain.com
      
      user@host.domain.com

      使用指定的邮寄主管的指定地址。

  4. 确保 NIS 主服务器正在运行名称服务,以解析每台邮件服务器上的主机名。

  5. 转至 /var/yp 目录。


    # cd /var/yp
    
  6. 应用 make 命令。


    # make
    

    /etc/hosts/etc/mail/aliases 文件的更改将传播到 NIS 从属系统。这些更改至多仅在几分钟后便会生效。

Procedure如何设置本地邮件别名文件

使用以下过程可解析本地邮件别名文件的别名。

  1. 编辑各个用户及其邮箱位置的列表。

  2. 成为邮件服务器的 root 或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  3. 编辑 /etc/mail/aliases 文件,并创建以下项。

    1. 为每个用户添加项。


      user1: user2@host.domain
      
      user1

      使用新别名。

      user2@host.domain

      使用新别名的实际地址。

    2. 确保具有 Postmaster: root 项。


      # cat /etc/mail/aliases
      
      ..
      
      Postmaster: root
      
    3. root 添加别名。使用指定为邮寄主管的人员的邮件地址。


      # cat /etc/mail/aliases
      
      ..
      
      root: user@host.domain.com
      
      user@host.domain.com

      使用指定的邮寄主管的指定地址。

  4. 重新生成别名数据库。


    # newaliases
    

    /etc/mail/sendmail.cfAliasFile 选项的配置可确定此命令是以二进制格式生成单个文件 /etc/mail/aliases.db,还是生成文件对 /etc/mail/aliases.dir/etc/mail/aliases.pag

  5. 执行以下步骤之一,复制生成的文件。

    1. (可选的)/etc/mail/aliases/etc/mail/aliases.dir /etc/mail/aliases.pag 文件复制到其他各个系统中。

      您可以使用 rcprdist 命令复制这三个文件。有关更多信息,请参阅 rcp(1) 手册页或 rdist(1) 手册页。或者,可以为此创建脚本。

      复制这些文件时,无需在其他各个系统上都运行 newaliases 命令。但是请记住,每次添加或删除邮件客户机时,必须更新所有 /etc/mail/aliases 文件。

    2. (可选的)/etc/mail/aliases/etc/mail/aliases.db 文件复制到其他各个系统中。

      您可以使用 rcprdist 命令复制这些文件。有关更多信息,请参阅 rcp(1) 手册页或 rdist(1) 手册页。或者,可以为此创建脚本。

      复制这些文件时,无需在其他各个系统上都运行 newaliases 命令。但是请记住,每次添加或删除邮件客户机时,必须更新所有 /etc/mail/aliases 文件。

Procedure如何创建加密映射文件

要创建加密映射文件,请按照以下说明操作。

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 创建输入文件。

    项可以使用以下语法。


    old_name@newdomain.com   new_name@newdomain.com
    
    old_name@olddomain.com    error:nouser No such user here
    
    @olddomain.com          %1@newdomain.com
    
    old_name@newdomain.com

    使用以前指定的用户名以及新指定的域。

    new_name@newdomain.com

    使用新指定的地址。

    old_name@olddomain.com

    使用以前指定的用户名及域。

    olddomain.com

    使用以前指定的域。

    newdomain.com

    使用新指定的域。

    第一项将邮件重定向到新别名。下一项在使用的别名错误时创建一条消息。最后一项将所有传入邮件从 olddomain 重定向到 newdomain

  3. 创建数据库文件。


    # /usr/sbin/makemap maptype newmap < newmap
    
    maptype

    选择数据库类型,如 dbmbtreehash

    newmap

    使用输入文件名称以及数据库文件名称的第一部分。如果选择 dbm 数据库类型,则会使用 .pag.dir 后缀创建数据库文件。对于其他两种数据库类型,文件名后跟 .db

管理 postmaster 别名

每个系统都必须能够将邮件发送到 postmaster 邮箱。您可以为 postmaster 创建 NIS 或 NIS+ 别名,也可在每个本地 /etc/mail/aliases 文件中创建该别名。请参阅以下过程。

Procedure如何在每个本地 /etc/mail/aliases 文件中创建 postmaster 别名

如果要在每个本地 /etc/mail/aliases 文件中创建 postmaster 别名,请按照以下说明操作。

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 查看 /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
  3. 编辑每个系统的 /etc/mail/aliases 文件。

    root 更改成指定为邮寄主管的人员的邮件地址。


    Postmaster: mail_address
    
    mail_address

    使用指定为邮寄主管的人员的指定地址。

  4. (可选的)为邮寄主管创建单独的邮箱。

    可以为邮寄主管创建单独的邮箱,以便将邮寄主管邮件与个人邮件分开。如果创建单独的邮箱,请在编辑 /etc/mail/aliases 文件时使用该邮箱地址,而不要使用邮寄主管的个人邮件地址。有关详细信息,请参阅如何为 postmaster 创建单独的邮箱

Procedure如何为 postmaster 创建单独的邮箱

如果要为 postmaster 创建单独的邮箱,请按照以下说明操作。

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 为指定为 postmaster 的人员创建用户帐户。在口令字段中放置一个星号 (*)。

    有关添加用户帐户的详细信息,请参阅《系统管理指南:基本管理》中的第 5  章 “管理用户帐户和组(任务)”

  3. 完成邮件传送后,启用 mail 程序读取和写入邮箱名称。


    # mail -f postmaster
    
    postmaster

    使用指定的地址。

Procedure如何为 /etc/mail/aliases 文件中的别名添加 postmaster 邮箱

如果要为 /etc/mail/aliases 文件中的别名添加 postmaster 邮箱,请按照以下说明操作。

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. root 添加别名。使用指定为邮寄主管的人员的邮件地址。


    # cat /etc/mail/aliases
    
    ..
    
    root: user@host.domain.com
    
    user@host.domain.com

    使用指定为邮寄主管的人员的指定地址。

  3. 在邮寄主管本地系统的 /etc/mail/aliases 文件中,创建一个定义别名名称的项。以 sysadmin 为例。另外,还在其中包含指向本地邮箱的路径。


    # cat /etc/mail/aliases
    
    ..
    
    sysadmin: /usr/somewhere/somefile
    
    sysadmin

    为新别名创建名称。

    /usr/somewhere/somefile

    使用指向本地邮箱的路径。

  4. 重新生成别名数据库。


    # newaliases
    

管理队列目录(任务列表)

下表介绍了管理邮件队列的过程。

任务 

说明 

参考 

显示邮件队列 /var/spool/mqueue 的内容

使用此过程可查看队列中的消息数,以及从队列中清除消息的速度。 

如何显示邮件队列 /var/spool/mqueue 的内容

强制对邮件队列 /var/spool/mqueue 进行邮件队列处理

使用此过程可处理向以前无法接收消息的系统发送的消息。 

如何在邮件队列 /var/spool/mqueue 中强制进行邮件队列处理

运行邮件队列 /var/spool/mqueue 的子集

使用此过程可强制处理地址子串(如主机名)。另外,使用此过程还可强制处理队列中的特定消息。 

如何运行邮件队列 /var/spool/mqueue 的子集

移动邮件队列 /var/spool/mqueue

使用此过程可移动该邮件队列。 

如何移动邮件队列 /var/spool/mqueue

运行旧邮件队列 /var/spool/omqueue

使用此过程可运行旧邮件队列。 

如何运行旧邮件队列 /var/spool/omqueue

管理队列目录

本节介绍了一些有助于队列管理的任务。有关仅客户机适用的队列的信息,请参阅sendmail 版本 8.12 中的配置文件 submit.cf。有关其他相关信息,可以参阅sendmail 版本 8.12 中新增的队列功能

请参阅以下内容:

Procedure如何显示邮件队列 /var/spool/mqueue 的内容

    显示队列中的消息数以及从队列中清除消息的速度。

    键入以下命令:


    # /usr/bin/mailq | more
    

    此命令将提供以下信息。

    • 队列 ID

    • 消息大小

    • 消息进入队列的日期

    • 消息状态

    • 发件人和收件人

    另外,此命令还会立即检查授权属性 solaris.admin.mail.mailq。如果检查成功,将执行与使用 sendmail 指定 -bp 标志等效的操作。如果检查失败,则会列显一条错误消息。缺省情况下,对所有用户均会启用此授权属性。通过修改 prof_attr 中的用户项,可以禁用该授权属性。有关更多信息,请参阅 prof_attr(4)mailq(1) 手册页。

Procedure如何在邮件队列 /var/spool/mqueue 中强制进行邮件队列处理

例如,使用此过程可处理向以前无法接收消息的系统发送的消息。

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 强制进行队列处理,并在清空队列时显示作业进度。


    # /usr/lib/sendmail -q -v 
    

Procedure如何运行邮件队列 /var/spool/mqueue 的子集

例如,使用此过程可强制处理地址子串(如主机名)。另外,使用此过程还可强制处理队列中的特定消息。

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 使用 -qRstring 随时运行该邮件队列的子集。


    # /usr/lib/sendmail -qRstring
    
    string

    使用收件人别名或 user@host.domain 的子串(如主机名)。

    或者,可使用 -qInnnnn 运行该邮件队列的子集。


    # /usr/lib/sendmail -qInnnnn
    
    nnnnn

    使用队列 ID。

Procedure如何移动邮件队列 /var/spool/mqueue

如果要移动该邮件队列,请按照以下说明操作。

  1. 成为邮件主机的 root 或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 中止 sendmail 守护进程。


    # svcadm disable network/smtp:sendmail
    

    现在,sendmail 将不再处理该队列目录。

  3. 转至 /var/spool 目录。


    # cd /var/spool
    
  4. 将目录 mqueue 及其所有内容移动到 omqueue 目录中。然后,创建一个名为 mqueue 的新的空目录。


    # mv mqueue omqueue; mkdir mqueue
    
  5. 将该目录权限按属主设置为读取/写入/执行,按组设置为读取/执行。另外,将属主和组设置为 daemon


    # chmod 750 mqueue; chown root:bin mqueue
    
  6. 启动 sendmail


    # svcadm enable network/smtp:sendmail
    

Procedure如何运行旧邮件队列 /var/spool/omqueue

要运行旧邮件队列,请按照以下说明操作。

  1. 成为 root 或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 运行该旧邮件队列。


    # /usr/lib/sendmail -oQ/var/spool/omqueue -q
    

    -oQ 标志用于指定备用队列目录。-q 标志用于指示运行该队列中的所有作业。如果要在屏幕中显示详细输出,请使用 -v 标志。

  3. 删除该空目录。


    # rmdir /var/spool/omqueue
    

管理 .forward 文件(任务列表)

下表介绍了管理 .forward 文件的过程。有关更多信息,请参阅第 14 章,邮件服务(参考)中的 .forward 文件

任务 

说明 

参考 

禁用 .forward 文件

例如,如果要阻止自动转发,请使用此过程。 

如何禁用 .forward 文件

更改 .forward 文件搜索路径

例如,如果要将所有 .forward 文件移动到公用目录中,请使用此过程。

如何更改 .forward-文件搜索路径

创建和填充 /etc/shells

通过此过程,用户可使用 .forward 文件将邮件转发到程序或文件。

如何创建和填充 /etc/shells

管理 .forward 文件

本节介绍了与 .forward 文件管理相关的若干过程。由于用户可以编辑这些文件,因此可能导致出现问题。有关更多信息,请参阅第 14 章,邮件服务(参考)中的 .forward 文件

请参阅以下过程:

Procedure如何禁用 .forward 文件

此过程用于阻止自动转发,可禁用特定主机的 .forward 文件。

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 复制 /etc/mail/cf/domain/solaris-generic.m4 或站点特定的域 m4 文件。


    # cd /etc/mail/cf/domain
    
    # cp solaris-generic.m4 mydomain.m4
    
    mydomain

    使用选择的文件名。

  3. 在刚创建的文件中添加以下行。


    define(`confFORWARD_PATH',`')dnl
    

    如果 m4 文件中已存在 confFORWARD_PATH 的值,请将该值替换为该空值。

  4. 生成并安装新的配置文件。

    如果需要有关此步骤的帮助信息,请参阅如何生成新的 sendmail.cf 文件


    注 –

    编辑 .mc 文件时,请记住将 DOMAIN(`solaris-generic') 更改为 DOMAIN(`mydomain')


Procedure如何更改 .forward-文件搜索路径

例如,如果要将所有 .forward 文件放置在公用目录中,请按照以下说明操作。

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 复制 /etc/mail/cf/domain/solaris-generic.m4 或站点特定的域 m4 文件。


    # cd /etc/mail/cf/domain
    
    # cp solaris-generic.m4 mydomain.m4
    
    mydomain

    使用选择的文件名。

  3. 在刚创建的文件中添加以下行。


    define(`confFORWARD_PATH',`$z/.forward:/var/forward/$u')dnl

    如果 m4 文件中已存在 confFORWARD_PATH 的值,请将其替换为该新值。

  4. 生成并安装新的配置文件。

    如果需要有关此步骤的帮助信息,请参阅如何生成新的 sendmail.cf 文件


    注 –

    编辑 .mc 文件时,请记住将 DOMAIN(`solaris-generic') 更改为 DOMAIN(`mydomain')


Procedure如何创建和填充 /etc/shells

此文件未包含在标准发行版中。如果要允许用户使用 .forward 文件将邮件转发到程序或文件,则必须添加该文件。您可以通过使用 grep 标识口令文件中列出的所有 shell,手动创建该文件。然后,可将这些 shell 键入到文件中。但是,使用可下载脚本的以下过程更易于使用。

  1. 下载相应脚本。

    http://www.sendmail.org/vendor/sun/gen-etc-shells.html

  2. 成为 root 或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  3. 要生成 shell 列表,请运行 gen-etc-shells 脚本。


    # ./gen-etc-shells.sh > /tmp/shells
    

    此脚本使用 getent 命令收集 /etc/nsswitch.conf 中列出的口令文件源所包含的 shell 名称。

  4. 检查并编辑 /tmp/shells 中的 shell 列表。

    使用您选择的编辑器,删除不包含的所有 shell。

  5. 将文件移动到 /etc/shells


    # mv /tmp/shells /etc/shells
    

邮件服务疑难解答过程和技巧(任务列表)

下表介绍了邮件服务疑难解答过程和技巧。

任务 

说明 

参考 

测试邮件配置 

用于测试对 sendmail 配置文件的更改的步骤

如何测试邮件配置

检查邮件别名 

用于确认是否能将邮件传送到指定收件人的步骤 

如何检查邮件别名

测试规则集 

用于检查 sendmail 规则集的输入和返回的步骤

如何测试 sendmail 规则集

验证与其他系统的连接 

用于验证与其他系统的连接的技巧 

如何验证与其他系统的连接

使用 syslogd 程序记录消息

用于收集错误消息信息的技巧 

记录错误消息

检查其他源的诊断信息 

用于从其他源获取诊断信息的技巧 

邮件诊断信息的其他源

邮件服务疑难解答过程和技巧

本节介绍了一些可用于解决邮件服务问题的过程和技巧。

Procedure如何测试邮件配置

要测试对配置文件所做的更改,请按照以下说明操作。

  1. 在包含已修订的配置文件的任何系统上重新启动 sendmail


    # svcadm refresh network/smtp:sendmail
    
  2. 从各个系统发送测试消息。


    # /usr/lib/sendmail -v names </dev/null
    
    names

    指定收件人的电子邮件地址。

    此命令会向指定的收件人发送一条空消息,并在监视器上显示该消息的活动。

  3. 通过将该消息发送至常规用户名,向您自己或本地系统中的其他人发送邮件。

  4. (可选的)如果已连接到网络,请按三个方向将邮件发送到其他系统中的某个用户。

    • 从主系统到客户机系统

    • 从客户机系统到主系统

    • 从一台客户机系统到另一台客户机系统

  5. (可选的)如果具有邮件网关,请将邮件从邮件主机发送到其他域,以确保中继邮件程序和主机的配置正确。

  6. (可选的)如果通过电话线设置了与另一台主机的 UUCP 连接,请将邮件发送到该主机的某个用户,并要求该用户回复邮件或在收到消息时与您联系。

  7. 要求某用户通过 UUCP 连接向您发送邮件。

    由于 sendmail 程序会将消息传递给 UUCP 进行传送,因此该程序无法检测消息是否已传送。

  8. 通过不同系统将消息发送到 postmaster,并确保消息传送到邮寄主管的邮箱。

如何检查邮件别名

以下示例说明了如何验证别名。


% 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 时可以传送邮件。

使用本地范围和域范围的别名时,请记住避免产生循环和不一致的数据库。尤其要注意,在系统之间移动用户时应避免创建别名循环。

Procedure如何测试 sendmail 规则集

要检查 sendmail 规则集的输入和返回,请按照以下说明操作。

  1. 更改为地址测试模式。


    # /usr/lib/sendmail -bt
    
  2. 测试邮件地址。

    在最后一个提示符 (>) 下提供以下数字和地址。


    > 3,0 mail_address
    
    mail_address

    使用要测试的邮件地址。

  3. 结束会话。

    按 Control-D 组合键。


示例 13–5 地址测试模式输出

以下是地址测试模式的输出示例。


% /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 端口,请检查以下情况。

记录错误消息

邮件服务使用 syslogd 程序记录大多数错误消息。缺省情况下,syslogd 程序会将这些消息发送到一个称为 loghost 的系统,该系统可在 /etc/hosts 文件中指定。可以将 loghost 定义为保存整个 NIS 域的所有日志。如果未指定 loghost,则不会报告 syslogd 中的错误消息。

/etc/syslog.conf 文件用于控制 syslogd 程序转发消息的位置。可以通过编辑 /etc/syslog.conf 文件来更改缺省配置。为使所有更改生效,必须重新启动 syslog 守护进程。要收集有关邮件的信息,可在该文件中添加以下选项。

/etc/syslog.conf 文件中的以下项会将所有关键消息、提示性消息和调试消息的副本发送到 /var/log/syslog


mail.crit;mail.info;mail.debug			/var/log/syslog

在系统日志中,每一行都包含时间标记、生成该行的系统名称以及消息。syslog 文件可以记录大量信息。

该日志按级别顺序进行排列。在最低级别,仅记录异常情况。在最高级别,即使最普通和最不受关注的事件也会被记录。根据约定,10 以下的日志级别被视为“有用”级别。10 以上的日志级别通常用于调试。有关 loghostsyslogd 程序的信息,请参见《系统管理指南:高级管理》中的“自定义系统消息日志”

邮件诊断信息的其他源

对于其他诊断信息,请检查以下源。

解析错误消息

本节介绍了如何解析一些与 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

第 14 章 邮件服务(参考)

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

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

Solaris 版本的 sendmail

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

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

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

表 14–1 常规 sendmail 标志

标志 

说明 

SOLARIS=21000

支持 Solaris 10 发行版。 

MILTER

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

NETINET6

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

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

标志 

说明 

NDBM

支持 ndbm 数据库

NEWDB

支持 Berkeley DB 数据库 

USERDB

支持用户数据库 

NIS

支持 nis 数据库

NISPLUS

支持 nisplus 数据库

LDAPMAP

支持 LDAP 映射

MAP_REGEX

支持正则表达式映射 

表 14–3 Solaris 标志

标志 

说明 

SUN_EXTENSIONS

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

SUN_INIT_DOMAIN

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

SUN_SIMPLIFIED_LDAP

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

VENDOR_DEFAULT=VENDOR_SUN

选择 Sun 作为缺省供应商。 

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

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

标志 

说明 

SASL

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

STARTTLS

事务处理级安全 (RFC 2487) 

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


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

注 –

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


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

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

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

替代 sendmail 命令

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

表 14–5 替代 sendmail 命令

替代名称 

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

用于 sendmail 的选项

hoststat

否 

sendmail -bh

mailq

是 

sendmail -bp

newaliases

是 

sendmail -bi

purgestat

否 

sendmail -bH

smtpd

否 

sendmail -bd

配置文件的版本

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

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

字段 

说明 

V7/Sun

用于 sendmail 版本 8.8 的设置。

V8/Sun

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

V9/Sun

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

V10/Sun

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


注 –

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


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

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

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

软件组件

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

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

邮件用户代理

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

邮件传输代理

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

本地传送代理

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

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

邮件程序与 sendmail

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

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

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

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

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

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

UUCP 定义了以下邮件程序。

uucp-old

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

uucp-new

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

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

uucp-dom

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

uucp-uudom

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


注 –

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


邮件地址

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

域和子域

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

下表显示了一些顶层域。

表 14–7 顶层域

域 

说明 

com

商业站点 

edu

教育站点 

gov

美国政府机构 

mil

美国军事机构 

net

联网组织 

org

其他非赢利组织 

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

名称服务域名和邮件域名

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

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

邮件地址的典型格式

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


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

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


注 –

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


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

与路由无关的邮件地址

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


user@host.domain

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


host.domain!user

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


user@domain

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

邮箱文件

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

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

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

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

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

格式 

说明 

username

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

Firstname.Lastname Firstname_Lastname Firstinitial.Lastname Firstinitial_Lastname

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

postmaster

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

MAILER-DAEMON

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

aliasname-request

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

owner-aliasname

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

owner-owner

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

local%domain

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

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


mygroup: :include:/pathname/mygroup.list

owner-mygroup: mygroup-request

mygroup-request: sandys, ignatz

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

邮件别名

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

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

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

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


ignatz: iggy.ignatz

iggyi: iggy.ignatz

iggy.ignatz: ignatz@mars

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


fred: fred@planets

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

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

硬件组件

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

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

邮件主机

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

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

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

邮件服务器

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

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

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

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

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

邮件客户机

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

邮件网关

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

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

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

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

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

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

邮件服务程序和文件

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

vacation 实用程序的增强功能

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

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

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


company.com

mydomain.com

onefriend@hisisp.com

anotherfriend@herisp.com

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

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

/usr/bin 目录的内容

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

名称 

类型 

说明 

aliasadm

文件 

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

mail

文件 

用户代理。 

mailcompat

文件 

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

mailq

文件 

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

mailstats

文件 

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

mailx

文件 

用户代理。 

mconnect

文件 

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

praliases

文件 

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

rmail

符号链接 

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

vacation

文件 

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

/etc/mail 目录的内容

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

名称 

类型 

说明 

Mail.rc

文件 

mailx 用户代理的缺省设置。

aliases

文件 

邮件转发信息。 

aliases.db

文件 

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

aliases.dir

文件 

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

aliases.pag

文件 

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

mailx.rc

文件 

mailx 用户代理的缺省设置。

main.cf

符号链接 

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

relay-domains

文件 

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

sendmail.cf

文件 

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

submit.cf

文件 

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

local-host-names

文件 

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

helpfile

文件 

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

sendmail.pid

文件 

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

statistics

文件 

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

subsidiary.cf

符号链接 

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

trusted-users

文件 

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

/etc/mail/cf 目录的内容

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

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

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

名称 

类型 

说明 

README

文件 

介绍配置文件。 

cf/main.mc

文件 

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

cf/Makefile

文件 

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

cf/submit.mc

文件 

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

cf/subsidiary.mc

文件 

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

domain

目录 

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

domain/generic.m4

文件 

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

domain/solaris-antispam.m4

文件 

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

domain/solaris-generic.m4

文件 

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

feature

目录 

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

m4

目录 

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

mailer

目录 

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

ostype

目录 

介绍各种操作系统环境。 

ostype/solaris2.m4

文件 

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

ostype/solaris2.ml.m4

文件 

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

ostype/solaris2.pre5.m4

文件 

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

ostype/solaris8.m4

文件 

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

/usr/lib 目录的内容

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

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

名称 

类型 

说明 

mail.local

文件 

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

sendmail

文件 

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

smrsh

文件 

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

mail

符号链接 

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

用于邮件服务的其他文件

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

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

名称 

类型 

说明 

/etc/default/sendmail

文件 

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

/etc/shells

文件 

用于列出有效的登录 shell。 

/etc/mail/cf/sh

目录 

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

/usr/sbin/check-permissions

文件 

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

/usr/sbin/check-hostname

文件 

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

/usr/sbin/editmap

文件 

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

/usr/sbin/in.comsat

文件 

邮件通知守护进程。 

/usr/sbin/makemap

文件 

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

/usr/sbin/newaliases

符号链接 

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

/usr/sbin/syslogd

文件 

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

/usr/sbin/etrn

文件 

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

/usr/dt/bin/dtmail

文件 

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

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

文件 

用于已传送邮件的邮箱。 

/var/spool/clientmqueue

目录 

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

/var/spool/mqueue

目录 

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

/var/run/sendmail.pid

文件 

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

邮件程序的交互

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

图 14–2 邮件程序的交互

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

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

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

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

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

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

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

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

sendmail 程序

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

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

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

sendmail 及其重新路由机制

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

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

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

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

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

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

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

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

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

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

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

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

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

  2. 第二种机制是转发

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

    • 其他邮箱

    • 不同的邮件程序

    • 其他邮件主机

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

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

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


    注 –

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


sendmail 功能

sendmail 程序提供了以下功能。

sendmail 配置文件

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

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

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

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

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

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

邮件别名文件

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

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

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

.mailrc 别名

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


alias aliasname value value value ...

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

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

/etc/mail/aliases 文件

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


aliasname: value,value,value ...

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

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

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

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


ignatz: ignatz@saturn

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

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


aliasname: :include:/path/aliasfile

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


user1@host1

user2@host2

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


aliasname: /home/backup/filename

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


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

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

NIS aliases 映射

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

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


aliasname: value,value,value ...

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

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


aliasname: aliasname@host

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

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

NIS+ mail_aliases

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

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


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

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

表 14–12 NIS+ mail_aliases 表的各列

列 

说明 

alias

别名的名称 

expansion

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

options

保留供将来使用的列 

comments

有关单个别名的注释列 

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


注 –

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


.forward 文件

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

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

应避免的情况

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

.forward 文件的控制

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

.forward.hostname 文件

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


% cat .forward.phoenix

sandy@example.com

"|/usr/bin/vacation sandy"

% cat .vacation.msg

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

Subject: my alias has changed



My alias has changed to sandy@example.com.

Please use this alias in the future.

The mail that I just received from you

has been forwarded to my new address.



Sandy

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

.forward+detail 文件

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

/etc/default/sendmail 文件

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

CLIENTOPTIONS=“string

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

CLIENTQUEUEINTERVAL=#

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

ETRN_HOSTS=“string

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

MODE=-bd

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

OPTIONS=string

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

QUEUEINTERVAL=#

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

QUEUEOPTIONS=p

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

邮件地址和邮件路由

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

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


注 –

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


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

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

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

    邮件将传送至本地邮箱。

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

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

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

sendmail 与名称服务的交互

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

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

sendmail.cf 和邮件域

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

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

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

sendmail 和名称服务

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

邮件域和名称服务域

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

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

名称服务的要求

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

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

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

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

NIS 与 sendmail 的交互

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

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

sendmail 与 NIS 和 DNS 的交互

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

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

NIS+ 与 sendmail 的交互

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

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

sendmail 与 NIS+ 和 DNS 的交互

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

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

sendmail 版本 8.13 中的更改

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

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

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

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

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


注 –

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


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

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

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

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


530 Must issue a STARTTLS command first

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

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

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

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

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

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

选项 

说明 

CACertFile

m4 名称: confCACERT

参数: filename

缺省值:未定义 

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

CACertPath

m4 名称: confCACERT_PATH

参数: path

缺省值:未定义 

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

ClientCertFile

m4 名称: confCLIENT_CERT

参数: filename

缺省值:未定义 

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

ClientKeyFile

m4 名称: confCLIENT_KEY

参数: filename

缺省值:未定义 

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

CRLFile

m4 名称: confCRL

参数: filename

缺省值:未定义 

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

DHParameters

m4 名称: confDH_PARAMETERS

参数: filename

缺省值:未定义 

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

RandFile

m4 名称: confRAND_FILE

参数:file:filenameegd:UNIX socket

缺省值:未定义 

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

ServerCertFile

m4 名称: confSERVER_CERT

参数: filename

缺省值:未定义 

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

Timeout.starttls

m4 名称: confTO_STARTTLS

参数: amount of time

缺省值: 1h

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

TLSSrvOptions

m4 名称: confTLS_SRV_OPTIONS

参数:V

缺省值:未定义 

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

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

不需要定义其他选项。

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

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

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

宏 

说明 

${cert_issuer}

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

${cert_subject}

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

${cn_issuer}

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

${cn_subject}

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

${tls_version}

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

${cipher}

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

${cipher_bits}

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

${verify}

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

  • OK-验证成功。

  • NO-未提供证书。

  • NOT-未请求证书。

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

  • NONE-尚未执行 STARTTLS

  • TEMP-出现临时错误。

  • PROTOCOL-出现 SMTP 错误。

  • SOFTWARESTARTTLS 握手失败。

${server_name}

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

${server_addr}

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

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

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

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

规则集 

说明 

tls_server

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

tls_client

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

tls_rcpt

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

TLS_connection

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

try_tls

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

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

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

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

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

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

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

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

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

选项 

说明 

-D logfile

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

-q[!]Qsubstr

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

-Qreason

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

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

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


O OptionName=argument          # for the configuration file

-O OptionName=argument         # for the command line

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

选项 

说明 

ConnectionRateWindowSize

m4 名称: confCONNECTION_RATE_WINDOW_SIZE

参数: number

缺省值: 60

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

FallBackSmartHost

m4 名称: confFALLBACK_SMARTHOST

参数: hostname

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

InputMailFilters

m4 名称: confINPUT_MAIL_FILTERS

参数: filename

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

PidFile

m4 名称: confPID_FILE

参数: filename

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

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

QueueSortOrder

m4 名称: confQUEUE_SORT_ORDER

添加的参数:none

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

RejectLogInterval

m4 名称: confREJECT_LOG_INTERVAL

参数: period_of_time

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

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

SuperSafe

m4 名称: confSAFE_QUEUE

短名称:s

添加的参数: postmilter

缺省值:true

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

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

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


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

FEATURE() 的名称

说明 

conncontrol

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

greet_pause

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

local_lmtp

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


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

mtamark

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

ratecontrol

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

use_client_ptr

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

sendmail 版本 8.12 中的更改

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

sendmail 版本 8.12 支持 TCP 包装

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

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


注 –

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


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

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

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

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

请注意以下情况:

可区分 sendmail.cfsubmit.cf 的功能

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


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

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

sendmail 版本 8.12 中功能的更改

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

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

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

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

选项 

说明 

-Ac

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

-Am

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

-bP

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

-G

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

-L tag

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

-q[!]I substring

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

-q[!]R substring

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

-q[!]S substring

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

-qf

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

-qGname

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

-qptime

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

-U

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

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

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

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

宏 

说明 

${daemon_addr}

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

${daemon_family}

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

${daemon_info}

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

${daemon_name}

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

${daemon_port}

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

${queue_interval}

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

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

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

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

宏 

说明 

${addr_type}

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

${client_resolve}

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

${deliveryMode}

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

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

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

${if_addr}

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

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

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

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

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

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

${if_name}

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

${load_avg}

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

${msg_size}

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

${nrcpts}

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

${ntries}

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

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

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

sendmail 版本 8.12 中新增的宏

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

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

宏 

说明 

LOCAL_MAILER_EOL

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

LOCAL_MAILER_FLAGS

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

MAIL_SETTINGS_DIR

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

MODIFY_MAILER_FLAGS

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

RELAY_MAILER_FLAGS

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

sendmail 版本 8.12 中新增的 MAX

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

表 14–23 新增的 MAX

宏 

最大值 

每个宏检查的命令 

MAXBADCOMMANDS

25 

未知命令 

MAXNOOPCOMMANDS

20 

NOOPVERBONEX XUSR

MAXHELOCOMMANDS

HELOEHLO

MAXVRFYCOMMANDS

VRFYEXPN

MAXETRNCOMMANDS

ETRN


注 –

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


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

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


symbolic_name(`value')

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

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

m4

说明 

FEATURE()

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

LOCAL_DOMAIN()

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

MASQUERADE_EXCEPTION()

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

SMART_HOST()

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

VIRTUSER_DOMAIN()VIRTUSER_DOMAIN_FILE()

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

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

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

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


FEATURE(`name', `argument')

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

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

FEATURE() 的名称

说明 

compat_check

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

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

delay_checks

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

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

dnsbl

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

  • DNS 服务器名

  • 拒绝邮件

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

enhdnsbl

参数:域名。 

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

generics_entire_domain

参数:None。 

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

ldap_routing

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

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

local_lmtp

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

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

local_no_masquerade

参数:无。 

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

lookupdotdomain

参数:无。 

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

nocanonify

参数:canonify_hosts 或无参数。

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

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

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

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

no_default_msa

参数:无。 

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

nouucp

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

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

nullclient

参数:无。 

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

preserve_local_plus_detail

参数:无。 

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

preserve_luser_host

参数:无。 

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

queuegroup

参数:无。 

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

relay_mail_from

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

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

virtuser_entire_domain

参数:无。 

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

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

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

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

FEATURE() 的名称

替代 

rbl

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

remote_mode

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

sun_reverse_alias_files

FEATURE(`genericstable')

sun_reverse_alias_nis

FEATURE(`genericstable')

sun_reverse_alias_nisplus

FEATURE(`genericstable')

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

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


MAILER(`symbolic_name')

请注意以下更改。

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

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

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


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

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

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

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

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

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

标志 

说明 

%

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

1

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

2

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

6

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

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

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


Magent_name, equate, equate, ...

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


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

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


define(`SMTP_MAILER_MAXMSGS', `1000')

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

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


注 –

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


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

等式 

说明 

/=

参数:目录的路径。 

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

m=

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

    SMTP_MAILER_MAXMSGS,用于 smtp 邮件程序


    LOCAL_MAILER_MAXMSGS,用于 local 邮件程序


    RELAY_MAILER_MAXMSGS,用于 relay 邮件程序


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

W=

参数:时间增量 

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

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

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

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

sendmail 版本 8.12 中对 LDAP 的更改

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

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

表 14–29 标记的比较

LDAP 映射规范 

规范等效形式 

结果 

-k"uid=%s"

-k"uid=*"

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

-k"uid=%0"

-k"uid=\2A"

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

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

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

标志 

说明 

-1

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

-r never|always|search|find

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

-Z size

限制要返回的匹配项数。 

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

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


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

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

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

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

值 

说明 

A=FILE

用于 UNIX 域套接字传送 

A=TCP

用于 TCP/IP 连接 

A=IPC

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

sendmail 版本 8.12 中新增的规则集

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

表 14–32 新规则集

集 

说明 

check_eoh

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

check_etrn

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

check_expn

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

check_vrfy

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

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

sendmail 版本 8.12 中对文件的更改

请注意以下更改。

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

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