Ict-创新/LPI/108.3
考生应了解常用的 MTA 程序,并能够在客户端主机上执行基本的转发和别名配置。其他配置文件不在此范围内。
关键知识领域
- 创建电子邮件别名。
- 配置电子邮件转发。
- 了解常用的 MTA 程序(postfix、sendmail、qmail、exim)(不含配置)
邮件系统由许多组件构成,如图所示。
图 108.3-1: 邮件系统架构
邮件用户代理 (MUA) 是最终用户直接与之交互以撰写或阅读电子邮件的程序。MUA 通常允许用户将邮件组织到本地机器上的文件夹中。例如,Kmail、Evolution、pine、mutt、elm 等等。
邮件传输代理 (MTA) 是执行邮件传递“长途”的程序。它们将消息传递到目标域的邮件服务器。MTA 在端口 25 上监听,并使用 SMTP(简单邮件传输协议)来传输消息。通常,MTA 被配置为接受发往一个或多个“本地”域的入站邮件,以及接受来自本地网络上的 MUA 的出站邮件。MTA 不应被配置为中继邮件(即,将邮件从一个远程 MTA 转发到另一个),也不应接受来自远程、未经身份验证的 MUA 的邮件。这种“开放式中继”为垃圾邮件发送者提供了完美的掩护,并可能导致您的服务器被列入黑名单。
历史上,sendmail 一直是最受欢迎的邮件传输代理,并且仍然被广泛使用。它的配置文件以复杂著称。其他 MTA 包括 postfix、exim 和 qmail。
邮件递送代理 (MDA) 处理邮件的本地传递。消息可以传递给个人、邮件列表、文件,甚至传递给程序。有几种 MDA 在使用中。例如,Postfix 可以充当 MDA,将邮件直接传递到用户的邮箱。其他 MDA 包括 procmail 和 Dovecot 的“deliver”组件。
邮件访问代理 (MAA) 将邮件服务器上的邮箱中的消息传递给用户的 MUA。两种协议在使用中比较普遍:POP3 和 IMAP。POP3 在互联网服务提供商中很受欢迎;通常,消息从邮件服务器下载到用户的本地机器。然后,这些消息从服务器中删除,因此用户负责长期存储。IMAP 通常由企业邮件服务器使用。使用 IMAP,邮件服务器通常负责用户邮件的长期存储。MAA 的示例包括 imapd、qpopper 和 dovecot。
历史上,sendmail 一直是最广泛使用的 MTA。通常,用于停止或启动 sendmail 守护进程的 sendmail 脚本位于 /etc/rc.d/init.d/ 目录中。
sendmail 的主要配置文件是 /etc/mail/sendmail.cf (或 /etc/sendmail.cf)。 在这里,您可以指定服务器的名称以及允许邮件中继的来源和目标主机的名称。该文件包含一系列复杂的规则,这些规则控制邮件地址的重写以及传递机制的选择。一些关键选项包括
sendmail.cf 选项 | |
Cw | 邮件主机名。也可以包含邮件服务器将假定的主机名或域名列表,但最好使用 Fw 来实现这一点 |
Fw | 指向包含 sendmail 将接收邮件的域名的文件的路径 |
Ds | '智能主机' 的地址,这是一个将中继我们的出站邮件的邮件服务器 |
对于 LPI 认证,您不需要知道如何编写 sendmail.cf 规则。事实上,这些规则通常是使用 sendmail.m4 或 sendmail.mc 宏文件生成的,通过运行以下命令来生成 sendmail.cf 文件
m4 sendmail.mc > sendmail.cf
此过程不属于 LPI 目标。
Sendmail 使用文件 /etc/mail/local-host-names 来确定它应该为哪些邮件域接收邮件。此文件必须列出此服务器将处理(传入)邮件的所有机器和域名。如果您更改此文件,则必须向 sendmail 发送一个 HUP 信号,以便它注意到更改。
Sendmail 通常作为守护进程运行,在端口 25 上监听 SMTP 消息。它也可以从命令行调用,以注入邮件消息或检查和管理邮件队列。postfix 等备用 MTA 通过提供兼容的命令行界面来模拟 sendmail 的行为。这包括命令 mailq、newaliases 和 sendmail 命令本身。
别名允许系统管理员或单个用户重新路由邮件。别名允许您定义邮件列表,或允许用户使用多个名称进行引用。
文件 /etc/aliases 定义系统范围的别名。(实际上,此文件的路径名由 sendmail.cf 中的“AliasFile”参数指定,因此它在您的系统上可能有所不同。/etc/mail/aliases 是一个常见的备用位置。)此文件中的每一行都包含两个字段,如下所示
alias: address_1,address_2,address_3, ...
第一个字段是别名名称。别名地址可以是
本地用户名(例如:benjamin)
本地文件名(例如:/tmp/maildrop)
命令(例如:| someprogram)
别名的一个简单用法是为用户定义一个备用邮件名称。例如,如果用户 Fred Flintstone 有一个名为 fred 的 Linux 帐户,则 /etc/aliases 中的一行,例如
flintstone: fred
将允许 fred 以 flintstone 的名称接收邮件。
您甚至可以使用别名将邮件重定向到远程域,例如
flintstone: [email protected]
(但请注意,如果存在名为 flintstone 的本地帐户,此行将阻止他接收任何电子邮件!)
您也可以使用别名来定义邮件列表,例如
authors: tom, dick, [email protected]
有关其他选项,请参阅联机帮助页 aliases(5)。
对 /etc/aliases 文件进行更改时,必须运行 newaliases 命令来重建别名数据库 /etc/aliases.db。这是 sendmail 在运行时查询的文件。
单个用户可以通过将条目放入文件 ~/.forward 来创建邮件别名。
此文件包含一行上用逗号分隔的地址列表,或多行上单独的条目。例如,用户可以选择将他的电子邮件转发到其他站点,并将其保存到本地文件,在 ~/.forward 中使用以下条目
"/home/james/archive", [email protected]
邮件队列
当邮件被邮件服务器接受时,它将被放置到消息存储中(在上面的图中显示为“邮箱”)。消息存储使用两种格式。最古老(也是最简单)的格式是 mbox 格式。使用此格式,每个用户的邮件都存储在一个文件中(通常是 /var/spool/mail/fred,用于用户 fred)。这是一个纯文本文件;消息在到达时被简单地追加到文件中。每条消息的开头由一个“From”行标记。
消息存储的另一种格式是 maildir 格式。maildir 消息存储有三个目录,名为 tmp、new 和 cur。这些目录通常位于用户主目录中的 mail 子目录中。maildir 消息格式将每条消息存储在单独的文件中。
根据使用的邮件用户代理(mutt、pine、elm…),用户可以将这些消息存储在他自己的主目录中,或者将它们下载到另一台机器上。
所有出站邮件都缓存在 /var/spool/mqueue 中。如果网络中断或速度很慢,或者正在发送许多消息,那么邮件会在邮件缓存队列中积累。 您可以使用 mailq 实用程序或 sendmail –bp 查询队列。
管理员可以使用 sendmail –q 清空服务器的队列。
备用 MTA
Sendmail 目前是 RedHat、Fedora 和许多其他 Linux 发行版的默认 MTA。但是,可以使用许多 MTA 作为替代。这些包括
Qmail 是由 Dan Bernstein 编写的 MTA,作为“安全、可靠、高效、简单的邮件传输代理”。虽然最初 qmail 没有开放许可,但现在它是开源的,可以自由地重新分发。与大多数 MTA 一样,qmail 遵守 /etc/aliases 文件,并提供 newaliases 命令来处理它。用于管理 qmail 消息队列的相关工具包括 qmail-read、qmail-stat 和 qmhandle。
Exim 是在剑桥大学开发的 MTA。它运行在 UNIX 和 Linux 上,并在 GPL 许可下提供。
Postfix 是由 Wietse Venema 编写的 MTA,它是在 IBM 公共许可证 vsn 1.0 下发布的。Postfix 模块化程度很高。每个操作都由一个独立的可执行文件执行,该文件仅以执行工作所需的最低权限运行。各个组件由主守护进程启动;这由文件 /etc/postfix/master.cf 配置。Postfix 的所有配置都在 /etc/postfix 中完成;主要配置文件是 main.cf。postconf 命令用于检查和修改此文件中定义的参数。Postfix 以其安全性著称,配置起来也相对简单。在 sendmail 之后,它可能是最受欢迎的 MTA,并且在 Ubuntu 中默认使用。
邮件传递和 DNS
MTA 需要找到要向其传递邮件的域的邮件服务器。它们通过查询 DNS 以获取要到达的域的 MX(邮件交换器)记录来做到这一点。例如,如果 MTA 将邮件传递到 [email protected],它将查询 DNS 以获取 example.com 域的 MX 记录。此记录指示域邮件服务器的名称。如果您正在配置邮件服务器,则需要添加(或要求您的 ISP 添加)您的域的 DNS MX 记录以指向您的机器。
最后,为了使用域名作为有效的电子邮件地址,需要在您的域的权威名称服务器(通常是您的 ISP)上添加 MX 记录。
您还需要将域名添加到 /etc/mail/local-host-names
以下是使用文件、术语和实用程序的部分列表:* ~/.forward
- sendmail 模拟层命令
- newaliases
- mailq
- postfix
- sendmail
- exim
- qmail