29.3. sendmail 配置文件
Sendmail 是 FreeBSD 中的默认邮件传输代理 (MTA)。sendmail 的任务是从邮件用户代理 (MUA) 接收邮件然后根据配置文件的定义把它们送给配置好的的寄送程序。sendmail 也能接受网络连接,并且发送邮件到本地邮箱或者发送它到其它程序。
Sendmail 的配置文件位于 /etc/mail 中。本节将更详细地讲解这些文件。
29.3.1./etc/mail/access
这个访问数据库文件定义了哪些主机或 IP 地址可以访问本地邮件服务器,以及它们有什么样的访问权限。列为 OK
的主机,也就是默认选项,允许向该主机发送邮件,只要邮件的最终目的地是本地机器。列为 REJECT
的主机会拒绝所有的邮件连接。被列为 RELAY
的主机被允许使用该邮件服务器向任何目的地发送邮件。被列为 ERROR
的主机将使他们的邮件以指定的邮件错误返回。如果一个主机被列为 SKIP
,Sendmail 将放弃当前对这个条目的搜索而不接受或拒绝邮件。被列为 QUARANTINE
的主机将被保留其邮件,并将收到指定的文字作为保留的原因。
对 IPv4 和 IPv6 地址使用这些选项的例子可以在 FreeBSD 的样本配置中找到,/etc/mail/access.sample 。
# $FreeBSD$
#
# Mail relay access control list. Default is to reject mail unless the
# destination is local, or listed in /etc/mail/local-host-names
#
## Examples (commented out for safety)
#From:cyberspammer.com ERROR:"550 We don't accept mail from spammers"
#From:okay.cyberspammer.com OK
#Connect:sendmail.org RELAY
#To:sendmail.org RELAY
#Connect:128.32 RELAY
#Connect:128.32.2 SKIP
#Connect:IPv6:1:2:3:4:5:6:7 RELAY
#Connect:suspicious.example.com QUARANTINE:Mail from suspicious host
#Connect:[127.0.0.3] OK
#Connect:[IPv6:1:2:3:4:5:6:7:8] OK
要配置访问数据库,请使用样本中所示的格式在 /etc/mail/access 中建立条目,但不要在条目前面加上注释符号(#)。为每个需要配置访问权限的主机或网络创建一个条目。匹配表格左边的邮件发送者会受到表格右边的行动影响。
每当这个文件被更新时,要更新其数据库并重新启动 Sendmail:
# makemap hash /etc/mail/access < /etc/mail/access
# service sendmail restart
29.3.2./etc/mail/aliases
这个数据库文件包含一个虚拟邮箱的列表,这些虚拟邮箱被扩展为用户、文件、程序或其他别名。下面是几个条目来说明文件的格式:
root: localuser
ftp-bugs: joe,eric,paul
bit.bucket: /dev/null
procmail: "|/usr/local/bin/procmail"
冒号左边的邮箱名称被扩展到右边的目标(s)。第一个条目将根邮箱扩展到 localuser
邮箱,然后在 /etc/mail/aliases 数据库中进行查找。如果没有找到匹配的,邮件就会被投递到 localuser 。第二个条目显示了一个邮件列表。给 ftp-bugs
的邮件被扩展到三个本地邮箱 joe
, eric
, 和 paul
。一个远程邮箱可以被指定为 user@example.com
。第三个条目显示了如何将邮件写入一个文件,在这个例子中是 /dev/null 。最后一条演示了如何通过 UNIX® 管道将邮件发送到一个程序,/usr/local/bin/procmail 。关于这个文件的格式,请参考 aliases(5) 的更多信息。
每当这个文件被更新时,运行 newaliases
来更新和初始化别名数据库。
29.3.3./etc/mail/sendmail.cf
这是 Sendmail 的主配置文件。它控制着 Sendmail 的整体行为,包括从重写邮件地址到打印拒绝信息到远程邮件服务器的一切。因此,这个配置文件是相当复杂的。幸运的是,对于标准的邮件服务器来说,这个文件很少需要被修改。
主 Sendmail 配置文件可以由定义 Sendmail 功能和行为的 m4(1) 宏构建。参考 /usr/src/contrib/sendmail/cf/README 以了解其中的一些细节。
每当对这个文件进行修改时,Sendmail 需要重新启动以使修改生效。
29.3.4./etc/mail/virtusertable
这个数据库文件将虚拟域和用户的邮件地址映射到真实的邮箱中。这些邮箱可以是本地、远程、/etc/mail/aliases
中定义的别名或文件。这允许在一台机器上托管多个虚拟域。
FreeBSD 在/etc/mail/virtusertable.sample
中提供了一个配置文件样本来进一步演示其格式。下面的例子演示了如何使用该格式创建自定义条目:
``` root@example.com root postmaster@example.com postmaster@noc.example.net @example.com joe
这个文件是按第一匹配顺序处理的。当一个电子邮件地址与左边的地址相匹配时,它就被映射到右边列出的本地邮箱。本例中第一个条目的格式是将一个特定的电子邮件地址映射到本地邮箱,而第二个条目的格式是将一个特定的电子邮件地址映射到远程邮箱。最后,来自 example.com
的任何电子邮件地址,如果没有与之前的任何条目相匹配,将与最后一个映射相匹配,并被发送到本地邮箱 joe
。当创建自定义条目时,使用这种格式并将其添加到 /etc/mail/virtusertable 。每当这个文件被编辑时,要更新其数据库并重新启动 Sendmail。
# makemap hash /etc/mail/virtusertable < /etc/mail/virtusertable
# service sendmail restart
29.3.5./etc/mail/relay-domains
在 FreeBSD 默认的安装中,Sendmail 被配置为只能从它所运行的主机上发送邮件。例如,如果有一个 POP 服务器,用户将能够从远程位置检查邮件,但他们将不能从外部位置发送邮件。通常情况下,在尝试后的片刻,将从 MAILER-DAEMON 发送一封带有 5.7中继拒绝
信息的电子邮件。
最直接的解决办法是将 ISP 的 FQDN 添加到 /etc/mail/relay-domains 。如果需要多个地址,可以每行添加一个。
your.isp.example.com
other.isp.example.net
users-isp.example.org
www.example.org
在创建或编辑这个文件后,用 service sendmail restart
重新启动 Sendmail。
现在,只要用户在该系统上有一个账户,通过该系统的任何主机发送的任何邮件都会成功。这使得用户可以从系统中远程发送邮件,而不至于让系统从互联网上转发垃圾邮件。