基本的邮件服务器已能满足大多数人的需求,但经过一段时间之后,您可能会遇到更多的使用者要求。例如,开始有人报怨垃圾信太多、有人希望可以使用网页收发信件等等。本章将介绍一些邮件服务器的应用,让您的服务器功能更加强大。
读完本章后,您将了解下列主题:
- 如何架设虚拟邮件主机。
- 如何阻挡垃圾信及病毒信。
- 如何架设 Openwebmail 以使用网页收发信件。
17.1 虚拟邮件主机
如果我们想要在同一台机器上收多台主机的信件,或者想要在一台主机上设定可以 "收" "发" 信件的虚拟账号 (如果只要收,可以简单的设定 aliases 即可),我们可以经由虚拟主机的设定来达成。假设有二个 Domain Name,一个是 abc.com,另一个是 old.cde.com。这份文件包含了二种设定方式:一个是让二个 domain name 收到的信对映到一台机器上的使用者,也就是说不能有不存在的虚拟使用者;另一个设定是让你可以设定不同的虚拟使用者对映到不同机器上的任何使用者。不管我 们要做哪一种设定,都必需要先设定 DNS。
请注意,这份文件中的设定并不会让你可以拥有一个真正的虚拟账号,因为这里是将虚拟账号对映到一个存在的邮件地址。使用这份文件的设定和设定 /etc/aliases 最大的不同在于设定 aliases 只能让虚拟的账号收信,而无法寄信。
请注意,这份文件中的设定并不会让你可以拥有一个真正的虚拟账号,因为这里是将虚拟账号对映到一个存在的邮件地址。使用这份文件的设定和设定 /etc/aliases 最大的不同在于设定 aliases 只能让虚拟的账号收信,而无法寄信。
17.1.1 DNS 设定
为了要让寄出去的信知道要往哪一台主机上送,必须要先设定 DNS。假设我们现在已经有一台设定好 DNS 的主机,hostname 是 abc.com。我们要让 abc.com 处理 old.cde.com 的信件的话,最简单的方式就是将 mail.cde.com 指向 abc.com (CNAME records),也就是二个 doamin 有同样的 IP。不过这样一来,old.cde.com 就不能独立存在了,也就是说不会有一台机器的 hostname 名为 old.cde.com,并提供 FTP、www(也可以有虚拟主机)、telnet等服务。
因此,我们要使用的是改变 DNS 的 MX record。设定只有处理该主机的邮件时,才将 old.cde.com 转向 abc.com。请在你的 DNS 中加入下列设定:
old.cde.com IN MX 10 abc.com. |
完成后要重新读设定档并等一段时间设定才会在网络上生效。接着我们就可以来做 sendmail 的设定了。
17.1.2 对映到同一台机器的真实使用者
第一种设定的使用时机,例如你的公司主机原来是 mail.cde.com,现在换成了 abc.com,你希望让原本的使用者 [email protected] 和新的 [email protected] 都能由 [email protected] 来收信。这种设定很简单,只要编辑
/etc/mail/relay-domains 及
/etc/mail/local-host-names 这二个档案,加入要增加收信的主机名称即可。以本例而言,除了那二个档案原本的内容外,要再增加一行:
mail.cde.com |
这样了不管是原本 mail.cde.com 或是真正主机名称 abc.com 的信件,都可以由 abc.com 的相同的使用者收信。
17.1.3 可以拥有虚拟使用者
第二种设定是让我们可以设定一个虚拟的账号,并且可以利用它来送信。这个设定是经由编辑
/etc/mail/virtusertable 来达成。相同的,我们在 abc.com 这台主机中设定它的
virtusertable。我们以下列二个
virtusertable 的例子来说明,请注意,二个字段间的空白是用 tab 键,而非使用空格键:
范例一:
[email protected] jschmoe |
上面的例子中,凡是寄给 [email protected] 的信都会送给本地使用者 jschmoe。而以 [email protected] 寄出的信收件人所看到的寄件人一样是 [email protected],如果在寄信时要身份认证的话,必须使用 jschmoe 的账号及其密码。接下来,寄给 [email protected] 的信会送给 [email protected],剩下来所有给 mail.cde.com 的信都会送给本地 jschmoe 这个使用者。
范例二:
[email protected] jschmoe |
这一个例子中,第一行和范例一一样,凡是寄给 [email protected] 的信都会送给本地使用者 jschmoe。而凡是寄给 [email protected] 都会响应没有这个使用者。第三行如果是寄给 [email protected] 的信,都会转给本地的 yourdomain-list 这个虚拟使用者,你可以在
/etc/aliases 中加入关于 yourdomain-list 这个使用者的信要怎么处理,怎么设定别名。最后一行,凡是其它非上述三行使用者的信,都交由在 othercompany.com 这台机器上相对映的使用者来处理。
你可以依照上面的范例来编辑你的
virtusertable,完成编辑后,必须要使用以下指令来将这些档案做成 sendmail 能接受的 DB 格式:
# makemap hash virtusertable.db < virtusertable
# newaliases
都完成后,我们就可以到别台机器使用虚拟账号来试试收发信。假设我们要使用的虚拟账号是上述范例一中的第二行 [email protected],以 outlook 中的设定为例,所设定的 E-mail 仍然是 [email protected],如下图所示:
图 17-1
所设定的 pop3 及 smtp 主机也是 mail.cde.com。但是使用者及密码是 othercompany.com 上的使用者 jdoe 及其密码,如下图所示:
图17-2
在上图中,如果 othercompany.com 在寄信时要身份认证,则上图中 "外寄邮件服务器" 的选项 "我的服务器需要验证"必须打勾。如此一来您就可以使用 [email protected] 来收发信,而且在别人收到信时会显示寄件人是 [email protected]。
17.2 垃圾信及病毒防护
全拜电子邮件所赐,经由因特网,我们可以很快的传送邮件。然而,却有人利用电子邮件从事令人不悦的广告发送行为。垃圾邮件可以说是目前网络上最令人 厌恶的行为,相信常使用电子邮件的读者们每天一定都会收到许多垃圾信件。所有服务器上处理的使用者都要处理这些垃圾邮件简直是太浪费资源了。而且,除了垃 圾信外,邮件中所夹带的病毒也十分危险,万一有人不小心打开了具有病毒的信件,接下来又是另一场灾难。
面对这些垃圾信及病毒信,我们有更好的解决方式,就是使用 MailScanner 加上病毒防护的功能,让我们的邮件服务器更加安全、好用。MailScanner 是一套免费的软件,很多网站都使用它来过滤垃圾信件。除了垃圾信外,我们还可以外挂其它模块,以支持病毒扫瞄。另外,我们也可以用它来阻挡具有特定的扩展 名附件的邮件。您可以到
http://www.sng.ecs.soton.ac.uk/mailscanner/ 找到更多关于 MailScanner 的说明。
使用 MailScanner 的好处是我们原本安装的 Sendmail 不需要做任何的修改,只要将 Sendmail 跑在 MTA only 的模式即可。
17.2.1 MailScanner 架构说明
在没有安装任何垃圾信处理软件之前,在寄信、或者由其它服务器收到信件时,我们的服务器会先判断该信件是否为本机的信件,如果是,则呼叫 MDA (mail 这支指令),将信件放到
/var/mail 目录下。如果是要给其它服务器的信件,则放到
/var/spool/mqueue 下,Sendmail 会定时检查该目录,并将信件传送出去。示意图如下所示:
图 17-3
在有了 MailScanner 后,当 Sendmail 收到信后,会先将信件放到
/var/spool/mqueue.in 中。接下来 MailScanner 会定时去检查该目录下的档案,经过 MailScanner 扫瞄检查后,合法的邮件会被放到
/var/spool/mqueue 中。接下来的处理程序就和原本 Sendmail 的处理一样。示意图如下:
图 17-4
MailScanner 在检查邮件时有很多功能,它使用了一些外挂模块来检查垃圾信及病毒信。详细的检查过程如下:
- 定时检查 /var/spool/mqueue.in 中的邮件。
- 先使用 RBL 检查寄件者的 IP 是否在黑名单中。
- 使用 SpamAssassin 来检查信件内容,看看信件格式是否有不合法或是具有垃圾信特征。
- 呼叫病毒检查的模块来扫瞄邮件。
- 进行其它的内容检查,包含附件的扩展名、邮件内容是否包含特定的 HTML 格式等等。
- 全都都合法则将信件放到 /var/spool/mqueue 中。如果不合法,则依我们的设定进行退信、隔离、删除、或加上标记后送出。
图 17-5
当 MailScanner 判断某封信件为垃圾信时,它有几种处理模式,包含附加标记在主旨上后送出、退信、删除、隔离、转寄等等。我们在使用 MailScanner 之后,应该要先在邮件的主旨上附上标记后送出。当有使用者发现不是垃圾信却被设为垃圾信时,我们可以将该信件的寄件者加入白名单中 (就是不检查信件的寄件者清单)。如此运作一段时间都没问题后,再使用比较严格的方式,进行退信或删除。如此一来,我们才不会遗漏正常的信件。
MailScanner 的功能十分强大,但是设定却很容易,我们只要进行一些基本设定,即可以拥有强大的垃圾信及病毒扫瞄功能。
17.2.2 安装 MailScanner
FreeBSD 已经将 MailScanner 放入 ports 中,我们只要使用 ports 来安装即可。除了 MailScanner 外,我们还要安装 SpamAssassin 及防毒软件 ClamAV。
首先请使用下列指令安装 MailScanner:
# cd /usr/ports/mail/mailscanner/
# make install
# make initial-config
接着安装 ClamAV:
# cd /usr/ports/security/clamav/
# make install clean
执行了
make install 后,会出现一个选单,请记得要选取「MILTER」。
最后安装 SpamAssassin:
# cd /usr/ports/mail/p5-Mail-SpamAssassin/
# make install clean
安装完后,我们必须先进行一些基本的设定。首先是防毒软件方面,我们必须设定定时更新病毒码。请先编辑
/etc/rc.conf 并加入下列这一行:
clamav_freshclam_enable="YES" |
上述设定将会在开机时启动 freshclam 这支程序,预设每二小时会去检查一次是否有新的病毒码要下载。
由于 MailScanner 会取代原本 Sendmail 的部份功能,而 Sendmail 只要启用 MTA 模式即可,所以我们先编辑
/etc/rc.conf 并停用原本的 Sendmail。
sendmail_enable="NONE" |
接着我们使用下列指令来将 MailScanner 及 Sendmail 开机时所必须使用的启动程序更名,这样系统在开机时才会启动 MailScanner 及 Sendmail 的 MTA 模式:
# cd /usr/local/etc/rc.d
# mv mta.sh.sample mta.sh
# mv mailscanner.sh.sample mailscanner.sh
由于 MailScanner 会在信件进来时,先将信件放到
/var/spool/mqueue.in 中,我们必须先建立下列 MailScanner 所必须使用的目录:
# mkdir -p /var/spool/mqueue.in
# mkdir -p /var/spool/MailScanner/incoming
# mkdir -p /var/spool/MailScanner/quarantine
这样我们就已经完成了大部份的设定,接下来我们必须进行 MailScanner 的细部设定。MailScanner 的设定档位于
/usr/local/etc/MailScanner/MailScanner.conf,如果您希望快速的设定好 MailScanner,以下是几个必须修改的地方:
# MailScanner 会检查档案的扩展名、格式。如果是 zip 档,它也会将它解压缩并检查压缩 |
最后,您就可以重开机以使用 MailScanner 的功能了。
17.2.3 设定 MailScanner
除了上述的设定外,MailScanner 及 SpamAssassin 还有很多的设定项目可以修改,相关的设定档全部都放在
/usr/local/etc/MailScanner 中。我们先来说明一下这些设定档的用途:
檔名 | 用途 |
MailScanner.conf | 这是 MailScanner 的主要设定档。 |
filename.rules.conf | 用来设定拒绝的邮件附件的扩展名格式。 |
spam.whitelist.rules | 用来设定白名单,也就是不会被判断为垃圾信的寄件者清单。 |
spam.blacklist.rules | 用来设定黑名单,也就是一定是垃圾信的来源清单。 |
MailScanner.conf 是最主要的设定档,我们先来看看几个比较常用的项目:
# 设定您的组织缩写。这个项目会被 MailScanner 用在信件的标头中。必须注意的是这个设 # 下列几个项目都是用来检查一些信件中的 HTML 格式,并将比较可能有危险的格式移除。如果 |
filename.rules.conf 可以用来设定邮件附件中不允许哪些扩展名。在
filename.rules.conf 中已经有一些预设的扩展名,如果您想要允许某些扩展名,可以修改该档案。例如,我们如果想要允许 .exe 档,则可以在下列这一行前加上「#」:
#deny \.exe$ Windows/DOS Executable |
spam.whitelist.rules 及
spam.blacklist.rules 可以用来设定黑白名单。如果您有信件被误判为垃圾信,可以在白名单中加入让寄件来源,如此一来,该信件就不会再被当作垃圾信了。反之,如果有垃圾信没有被 判断为垃圾信,则可以自行在黑名单中加入。这二个档案的格式一样,以 spam.whitelist.rules 为例:
From: *@*.friends.net yes |
它有三个字段,第一个字段是指定要检查的是来源或目的地,第二个是设定来源,第三个字段为 yes 表示是白名单。以上述内容为例,是设定所有从 friends.net 所寄来的信件都不是垃圾信。另外,我们也可以直接使用 IP 或网域。
17.2.4 MailScanner 进阶管理
在 MailScanner 上线后,我们必须先将设定放松一点,例如在判断是垃圾信时,不要退件或删除,还是先寄给使用者。如果使用者发现不该是垃圾信的邮件被误判,则可以将该信件 加入白名单中。经过一段时间的测试都没问题了,再设定将高分数的垃圾信删除、并退回低分数的垃圾信。
当有误判时,我们必须要检查邮件源始档,知道误判原因后,才能将该寄信者加入白名单中。我们来看一下一封垃圾信的标头:
图 17-6
我们可以看到这封信的分数是 7 (有 7 个 s),表示这是垃圾信。如果您觉得判断是否为垃圾信的分数太低,很多不是垃圾信也会被当成垃圾信,则可以将
MailScanner.conf 中的「Required SpamAssassin Score」调低。笔者使用的是 5。
当一封信被判断是垃圾信时,如果您选择将它隔离,则隔离的信件会放在
/var/spool/MailScanner/quarantine 中。当邮件附件中包含不合法的档名时,收信者会收到下列信件:
图 17-7
如果您打附件,则会有下列内容:
This is a message from the MailScanner E-Mail Virus Protection Service |
如果有使用者要求要取回该档案,您可以看一下上列附件的内容,并依它所说明的地址 (以上列为例是
/var/spool/MailScanner/quarantine/20051001/j91Db6xx015931 这个目录) 取回档案。
17.3 Open WebMail
Open WebMail 是一套由国人开发的多国语 Web Base 的邮件软件。它不仅可以让我们从网页上收发信件,还包含了一些强大的功能。例如,拼字检查、行事历、网络硬盘等等。安装它之后,使用者可以从任何计算机经由浏览器收发信件,真的很方便。
17.3.1 系统需求
在安装 Open WebMail 前,你必须先安装具有 CGI 功能的 Apache 服务器,如果你是照本书的说明安装,那么你的服务器就具有这项功能了,只要你有编辑
httpd.conf 将 CGI 的功能启动。除此之外,在开始安装 Open Webmail 之前,我们必须先安装下列套件。
Open WebMail 使用具有 SUID 功能的 suidperl,但由于 suidperl 有危险性,所以 FreeBSD 将 suidperl 的功能关闭了。因此,在安装之前,我们必须先安装具 SUID 功能的 Perl。请注意,由于 Perl 有很多相关的模块,如果您之前有更新过 port tree,则现在要安装的 Perl 版本可能和原本系统中的版本不同,将会造成很多程序无法运作。所以,如果您之前有做过 port 的更新,您应该要使用 portupgrade 来安装 Perl。
我们使用 portupgarde 来安装 Perl,如果您还没有安装 portupgrade,请使用下列指令安装:
# cd /usr/ports/sysutils/portupgrade
# make install clean
关于 portupgrade 的说明,请先参考「软件安装」一章。接下来,我们就可以使用 portupgrade 来更新 Perl 了。请先使用 perl -v 来查看您目前所使用的 Port 版本,FreeBSD 6.0 预设是使用 Perl 5.8.x,所以我们使用下列指令更新:
# portupgrade -rf "perl-5.8.*" -m "ENABLE_SUIDPERL=yes"
# ln -s /usr/local/bin/suidperl /usr/bin/suidperl
接下来,我们就可以来安装一些 Open WebMail 所需的软件了,如果在安装过程中,您发现这些软件已经安装过了,则可以跳过该软件。首先,为了要有检查附加档案的功能,必须安装 MIME-Base64,我们可以使用下列指令安装:
# cd /usr/ports/converters/p5-MIME-Base64
# make install clean
为了具有拼字检查功能,必须安装 ispell,请以 ports 安装:
# cd /usr/ports/textproc/ispell
# make install clean
为了要支持 MD5 加密,我们必须安装 perl 的 MD5 模块:
# cd /usr/ports/security/p5-MD5
# make install clean
为了要让 Open Webmail 可以有语言转换的能力,我们必须安装Text-Iconvv:
# cd /usr/ports/converters/p5-Text-Iconv
# make install clean
另外,还要先安装 libnet 这个网络模块:
# cd /usr/ports/net/p5-Net
# make install clean
您的 Apache 必须支持 CGI,请编辑
httpd.conf,找到关于你网页根目录设定的地方,并在 Options 选项中加入 ExecCGI,并设定好 cgi-bin 的所在目录:
|
接着请重新启动 Apache 就做好事前的准备了。
17.3.2 安装 Open WebMail
您可以到下列网址取得最新版的 Open Web Mail。
http://turtle.ee.ncku.edu.tw/openwebmail/download/
假设您网页根目录在
/home/www 中,而在 apache 中所设定的 cgi-bin 目录是在
/home/www/cgi-bin 中。请将取得的档案放到你的网页根目录去,并 cd 到你的网页根目录。执行下列指令以将取得的档案解压缩:
# tar -zxvBpf openwebmail-2.51.tar.gz
解压缩后会在
cgi-bin 中产生一个目录为
openwebmail,存放 Open WebMail 的主要程序;另外会产生一个
data 的目录,在
data 目录下也有一个
openwebmail 的目录,该目录存放 openwebmail 非 cgi 的数据(如图片、声音等)。我将
/home/www/data/openwebmail 的目录搬到
/home/www/openwebmail。并将
cgi-bin 目录下的
openwebmail 搬移到
/home/www/cgi-bin 目录中。现在 openwebmail 的 cgi 程序位于
/home/www/cgi-bin/openwebmail 中,非 cgi 档案位于
/home/www/openwebmail 中,我们要记住的就是这二个目录的位置以方便下列的设定。
最后要修改
/home/www/cgi-bin/openwebmail/etc/openwebmail.conf,更改你的参数设定,尤其是路径。基本上要修改的地方有:
# ow_cgidir : openwebmail cgi 程序的目录 |
我们接着要初始化 Open Webmail,请执行下列指令:
# /home/www/cgi-bin/openwebmail/openwebmail-tool.pl --init
您会被要求是否要送出系统信息到 Open Webmail 的总部,如果您不想送出任何数据,只需按 N 即可。最后我们就可以使用 http://yourhost/cgi-bin/openwebmail/openwebmail.pl 来连到登入的首页,请使用系统中的使用者账号 (root 不能登入) 及密码登入,登入后画面如下图所示。
图 17-8
Open WebMail 是台湾人写的软件,它的使用手册非常丰富,您可以点选登入首页的「说明」部份来查看使用手册。