Java Solaris 加入 SDN 参与讨论 我的社区 注册说明

BigAdmin 系统管理门户网站
Feature Article
BigAdmin 专题文章:在 Solaris 9 平台上配置 Sendmail

在 Solaris 9 平台上配置 Sendmail

作者:Eric Rinker

我写本文档的目的是为了介绍如何在运行 Solaris 9 操作系统的计算机上对 Sendmail 进行更改的基本知识。本文档适用于对 UNIX 操作系统标准原则具有丰富实践知识的工程师。为了更好地理解本文档,您需要知道如何编辑文件和运行程序,而且需要超级用户权限。

电子邮件的工作原理(邮件传输代理)

有两种类别的应用程序可用于处理电子邮件:邮件用户代理 (Mail User Agent, MUA) 和邮件传输代理 (Mail Transfer Agent, MTA)。

邮件用户代理是有助于创建、查看和处理电子邮件的应用程序。示例包括 UNIX 环境中的 mailelm,以及 Windows 环境中的 EudoraOutlook。Netscape 和 Explorer 都是可以作为 MUA 的 Internet 浏览器。

邮件传输代理从一台计算机传输电子邮件;通常,每台计算机仅使用一个 MTA。Sendmail 可充当此角色,而计算机上的其他 MTA 包括 EximPostfixQmail

Sendmail 的发展过程

Sendmail 是世界上出现最早、使用最广泛的 MTA。它是大多数 UNIX 分发(包括 HP 的 HP-UX、IBM 的 AIX 和 Sun Microsystems 的 Solaris 操作系统)的缺省 MTA。由于 Sendmail 已经存在很长时间,因此其配置和维护工作非常复杂,但 Sendmail 几乎无所不能的优点弥补了这些缺陷。

Sendmail 最早出现在 30 多年前,如今已发展成为一种强健且功能丰富的方法,可用于在不同位置之间传输电子邮件。最初设计 Sendmail 时,洗衣机大小的硬盘驱动器才提供 64 KB 的可用存储空间,因此 Sendmail 尽一切可能来节省空间。为了做到简明扼要,Sendmail 配置文件使用了隐含参数,例如,用 "Fw" 表示“接收邮件的域”,用 "DH" 表示“获取所有本地电子邮件的人”。虽然有办法弄明白隐含参数的含义,但对于新用户来说则非常不容易理解。为了实现向后兼容,这些隐含参数仍存在于如今各种 Sendmail 版本的配置文件中。

多年来,由于向 Sendmail 中添加了各种功能,因此配置过程变得越来越复杂。为了更便于管理员进行管理,Sendmail 使用基于 m4 的编译和配置模型。管理员与生成和配置过程之间的这一层使 Sendmail 更易于设置和维护,而无需升级旧程序以处理新的交互方法。

配置

本文档不可能涵盖有关 Sendmail 的所有内容,否则,文档将会包含数百页的冗长内容。我们只是着重介绍了三种常见配置:邮件服务器、传入中继和仅传出。

修改 Sendmail 的行为时,并不直接更改 /etc/mail/sendmail.cf 文件。而是更改 .mc 文件并通过 m4 宏处理器运行该文件。一些示例 .mc 文件位于 /usr/lib/mail/cf 中:

  • main.mc 是缺省的设置系统。
  • submit.mc 将 Sendmail 配置为初始邮件提交程序。
  • subsidiary.mc 在此系统上的所有邮件发送至目的地之前通过另一台计算机中继这些邮件。

在我们的示例中,我们会将 main.mc 文件复制到 new.mc,并进行如下修改:

cd /usr/lib/mail/cf
vi new.mc
make new.cf
cp new.cf /etc/mail/sendmail.cf
/etc/init.d/sendmail restart

首先,在所有三种配置中共享公共元素。文件至少包含以下内容:

OSTYPE(`solaris8')dnl
DOMAIN(`generic')dnl
MAILER(`local')dnl
MAILER(`smtp')dnl

OSTYPE 宏定义此文件所在的系统。
DOMAIN 宏用于将另一个文件拉入生成的 sendmail.cf 文件中。
MAILER 宏定义此配置文件将使用许多不同传送方法中的哪一种。
在此示例中,我们使用的是 Solaris 8 或更高版本的系统,具有“普通”域文件,并要使用本地传送系统和 SMTP 系统。

邮件服务器

邮件服务器是用于传入邮件的典型服务器。它为 user@domain 接收邮件,将邮件传送到用户的本地邮箱,并处理邮件队列中的邮件以传送到外部世界。

您只需进行一处更改,即:将被认为是本地帐户的每个域添加到 /etc/mail/local-host-names 中。

最终结果:

OSTYPE(`solaris8')dnl
MAILER(`local')dnl
MAILER(`smtp')dnl
传入中继

传入中继是位于公司防火墙外部的公司电子邮件服务器的常见配置。这些中继将电子邮件传递到防火墙内部的预定义服务器(公司的邮件服务器),而不存储电子邮件。此设置非常适合实现过滤,因为此计算机不处理典型邮件服务器的其他任务。

要配置传入中继,首先需要添加中继服务器信息。在这种情况下,我们要将所有邮件中继到 relay.mydomain.com

define(`SMART_HOST', 'relay.mydomain.com')dnl

接下来,必须允许通过此计算机中继邮件。最好仅为内部服务器所服务的域中继邮件。以下选项指示 sendmail 将 /etc/mail/relay-domains 文件用作允许通过此服务器发送或接收邮件的域的列表:

FEATURE(`relay_entire_domain')dnl

操作已完成。此服务器现在会将 /etc/mail/relay-domains 文件中的所有域(本地帐户除外)中继到 relay.mydomain.com

最终结果:

OSTYPE(`solaris8')dnl
DOMAIN(`solaris-antispam')dnl
define(`SMART_HOST', 'relay.mydomain.com')dnl
FEATURE(`relay_entire_domain')dnl
MAILER(`local')dnl
MAILER(`smtp')dnl
仅传出

出于安全考虑,最好不要随意设置邮件中继。每台计算机都需要使用 MTA 发送电子邮件,并且某些程序要求能够通过 SMTP 服务器中继电子邮件。根据这些要求,通过将 Sendmail 配置为仅附加到回送地址,既可以为本地服务中继邮件,又可以防止系统成为开放式中继。

要使 Sendmail 仅传出邮件,Sendmail 不能接受来自任何远程主机的邮件。为此,我们强制 Sendmail 仅使用本地回送地址。

DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')

不需要任何其他选项;缺省情况下,Sendmail 将邮件从本地计算机传输到外部世界。

最终结果:

OSTYPE(`solaris8')dnl
DOMAIN(`solaris-generic')dnl
DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')
MAILER(`local')dnl
MAILER(`smtp')dnl

接下来做什么

有关中继服务器选项的详细信息,请参见 sendmail.org 的提示 Allowing controlled SMTP relaying in Sendmail 8.9 and later(在 Sendmail 8.9 和更高版本中允许受控的 SMTP 中继)。具体来说,请查看如何使用 access_db 选项以获取更强健的防垃圾邮件过滤中继服务器。

现在您已经知道如何进行更改,可以确定需要进行哪些类型的更改。首先应阅读 /usr/lib/mail/README,因为它包含有关 Sendmail 配置、m4 宏等大量信息。了解完这些信息之后,您可以查看以下资源。

书籍: 站点:

致谢

作者感谢 Sun Microsystems 的 John Beck 帮助审阅本文档。

2003 年 4 月

除非另行颁发许可,否则此处所有技术手册中的代码(包括文章、常见问题解答和样例)只能在本许可下使用。