Sendmail是一个很受欢迎的SMTP服务器,在企业环境中,无论是只有少量用户还是数以千计的雇员它都可以灵活的给以足够支持
。它也是个复杂的软件,在你的Linux服务器上配置Sendmail以使它运行起来并不是一件容易的事。尽管Sendmail的开发者一直试图使配置过程简单化,但你所在公司的需求将最终决定配置一个高效的Sendmail服务器的难度。
我的文章“在Linux中配置Sendmail服务器”回顾了最初的安装过程以及在Linux中配置和运行Sendmail所要用到的一些基础配置文件。这篇文章将告诉你怎样进一步掌握基础的配置文件并且解释将Sendmail配置成一台可靠的SMTP服务器的步骤。
配置文件
从8.9版本开始,Sendmail所必需的所有配置文件都放在目录/etc/mail/下,而且命名规则有些改变。如果你用的是老版本,请注意表格A。
Pre-Sendmail 8.9 location
/etc/sendmail/sendmail.cw
/etc/aliases
/etc/sendmail.ct
/etc/sendmail.hf
Sendmail 8.9+ location
/etc/mail/local-host-names
/etc/mail/aliases
/etc/mail/trusted-users
/etc/mail/helpfile
主配置文件还是/etc/mail/sendmail.cf。这个文件是在初始安装时由sendmail.mc创建的。它允许Sendmail根据诸如OSTYPE和MAILER这样的一些选项来推断自己的初始配置。
虽然大多数人都不需要重新编辑主配置文件,但有些人还是要通过这些晦涩难懂的语法来创建新的Sendmail管理员账户。然而,振作起来,事情并不象开始看到的那么糟。
首先,我们默认Sendmail已经安装并且是初始的设置状态。普通人在第一次安装使用Sendmai时,总是会运行一个开放的中继,这样做使得很容易被无聊的人发现并利用。现在你通过修改/etc/mail/relay-domains文件可以很容易的指定可以通过你的服务器的地址。在这个文本文件中列出了可以通过你的服务器发送电子邮件的主机名。对大多数公司而言,只需要列出本地主机名和别名,但大一些的公司可能需要添加大量主机。
这一步很重要,设置Realtime Blackhole Lists(RBLs)添加权限。如果你一个想捣乱的人使用你的服务器并且利用列表中的信息来发送垃圾邮件,就会引起发送失败和550错误,直到你将其从列表中删去。所以最好是只将那些有权访问Sendmail权限的主机写在列表中。
对服务器而言,/etc/mail/local-host-names文件是很有用的
。将FEATURE(use_cw_file)包含在你的sendmail.mc文件当中,Sendmail将用本地主机名来作为你的本地别名。
# local-host-names - aliases for your server
example.com
www.example.com
mail.example.com
otherdomain.com
如果Sendmail没有在收件列表中发现相应的主机名,它将拒绝接受对方发来的邮件。请记住在修改了这个或其他任何配置文件后你必须重启Sendmail。这些修改可以这样完成,重新启动/etc/init.d/sendmail或发送命令kill –1
别名
文件/etc/mail/aliases允许为本地用户,应用程序,甚至其他别名提供虚拟邮箱:
# Basic system aliases
MAILER-DAEMON: postmaster
postmaster: root
# General redirections for pseudo accounts
bin: root
daemon: root
# Well-known aliases
manager: root
webmaster: tnooning, bmarley, hsimpson
complaints: /var/log/complaints
sysadmin: root
你会发现Web管理员别名有多重收件人列表。这是正确的。只要确保所有的本地用户名都是用逗号隔开的。而且,有关别名的意见将会以电子邮件的形式发到/var/log/complaints文件中。这是我最近发现的并且已经开始大量应用。需要注意的事,在你修改了别名文件之后,你必须执行新的别名。这是Sendmail自带的程序,可以根据别名文件创建必要的数据库。
设置可信任用户
这个可选的特性在sendmail.mc中的名称为use_ct_file
。这个列表中的用户可以改变电子邮件的寄件人。在/etc/mail/trusted-users文件中每个用户名占一行。这对运行在你的服务器上的脚本或应用程序给某个人或组发信息是非常有用的。它可以更容易的快速识别一个电子邮件的信息。例如,一个查询DNS服务器的脚本和邮件错误可以由dns_failures@example.com发出。
虚拟用户表格
虚拟用户表格(/etc/mail/virtusertable)向你服务器上的真实邮箱发送虚拟域和邮箱的邮件。这些邮箱可以是本地的,远程的,或是由/etc/mail/aliases定义的别名。这些是在你的sendmail.mc文件中一命令行的形式进行初始配置的。这个文件一般为:
root@example.com root
webmaster@example.com webguru@example2.com
@example.com tom
在以上的例子中,我们已经有了一个example.com文件。第一行root@example.com用来定位本地邮箱位置。下一行的webmaster@example.com是指远程邮件地址webguru@example2.com。@example.com是一个通配符,它允许任何用户名接受以@example.com结尾发送来的邮件。因此,任何向example.com发送的邮件都存放在本地邮箱中。
RBLs
RBLs是由公众组织维护的数据库,他们的目标是努力阻止服务器被持续不断的无聊的垃圾邮件所淹没。即使是今天,这样的事情还是时常发生,包括很受欢迎的http://www.orbz.org/, http://relays.osirusoft.com/, 和http://mail-abuse.org/rbl/,你可以通过以下的命令让Sendmail访问这些站点:
FEATURE(rbl, `rbl.example.org', `Rejected – see http://example.org/')
如果这个特性成功执行,它将检验每个发向你的服务器的邮件,在RBL中查找对方的地址,以决定是否接受这封邮件。在上面的例子中,当有邮件被拒绝时,将出现一个失败信息,然后引导用户在http://example.org/上查找相应原因。由于这些信息保存在磁盘上,对经常收到海量信息的大型站点特别有用。
管理Sendmail
如果你习惯于在Linux中执行程序,你可能也会经常检查日志文件
。Sendmail很好的利用的它的日志文件,你可以追捕到大部分问题的所在。mail.log和mail.err是你需要注意的两个主要文件,还有就是ail.warn和mail.info。这些文件有许多共同之处,所以我一般只看前两个文件。一般而言,你可以在 /var/log/下找到这些文件,对特定的系统和Linux版本,可能在其他目录下。如果必要的话,你可以察看/etc/syslog.conf文件。典型的电子邮件成功发送一般是这样的:
Oct 25 18:22:14 example sendmail[29322]: SAA29322: from=user, size=193, class=0, pri=60193, nrcpts=2, msgid=<200110260122.SAA29322@example.com>, relay=user@local
Oct 25 18:22:14 example sendmail[29324]: SAA29322: to=help@techsupport.net, ctladdr=user (500/1000), delay=00:00:00, xdelay=00:00:00, mailer=local, stat=Sent
你可以在mail.log看到和下面类似的拒绝信息:
Oct 23 14:23:51 example sendmail[27467]: OAA27467: ruleset=check_rcpt, arg1=, relay=west1.mail-abuse.org [204.152.186.193], reject=550 ... Relaying denied
通常,你所需要的所有信息都存储在这些日志文件中,包括用户名,主机名,出错代码。这些出错代码很有用处,可以通过这些让你对自己有更好的了解。
总结
Sendmail是我们目前使用的最流行的SMTP服务器之一。无论是只有少数用户还是对有数千雇员的大公司它都显得游刃有余。通过使用集中式的结构目录和不断增强的语法功能,整个结构变得简单明了。你现在应该可以更好的了解Sendmail的配置和使用的日志文件,可以为你的公司配置一个SMTP服务器了。