下一页 上一页 目录

3. 配置 sendmail

3.1 主要配置文件

Sendmail 使用高度复杂的规则系统进行配置。虽然你可以用这些东西做很多巧妙的技巧,但从头开始编写 sendmail.cf 文件是非常不寻常且耗时的。如果你有兴趣这样做,你应该立即停止阅读本文档,转而阅读 O'Reilly 的 "蝙蝠书"(Bat Book)。

与手工制作这些规则不同,我们将依靠 m4 宏处理器从随 sendmail 一起分发的现成部分组装我们的配置文件。

让我们看看 sendmail.mc 文件的第一行


include(/usr/lib/sendmail.cf/m4/cf.m4)
VERSIONID(`sendmail.mc - roessler@guug.de')
OSTYPE(debian)
define(`ALIAS_FILE',`/etc/mail/aliases')

在开始时,包含了 cf.m4。这个 m4 宏文件包含了文件中其余部分的大量宏定义。请确保你在此处给出的路径是正确的 - 我们在示例中表示的路径对于 Debian GNU/Linux 是典型的。OSTYPE 宏用于为某些配置值提供一些有用的默认值。如果你没有使用 Debian 系统,你应该在此处将 "debian" 替换为 "linux"。ALIAS_FILE 告诉 sendmail 在哪里查找别名列表。

以下行告诉 sendmail 使用 genericstable 功能,以及在哪里找到使用它所需的配置文件


FEATURE(masquerade_envelope) FEATURE(genericstable, `hash
-o /etc/mail/genericstable')
GENERICS_DOMAIN_FILE(`/etc/mail/genericsdomain') 

masquerade_envelope 功能告诉 sendmail 将标头重写应用于消息的信封发件人。这是外部邮件传递子系统将 направлять 其传递失败报告和警告消息的邮件地址。generics* 文件将在下面解释。

现在,我们必须定义一个所谓的智能主机,即一台将处理你的系统外发邮件的机器。请注意,这台机器可能与你的 ISP 的 POP 和 IMAP 服务器不同。如有疑问,请联系热线。主配置文件中的代码


define(`SMART_HOST',`mail-out.your.provider')

请将 mail-out.your.provider 替换为你的互联网服务提供商的完全限定主机名。

最后两行包含 sendmail 需要的 "mailer" 定义,以了解如何处理各种类型的邮件


MAILER(local)
MAILER(smtp)

要从 sendmail.mc 文件生成 sendmail.cf 文件,请键入以下命令(以 root 身份)


# m4 sendmail.mc > _sendmail.cf
# mv -f _sendmail.cf sendmail.cf

请注意将 m4 的输出写入临时文件,然后将其移动到正确位置的技术。这有助于我们防止 sendmail 读取部分写入的配置文件。

3.2 地址重写

首先,我们必须告诉 sendmail 哪些地址应被视为本地地址(因此应进行重写)。这非常简单:只需将你的机器的完全限定主机名放入文件 /etc/mail/genericsdomain 中。要获取你的主机的完全限定名称,请键入以下命令


 $ hostname -f 

现在,让我们来讨论真正的重写表:/etc/mail/genericstable。此文件由两个空格分隔的列组成。第一列包含本地地址,第二列包含应替代使用的电子邮件地址。该文件可能如下所示


harry   harryx@your.isp
maude   maudey@her.isp
root    fredx@your.isp
news    fredx@your.isp

请注意,本地计算机上的每个帐户都应该有一个条目,以便从本地系统泄漏出来的自动生成的邮件带有正确的标头信息。

出于性能原因,sendmail 不会直接使用此文本文件,而是依赖于 "哈希" 版本。要生成它,请键入以下命令


# makemap -r hash genericstable.db < genericstable

请注意,来自 genericstable 的重写规则将适用于本地邮件或你从外部收到的消息 - 此映射仅在消息离开你的本地系统发往你的 ISP 的智能主机时使用。

3.3 别名

别名文件包含仅对本地消息有效的其他本地名称。这对于诸如 root 之类的管理帐户非常有用,这些帐户会收到来自你的系统的自动生成的消息。

/etc/mail/aliases 的合理开头可能如下文件所示


root: fred
news: root
postmaster: root
mail: root
www: root

nobody: /dev/null
MAILER-DAEMON: nobody

此示例将把 rootnewspostmastermailwww 用户的本地邮件转发给 fred,而 nobodyMAILER-DAEMON 的邮件将重定向到 /dev/null

就像 genericstable 一样,aliases 可能包含大量条目。因此,对于 sendmail 来说,使用我们刚刚描述的文本文件再次是低效的。与 genericstable 相同的机制用于 aliases:生成哈希数据库。你可以这次输入命令 newaliases,而不是直接使用 makemap。它将自动处理所有需要的操作。


下一页 上一页 目录