29.4.改变邮件传输代理

FreeBSD 已经安装了 Sendmail 作为 MTA,负责发信和收信。然而,系统管理员可以改变系统的 MTA。在 FreeBSD Ports 的 mail 类别中,有大量的 MTA 可供选择。

如果安装了新的 MTA,在替换 Sendmail 之前要配置和测试新的软件。关于如何配置软件的信息,请参考新 MTA 的文档。

新的 MTA 开始工作之后,使用本节中的说明来禁用 Sendmail,并配置 FreeBSD 来使用替换的 MTA。

29.4.1.停用 Sendmail

警告:

如果 Sendmail 的外发邮件服务被禁用,重要的是要用一个替代的邮件发送系统来代替它。否则,诸如 periodic(8)open in new window 这样的系统功能将无法通过电子邮件来传递它们的结果。系统的许多部分都期望有一个功能性的 MTA。如果应用程序在禁用 Sendmail 之后继续使用 Sendmail 的二进制文件来尝试发送电子邮件,那么邮件可能会进入一个不活跃的 Sendmail 队列而永远不会被投递。

为了完全禁用 Sendmail,在 /etc/rc.conf 中添加或编辑以下几行:

sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"

要只禁用Sendmail的入站邮件服务,只需在 /etc/rc.conf 中使用这个条目:

sendmail_enable="NO"

关于 Sendmail 的启动选项的更多信息可以在 rc.sendmail(8)open in new window 中找到。

29.4.2.替换默认的 MTA

当使用 Ports 安装一个新的 MTA 时,它的启动脚本也会被安装,并且在其软件包信息中提到了启动说明。在启动新的 MTA 之前,请停止运行中的 Sendmail 进程。这个例子停止所有这些服务,然后启动 Postfix 服务:

# service sendmail stop
# service postfix start

为了在系统启动时启动替换的 MTA,在 /etc/rc.conf 中添加其配置行。这个条目可以启用 Postfix MTA:

postfix_enable="YES"

一些额外的配置是需要的,因为 Sendmail 是如此的普遍,以至于一些软件认为它已经被安装和配置了。检查 /etc/periodic.conf,确保这些值被设置为 NO。如果这个文件不存在,用这些条目创建它。

daily_clean_hoststat_enable="NO"
daily_status_mail_rejects_enable="NO"
daily_status_include_submit_mailq="NO"
daily_submit_queuerun="NO"

一些替代性的 MTA 提供了他们自己的 Sendmail 命令行接口的兼容实现,以便于使用它们作为 Sendmail 的直接替代。然而,一些 MUA 可能会试图执行标准的 Sendmail 二进制文件,而不是新的 MTA 的二进制文件。FreeBSD 使用 /etc/mail/mailer.conf 来将预期的 Sendmail 二进制文件映射到新的二进制文件的位置。关于这个映射的更多信息可以在 mailwrapper(8)open in new window 中找到。

默认的 /etc/mail/mailer.conf 看起来像这样:

# $FreeBSD$
#
# Execute the "real" sendmail program, named /usr/libexec/sendmail/sendmail
#
sendmail        /usr/libexec/sendmail/sendmail
send-mail       /usr/libexec/sendmail/sendmail
mailq           /usr/libexec/sendmail/sendmail
newaliases      /usr/libexec/sendmail/sendmail
hoststat        /usr/libexec/sendmail/sendmail
purgestat       /usr/libexec/sendmail/sendmail

当左边列出的任何命令被运行时,系统实际上会执行右边显示的相关命令。这个系统使我们很容易改变在调用这些默认二进制文件时执行的二进制文件。

一些 MTA 在使用 Ports 安装时,会提示为新的二进制文件更新这个文件。例如,Postfix 会像这样更新文件:

#
# Execute the Postfix sendmail program, named /usr/local/sbin/sendmail
#
sendmail        /usr/local/sbin/sendmail
send-mail       /usr/local/sbin/sendmail
mailq           /usr/local/sbin/sendmail
newaliases      /usr/local/sbin/sendmail

如果MTA的安装没有自动更新 /etc/mail/mailer.conf,请用文本编辑器编辑这个文件,使其指向新的二进制文件。这个例子指向 mail/ssmtpopen in new window 所安装的二进制文件:

sendmail        /usr/local/sbin/ssmtp
send-mail       /usr/local/sbin/ssmtp
mailq           /usr/local/sbin/ssmtp
newaliases      /usr/local/sbin/ssmtp
hoststat        /usr/bin/true
purgestat       /usr/bin/true

一切配置完毕后,建议重新启动系统。重启提供了一个机会,以确保系统被正确配置为在启动时自动启动新的 MTA。