22.3. sendmail 配置

作者:Christopher Shumway.

sendmail(8) 是 FreeBSD 中的默认邮件传输代理 (MTA)。 sendmail 的任务是从邮件用户代理 (MUA) 接收邮件然后根据配置文件的定义把它们送给配置好的的寄送程序。 sendmail 也能接受网络连接, 并且发送邮件到本地邮箱或者发送它到其它程序。

sendmail 使用下列配置文件:

文件名 功能
/etc/mail/access sendmail 访问数据库文件
/etc/mail/aliases 邮箱别名
/etc/mail/local-host-names sendmail 接收邮件主机列表
/etc/mail/mailer.conf 邮寄配置程序
/etc/mail/mailertable 邮件分发列表
/etc/mail/sendmail.cf sendmail的主配置文件
/etc/mail/virtusertable 虚拟用户和域列表

22.3.1. /etc/mail/access

访问数据库定义了什么主机或者 IP 地址可以访问本地邮件服务器和它们是哪种类型的访问。 主机可能会列出 OKREJECTRELAY 或者简单的通过 sendmail 的出错处理程序检测一个给定的邮件错误。 主机默认列出 OK,允许传送邮件到主机, 只要邮件的最后目的地是本地主机。列出 REJECT 将拒绝所有的邮件连接。如果带有 RELAY 选项的主机将被允许通过这个邮件服务器发送邮件到任何地方。

Example 22-1. 配置sendmail 访问数据库

cyberspammer.com                550 We don't accept mail from spammers
FREE.STEALTH.MAILER@            550 We don't accept mail from spammers
another.source.of.spam          REJECT
okay.cyberspammer.com           OK
128.32                          RELAY

在上面的例子中我们有 5 条记录。 与左边列表匹配的发件人受到右边列表动作的影响。 前边的两个例子给出了 sendmail 的出错处理程序检测到的错误代码。 当一个邮件与左边列表相匹配时,这个信息会被打印到远程主机上。 下一条记录拒绝来自 Internet 上的一个特别主机的邮件 another.source.of.spam。接下来的记录允许来自 okay.cyberspammer.com 的邮件连接, 这条记录比上面那行 cyberspammer.com 更准确。更多的准确匹配使不准确的匹配无效。最后一行允许电子邮件从主机和 128.32 开头的 IP 地址转发。 这些主机将被允许通过这台邮件服务器前往其它邮件服务器发送邮件。

当这个文件被升级的时候,您必须在 /etc/mail/ 运行 make 升级数据库。

22.3.2. /etc/mail/aliases

别名数据库包含一个扩展到用户,程序或者其它别名的虚拟邮箱列表。 下面是一些在 /etc/mail/aliases 中使用的例子:

Example 22-2. 邮件别名

root: localuser
ftp-bugs: joe,eric,paul
bit.bucket:  /dev/null
procmail: "|/usr/local/bin/procmail"

文件格式比较简单:邮箱名在冒号左边,右边是扩展的目标。 第一个例子简单的扩展邮箱 root 到邮箱 localuser,它可以在别名数据库中被找到。 如果没有找到匹配的,那么这个信息会被发送给本地用户 localuser。接下来的例子显示了一个邮件列表。 发送到 ftp-bugs 邮箱的邮件会被扩展为三个本地邮箱 joeericpaul。注意 一个远程邮箱可以用 [email protected] 的形式指定。 下个例子显示将邮件写到 /dev/null 文件。 最后一个例子向您展示了传送邮件到一个程序,在这个例子里邮件通过 UNIX® 管道被写到 /usr/local/bin/procmail 标准输入里。

当这个文件被升级时, 您必须在/etc/mail/运行 make来升级数据库.

22.3.3. /etc/mail/local-host-names

这是一个 sendmail(8) 被接受为一个本地主机名的主机名列表。 可以放入任何 sendmail 将从那里收发邮件的域名或主机。例如,如果这个邮件服务器从域 example.com 和主机 mail.example.com 接收邮件,它的 local-host-names 文件,可以看起来象如下这样:

example.com
mail.example.com

当这个文件被升级,sendmail(8) 必须重新启动,以便更新设置。

22.3.4. /etc/mail/sendmail.cf

sendmail的主配置文件 sendmail.cf 控制着 sendmail 的所有行为, 包括从重写邮件地址到打印拒绝远程邮件服务器信息等所有事。 当然,作为一个不同的角色,这个配置文件是相当复杂的, 它的细节部分已经超出了本节的范围。幸运的是, 这个文件对于标准的邮件服务器来说很少需要被改动。

sendmail 主配置文件可以用 m4(1) 宏定义 sendmail 的特性和行为。它的细节请看 /usr/src/contrib/sendmail/cf/README

当这个文件被修改时, sendmail 必须重新启动以便对新修改生效。

22.3.5. /etc/mail/virtusertable

virtusertable 映射虚拟域名和邮箱到真实的邮箱。 这些邮箱可以是本地的、远程的、/etc/mail/aliases 中定义的别名或一个文件。

Example 22-3. 虚拟域邮件映射的例子

[email protected]                root
[email protected]          [email protected]
@example.com                    joe

在上面这个例子里,我们映射了一个域 example.com。 这个文件用一个最初匹配的文件处理。第一项映射 [email protected] 到本地邮箱 root。下一项映射 [email protected]noc.example.net 主机的 postmaster 邮箱。最后,如果域 example.com 没有被什么匹配,它将与最后一个映射匹配,在 example.com 域,每个其它邮件信息地址到某一个主机被匹配。 在这里被映射到本地邮箱 joe