邮件系统的选型与架构

本文通过剖析邮件系统组成、各部分选型、系统架构分析及系统安全设置,比较完整地覆盖了一个邮件系统设计的全部过程,是企业选择或开发邮件系统的参考。全文分为两部分,上篇包括邮件系统的选型和安全分析,下篇则是邮件系统的具体设置和测试方法。

    电子邮件英文名称为E-mail,诞生于上世纪70年代初。它随着互联网应用的发展逐步成熟,演变成为一个除文字信息外,还可以传送声音、图片、图像、文档等多媒体信息的复杂而丰富的系统。时至今日,电子邮件已成为人们喜爱的通信方式,并逐渐成为企、事业单位加强信息交流和客户关系管理的重要手段。

    电子邮件更为我国的网民们带来了前所未有的便利。在我国,电子邮件的应用迅速发展,免费邮箱注册的人数大幅飙升。同时,早期邮件系统所暴露的缺陷日益突出。

    随着用户数目的增加,系统性能急剧下降,系统不能方便地扩充,百万级的容量无法实现;在复杂的环境中,邮件队列不够健壮,导致系统不稳定,甚至丢失邮件;系统没有足够强的反垃圾邮件能力,导致垃圾邮件横行;系统结构不能适应当今的需求,安全性不高导致商业机密泄露;系统缺乏本地化,界面不友好,安装使用不方便,处理多字节(如中文)时经常出现问题,各种编码之间的转换比较困难等,都是邮件系统存在的问题。

    打造一个适合的内外信息交换平台,便于实现自主管理、员工和客户间便捷的沟通、交流与协作。因此,如何选择一个好的邮件系统,如何建立一个功能强大、性能稳定的邮件系统值得企业关注。特别是前期的分析、选型工作,更是其中非常重要和必要的步骤。

    邮件系统组成部分的分析与选型

    首先,一个完整的邮件系统除了底层操作系统以外,还包括邮件传输代理(Mail Transfer Agent,MTA)、邮件分发代理(Mail Delivery Agent,MDA)和邮件用户代理(Mail User Agent,MUA)三个功能部分(如图1)。


    图1 邮件系统功能结构图



    其次,在分析和架构过程中要紧密把握邮件系统中最重要的三个特性,体系结构、安全性和处理性能。只有牢牢把握上述几个特点,将其作为系统选型的参考准则,才能成功建立一个令人满意的邮件系统。

    邮件系统的投递和分发是一个比较复杂的过程,下面就从邮件系统的几个功能模块入手,剖析整个邮件系统的构架。

    1.操作系统

    操作系统作为整个邮件系统服务器的底层支持,安全性至关重要。在这一方面,Unix类操作系统先天就足够安全、足够健壮。至于具体应用中是选择Unix、BSD或Linux操作系统,可以根据具体情况来选择合适的系统。

    2.邮件传输代理MTA

    MTA是负责处理所有接收和发送邮件的程序。对于每一个外发的邮件,MTA决定接收方的目的地。如果目的地是本地主机,那么MTA将把邮件直接发送到本地邮箱,或者交给本地的MDA进行投递。如果目的地是远程主机,则MTA必须先和远程主机通信,得到远程主机的许可后建立通信链路,使用简单邮件传输协议(Simple Mail Transfer Protocol,SMTP)传递邮件。

    从上面的描述看,MTA好像并不是一个复杂的程序,其实不然。一个好的MTA程序必须具备上文提到的三个特征。Unix环境下可供选择的MTA程序很多,通过互联网的检验并被广泛使用的有Sendmail、Qmail和Postfix三种。下面分别分析这三种MTA程序。

    (1)Sendmail

    Sendmail MTA是使用最广泛的MTA程序之一。它是Eric Allman于1979年在伯克利大学时所写,它的成长一直伴随着Unix的发展,是目前最古老的MTA程序。Sendmail的流行来源于其通用性,它的很多标准特性现在已经成为邮件系统的标配,例如虚拟域、转发、用户别名、邮件列表及伪装等。

    然而,Sendmail也存在一些明显的不足。由于当初互联网刚刚起步,黑客也相对稀罕,因而,Sendmail的设计对安全性考虑很少,在大多数系统中都是以root权限运行,而且程序设计本身Bug较多,很容易被黑客利用,对系统安全造成严重影响。

    此外,由于早期用户数量和邮件数量都相对要小,Sendmail的系统结构并不适合较大的负载,需要进行复杂的调整。另外,Sendmail的配置保存在单一文件中,并且使用了自定义的宏和正则表达式,使得文件冗长晦涩、不易理解,被认为是对系统管理员的一大挑战。

    由于这些缺陷,Sendmail一直被后门问题和安全漏洞所困扰。很明显,老的Sendmail已经不能适应新的应用环境。在经过多次程序修补后,Eric Allman决定重新改写Sendmail。新版本的Sendmail不仅去除了绝大部分的漏洞,还增加了很多新功能,如垃圾邮件控制等。

    为简化Sendmail配置文件的创建,Sendmail使用了m4宏预处理器,通过使用宏代换简化配置。为了保证Sendmail的安全,Eric Allman在配置文件权限、执行角色权限和受信应用控制等方面做了大量的工作。

    但遗憾的是,由于Sendmail先天设计存在的问题,改版后的MTA仍有机会被侵入,仍然存在安全问题;加上它被设计成每隔一段时间才去查看一次邮件队列,因此收发邮件的性能较低。

    (2)Qmail

    Qmail是另一个Unix系统下的MTA程序,它被专门设计用来替换现有的、安全性和性能都不太令人满意的Sendmail。它的主要特点是安全、可靠和高效。Qmail设置简单、速度很快,经过互联网的长久检验,至今尚未发现任何安全漏洞,被公认为是安全的MTA程序,推荐使用。Qmail具有以下安全和可靠特性:

    ◆ Qmail采用标准的Unix模块化设计方法重建整个系统构架。它由若干个模块化的小程序组成,并由若干个独立账户执行,每项功能都由一个独立的程序运行,每个独立程序由一个独立账户运行,而且不需要任何Shell支持。

    ◆ Qmail完全没有使用特权用户账号,只使用多个普通低级用户账号(无Shell)将邮件处理过程分为多个进程分别执行,避免了直接以root用户身份运行后台程序,同时还禁止对特权用户(包括root、deamon等)直接发信。Qmail可以使用虚拟邮件用户收发信件,避免了系统用户的越权隐患。 Qmail系统中只有必要的程序才是setuid程序,以减少安全隐患。迄今为止,拥有setuid的程序未发现任何代码漏洞。

    ◆ Qmail的SMTP会话实时过滤技术(RBL实时处理机制)和SASL认证机制,在与SMTP客户机或服务器交互时,实时地检测发信主机IP及过滤邮件内容,查杀病毒。一旦发现有问题马上拒收,将病毒或垃圾邮件直接丢弃在进行队列之前,极大地保护了用户的邮箱安全,降低了垃圾邮件的数量,同时有效地缩短了邮件服务器的响应时间,更大程度提高性能和安全防御能力。

    ◆ Qmail使用先进、快速的信息队列及子目录循环来存储邮件消息。并且,它使用了比Mailbox更安全可靠的Maildir目录结构,以及经典的管道投递机制(快速的“|”管道处理),使Qmail具有极强的抗邮件风暴、抗DDoS攻击的能力,即使遭遇攻击也仅仅是降低邮件处理速度,而不会瘫痪甚至崩溃。即使在突然断电的状态下,仍能保存用户的信息不丢失,并能保证系统稳定运行。

    ◆ Qmail使用详细的信息递送日志,提供更多信息供管理员分析。它可以对同一个客户单位时间内连续发送的邮件数目或并发连接数目进行统计,一旦超出阀限,则应用防火墙规则拒绝为该客户提供服务或暂停正常响应,极大地降低了被DDoS攻击或由于客户大量发送垃圾邮件导致系统变慢或停止服务的可能性,有效杜绝了成为垃圾邮件攻击者或垃圾邮件被攻击对象。利用邮件服务器上已经存在的日志文件进行分析,可以自动智能化地将这些IP添加在“短时间内发送大量垃圾包的主机IP”中,从IP链路上杜绝传输。

    ◆ 模块化的设计使Qmail可以方便地与各种杀毒软件、过滤系统、识别系统、反垃圾邮件模块等紧密结合,协同工作,进行高级邮件过滤,包括过滤邮件信头、邮件内容、判断垃圾等级,以及配合系统级和用户级的黑、白名单过滤等,具有较高的灵活性和可升级性。

    ◆ Qmail配置简单。它使用了多个小的配置文件,每种特性都有一个对应的配置文件。这种设置方式不仅避免了配置文件过大的问题,而且不需要管理员过多地配置工作就可以保证一个安全的邮件服务器环境。其缺点是不熟练的管理员需要花些时间去熟悉配置文件与特性的对应关系。

    ◆ Qmail本身支持虚拟邮件域,也可以通过vpopmail使虚拟域更易于使用和维护。同时,由于vpopmail支持Oracle、Sybase、MySQL及LDAP方式的用户信息存储,使得建立和维护大型分布式系统成为可能。

    Qmail并不是遵循GPL版权发布,但是仍然与其它开源软件一样可以被自由下载、修改和使用。注意,为了保证Qmail的纯洁性,如果要公开发布自行修改的Qmail,必须经过作者同意。

    (3)Postfix

    Postfix是近来出现的另一个优秀的MTA软件。由于它的设计吸取了前辈们的优点,如Sendmail的丰富功能特点、Qmail的快速队列机制、 Maildir的存储结构和独立的模块设计等。从这些先进的体系设计结构上不难看出Postfix的优势,但是它的起步时间较短,随着其在互联网的广泛应用和检验正在不断成熟。

    Postfix的主要特点是快速、安全、易于管理,同时尽量保持与Sendmail良好的兼容性。Postfix同样采用模块化的设计,只需要一个真实用户来运行所有的模块。Postfix在系统安全方面考虑得很多,它的所有模块都以较低的权限运行,彼此分离,不需要setuid程序,甚至可以运行在安全程度很高的chroot环境中。

    即使被入侵破坏了某一个Postfix模块,也不能完全控制邮件服务器。Postfix最大的优点是配置上的简便性,它既不使用一个庞大复杂的配置文件,也不使用多个小的配置文件。

    Postfix的配置主要使用main.cf和master.cf两个文本文件,使用中心化的配置文件和容易理解的配置指令。Postfix和 Sendmail的兼容性非常好,甚至可以直接使用Sendmail的配置文件,这为想从Sendmail转换到Postfix的用户提供了便利。

    需要注意的是,Postfix是IBM资助下的开源软件,它遵循IBM的开放源代码许可证,用户可以自由地分发该软件进行二次开发。它惟一的限制是必须将修改反馈给IBM公司。IBM的版权声明中表示,它可以随时取消用户使用和发布Postfix的权力,对于想要实现商业应用的企业则需要密切关注相应的信息。

    3.邮件分发代理MDA

    Unix下常用的MDA软件包括binmail、Procmail和Maildrop。它们除了具有本地投递的功能外,还增加了邮件过滤、黑白名单、自动分类和处理等功能,能够根据用户要求对邮件头和邮件体的内容进行过滤,防止通过电子邮件传播病毒,或者帮助用户阻挡广告和宣传品类的垃圾邮件,防止通过邮件对系统的恶意攻击,并帮助管理用户接收到的邮件。

    binmail的系统命令为/bin/mail,该MDA程序简单,不需要进行配置,因而不能完全满足用户的需要。相对而言,Procmail使用了类似于“处方”的用户配置文件,通过定制正则表达式实现邮件的分发。

    它的缺点是不支持Maildir邮箱格式,且编程语法太复杂,不易被人掌握和使用。与Procmail相比,Maildrop更新一些,除了支持传统邮箱格式,还支持Qmail的Maildir邮件存储格式,并且它的编程语言简单易懂,容易上手。因此,推荐使用Maildrop来实现邮件的分发功能。

    4.邮件用户代理MUA

    邮件用户代理MUA有基于客户端的,也有基于Web方式的。无论是Windows下的Outlook、Foxmail,还是Linux下基于终端命令行的mail工具、图形文本终端pine、图形界面下的Kmail和Eudora等,都是优秀的MUA软件。

    随着互联网的普及,越来越多的人喜欢使用基于浏览器的MUA程序,可以随时随地跨平台收发邮件,典型的代表有SqWebMail、OpenWebMail和iGENUS等。这些软件除了都支持流行的POP3和IMAP协议,还具有功能丰富、安全稳定和简单易用的特点。

    综上所述,这里大致列出一个通用邮件系统的框架:

    OS选用Linux Red Hat AS 3.0,这是目前安全级别最高、最稳定的操作系统版本之一。

    MTA选用Qmail,这是全球使用率很高、安全性领先、性能高效的MTA程序。

    MDA选用Maildrop,它功能丰富、语法简练。

    MUA选用基于客户端的Outlook或基于浏览器的iGENUS,它基于LAMP组合,支持中文、功能丰富。后面的内容将对这一组合的具体架构进行分析和实践。

    邮件系统的服务质量

    邮件系统的服务质量主要是指系统防止垃圾邮件及病毒邮件的能力。随着电子邮件的日益普及,黑客利用电子邮件的特点和漏洞编写程序对邮件服务器和接收邮件的用户个人主机进行攻击越来越多,在不知不觉中系统就被安装了特洛伊木马等黑客工具,被偷窃了重要数据,甚至被完全破坏。

    垃圾邮件是指那些非请自来的电子邮件,如商业广告、站点宣传,甚至是一些有非法和不健康内容的邮件。

    目前,互联网上的垃圾邮件日益泛滥,危害极大。因此,过滤功能是邮件系统中非常重要的一项特征,它可以提升邮件系统的性能,有效地控制垃圾邮件的泛滥和邮件病毒的传播。


    图2 电子邮件的接收流程图



    如何才能有效地防止垃圾邮件?从电子邮件的接收过程来看(如图2),电子邮件的过滤分为几个不同的层次,包括在路由器上过滤、MTA过滤、MDA过滤和MUA过滤(如图3)。


    图3 电子邮件过滤层次示意图



    MTA级的过滤适合基于SMTP信封信息的过滤,而不适合对信件的内容进行过滤,尤其是在高负荷的邮件服务器上,如果对每一封信的内容都进行分析、过滤,则可能会严重影响MTA的性能。MDA是对邮件内容进行过滤的最佳位置。MDA有两方面的作用,一个是对邮件内容特别是对邮件中的附件进行过滤,另一个是帮助用户对邮件进行分类管理。

    在互联网上,已有多种不同的技术用来阻拦垃圾邮件(如图4),最常用的包括以下三种:


    图4 在不同层面过滤垃圾邮件



    1.拒收来自已知垃圾邮件主机的信息

    拒收接收已知垃圾邮件主机发来的邮件,可以通过设置MTA程序中的配置文件来实现。为使MTA程序知道拒收来自哪些主机的邮件,必须要列出已知的垃圾邮件主机。通常可用以下两种方法来实现这一目标。

    (1)创建自己的垃圾邮件主机列表供邮件服务器查询

    Qmail在badmailfrom文件中设置要拒收的垃圾邮件主机。可以从追踪垃圾邮件站点的互联网服务器上获取已知的垃圾邮件主机地址,如spamcop站点(www.spamcop.net)上提供了4个关于垃圾邮件主机地址的列表:

    ◆ 产生垃圾邮件的主机网络地址或IP;

    ◆ 转发垃圾邮件的主机网络地址或IP;

    ◆ 垃圾邮件中发现的网站网络地址或IP;

    ◆ 垃圾邮件涉及的邮件地址或IP。

    这些地址是由接收到垃圾邮件的人提交的,可以手动从spamcop提取这些主机信息,把它们加入到本地垃圾邮件主机列表中,即Qmail的badmailfrom文件中。这种方式直截了当、查杀效率高,缺点是垃圾邮件的误报率、误杀率过高,需谨慎使用。

    (2)连接到互联网上提供已知垃圾邮件主机列表的服务器上

    目前国际上比较流行的反垃圾邮件技术是,针对每一个进入的邮件信息,MTA程序获得远程服务器的地址,并查询远程互联网服务器对该地址进行认证。如果该地址在已知垃圾邮件主机列表中,则MTA程序拒绝接收这些进入的邮件信息。

    无论是邮件滥用保护系统(Mail Abuse Prevention System,MAPS)的中转垃圾邮件阻塞器(Relay Spam Stopper,RSS),还是使用第三方实时黑名单主机列表(Realtime Blackhole List,RBL),如果邮件地址在这些列表中被找到,则邮件服务器认为这是一个垃圾邮件主机,将拒绝接收它的邮件(如图5)。


    图5 利用RBL过滤垃圾邮件的典型过程



    国内的邮件服务器防范意识普遍偏低,容易被不法分子利用做垃圾邮件的中转站。因此,如果企业的邮件客户大都在中国,建议采用中国反垃圾邮件联盟提供的RBL+黑名单列表和中国邮件服务运营商白名单列表CML(如图6)。

    在Qmail中,可以使用rblsmtpd程序利用MAPS RSS服务器对进入的连接进行检查。通过修改SMTP启动脚本,加上

    /usr/local/bin/rblsmtpd:

    /usr/local/bin/tcpserver -H -R -l 0 -t 1 -v -p -x \

    /home/vpopmail/etc/tcp.smtp.cdb -u qmaild -g nofiles 0 smtp \

    /usr/local/bin/rblsmtpd \


    图6 黑、白名单列表



    /var/qmail/bin/qmail-smtpd your.host.name \

    /home/vpopmail/bin/vchkpw /bin/true 2>&1 | \

    /var/qmail/bin/splogger smtpd 3 &

    如果想使用第三方的RBL列表,只要加上-r选项就可以。该选项可以指定多个RBL源,比如:

    -r blackholes.mail-abuse.org

    -r cbl.anti-spam.org.cn

    这样,如果连接主机出现在RBL列表中,系统将拒绝连接。

    2.对远程主机提供的SMTP会话信息进行确认

    另一个阻挡垃圾邮件的有效方法是在SMTP会话期间对远程主机所使用的SMTP信息进行验证。很多MTA程序允许配置对进入的SMTP信息进行严格的检查。两个经常被检查的SMTP命令是HELO(对于ESMTP为EHLO)和MAIL FROM。

    HELO命令用来找出远程服务器的真实身份。通过执行DNS主机名查找时,对由HELO命令所提供的无效信息进行过滤。

    MAIL FROM命令用于确定邮件发送者。正常的MAIL FROM命令包括接收邮件地址的正式域名(Fully Qualified Domain Name,FQDN)格式,不符合要求的将拒绝接收。

    如果使用Qmail的SMTP信息检查,必须使用一些Qmail的补丁程序,包括qmail-badhelo_diff.patch、 qmail-badmailfrom-wildcard.patch、qmail-badrcptto_diff.patch、 qmail-reject_percent_diff.patch、qmail-limit-bounce-size.patch和 qmail-smtpd-auth-0.31.patch。

    3.通过查找已知的垃圾邮件记号过滤进入的信息

    通过以上的一些措施,有相当一部分的垃圾邮件会被阻止连接。但只是从发送邮件服务器的特征,如主机地址、IP和连接数量等来杜绝垃圾源还远远不够,还需要仔细检查邮件本身是否包含有垃圾内容。所以,需要在应用层上做内容过滤。

    (1)使用qmail-qfilter过滤带有特定词语的邮件

    qmail-qfilter是一个允许在Qmail队列程序前加入基于Perl的过滤器脚本。此脚本可以定义多条过滤规则,针对邮件中的任何数据进行扫描和过滤,不论数据信息是在邮件头还是邮件体中。例如:

    #!/usr/bin/perl

    while(<>){

    print;

    exit 31 if /^Subject: Make more money/;

    exit 31 if /^From: 123\@spamco.com/

    }

    这种方式的优点是简单,缺点是不够智能,且对中文过滤不起作用。由于它是置于qmail-queue程序前执行,因此它的效率直接对邮件系统产生影响,加上过滤效果并不显着,因此不建议使用。

    (2)使用SpamAssassin软件分析邮件是否为垃圾邮件

    SpamAssassin是一个非常优秀的、基于贝叶斯算法、功能强大的反垃圾邮件开源软件。

    SpamAssassin的判断是一种给邮件进行评分的系统。根据邮件的各种特征可以给出符合条件的正或负的评分,加在一起就是总的评分,这个分值越高就越有可能是垃圾邮件。

    通常可以设置一个区别的分值,比如默认是5分,等于或高于此分值的邮件会被判断为垃圾邮件,从而让邮件系统选择进行何种处理。SpamAssassin也可以在调用Razor及DCC等数据库的基础上,再采用人工加权或scored的方法进行垃圾邮件识别。在本例邮件系统中使用了以下技术减少垃圾邮件的侵入。

    ◆ 下载并安装DCC和Razor的Perl源码包,使用DCC和Razor的特征数据库,为SpamAssassin的评分提供更准确的信息。

    ◆ 下载互联网上由中国反垃圾邮件联盟提供的垃圾邮件信息,分别放在SpamAssassin的特征库中。如chese_diy.cf文件内容为:

    body ch_free1 /免费的/

    body ch_free2 /激情的/

    ……

    score ch_free1 0.5

    score ch_free2 1.5

    score ch_free3 1.5

    score ch_free4 3.0

    ……

    如果邮件内容包括以上这些词语,SpamAssassin评出的分值就会高出区别分值,邮件系统就会认为这是一封内容超标的垃圾邮件而拒绝接收。这种方法的优点是可以根据实际情况灵活调整对应的分值,使之更符合要求,有效降低误报、误杀率;缺点是查杀效率较低,影响邮件系统的性能。建议在硬件配置比较高的机器上采用。

    其它的方法还包括使用Maildrop过滤及分类投递邮件等。

    最后,简单地说一下防止病毒。如果想使用免费的防毒软件可以考虑基于个人版的Linux杀毒软件,如BitDefender公司的BitDefender- Qmail工具,再配合Qmail-Scanner(原名scan4virus)。这是一个专门为Qmail开发的邮件扫描脚本程序,用Perl编写,可以支持多个Unix下的专业查毒软件,安装和使用比较简单。需要注意的是,它需要最新的Perl 5.8版本支持,因此使用此程序需要升级系统的Perl版本。

    如果是构建商用邮件系统,建议购买商业版杀毒软件。这样,无论是在查杀病毒的效率上,还是病毒特征库的更新速度上都会更有保证。

    邮件系统的安全服务保障

    对于那些暴露在互联网上的邮件服务器来说,受到外界黑客的探查和攻击是常有的事情。因此,需要通过必要的手段加强邮件环境。

    1.禁用SMTP协议中的VRFY和EXPN命令

    VRFY命令(verify)用来向远程邮件服务器查询邮件地址。如果邮件服务器配置为响应VRFY命令,它将根据查询地址的状况返回一个SMTP代码。常用的VRFY返回码为:

    250 表示地址存在,服务器将接收发给它的邮件;

    252 表示地址可能存在,服务器将接收发给它的邮件,并试图将其发送到目的地;

    550 表示地址不存在,服务器拒收任何发给它的邮件。

    通过发送大量查询邮件地址的VRFY命令,一个远程的攻击者可以根据邮件服务器返回的SMTP返回码猜测系统中的邮件账号,这是一个有潜在危险的举动。

    EXPN命令(expend)允许远程主机请求别名列表和邮件列表地址。有了该列表地址,远程邮件服务器可以向别名或邮件列表发送邮件来确定真实的邮件地址。垃圾邮件发送者和黑客也可以利用这条命令来探查邮件服务器。

    大多数的MTA软件都禁用VRFY和EXPN命令。事实上,这两个命令在MTA软件缺省安装时都是被禁用的。缺省安装的Qmail不管真实的地址状态如何,对所有收到的VRFY查询都返回252号SMTP返回码;EXPN命令返回502返回码,表明该命令在服务器禁用。这两条命令状态在Qmail服务器中是不能修改的。

    2.在SMTP中使用SASL认证机制

    最常用的网络连接认证方法是简单认证和安全层(Simple Authentication and Security Layer,SASL)协议。该协议定义了一套任何网络应用程序都可以用来对远程用户进行认证的机制。

    每个认证会话都必须使用一种确定的认证机制。认证机制是用来向服务器发送认证凭证时使用的协议。SASL框架中可以使用多种不同的机制来认证用户。RFC2222定义了下面几种确定的机制:

    (1)KERBEROS_V4机制

    主机发送随机生成的32字节数字作为应答,客户端使用Kerberos标签和用户名的标志进行响应。

    (2)GSSAPI机制

    客户端发送使用通用安全服务应用接口(Generic Security Service Application Interface,GSSAPI)加密的用户名和口令。

    (3)SKEY机制

    客户端发送基于64位密钥加密的用户名和一次性口令。

    (4)CRAM-MD5和DIGEST-MD5机制

    使用呼叫/应答模式的加密方法。

    (5)PLAIN机制

    允许客户机向服务器发送ASCⅡ码文本形式的用户ID和口令。

    (6)LOGIN机制

    它是最常用的机制,使用基于64位的密钥加密用户ID和口令。微软的Outlook和网景公司的Netscape邮件客户端使用的就是基于LOGIN的认证机制。

    Qmail版本(qmail-1.03)尚不支持SASL。为了使Qmail支持SASL,需要给Qmail程序打上补丁qmail-smtpd-auth来实现。

    使用带有验证的SMTP,该进程要调用密码验证程序,可以使用cmd5checkpw命令来帮助进行密码验证。首先下载安装cmd5checkpw软件包,然后修改SMTP服务的启动脚本(注意加粗部分):

    #!/bin/sh

    # -c 100指同时并行连接数为100

    QMAILDUID=Qmaild

    NOFILESGID=nofiles

    SERVER=`hostname`

    /usr/local/bin/tcpserver -H -R -c 100 -l 0 -t 1 -v -p -x /home/vpopmail/etc/tcp.smtp.cdb \

    -u $QMAILDUID -g $NOFILESGID 0 smtp /var/qmail/bin/qmail-smtpd $SERVER \

    /home/vpopmail/bin/vchkpw /bin/true /bin/cmd5checkpw /bin/true 2>&1 \

    /var/qmail/bin/splogger smtpd 3 &

    3.创建邮件防火墙

    邮件防火墙是一台专用的邮件服务器,专门转发发往内部邮件服务器和从其发出的邮件。经过配置,邮件防火墙将接收任何发往域中的邮件,将它们直接发给内部网络中真正的域邮件服务器。同时,邮件防火墙也转发从内部邮件服务器发往互联网的邮件。

    邮件防火墙的配置是一个高级应用,Qmail邮件防火墙是使用一张虚拟表来映射地址。通过三个步骤对它进行配置:

    (1)在virtualdomains控制文件中增加域名映射,接收指定域用户的邮件映射到一个真实的用户账号。如virtualdomains文件内容为virtual.com:mymail,则Qmail将会把所有发往*@virtual.com的邮件转换为 mymail-*@virtual.com,然后在本地发送该邮件。

    (2)将域名加入rcpthosts控制文件中,使用Qmail接收发往该域的邮件,如virtual.com。(3)为每个域用户创建一个独立的本地用户,使用各自独立的。qmail文件。

    具体的邮件收发流程为,virtualdomain控制文件将virtual.com域指向一个普通的本地用户账号mymail,Qmail防火墙服务器收到的邮件将被发给本地账号mymail,比如[email protected]对应mymail-test1,[email protected]对应mymail-test2。然后,在mymail本地账号目录下建立对应的。qmail文件,例如。qmail-test1的内容为 [email protected],。qmail-test2的内容为[email protected],这样就可以收取邮件了。

    至于从内部邮件服务器上发送邮件,必须配置Qmail把所有外发邮件发给邮件防火墙服务器(firewall.virtual.com)。不同的是,Qmail需要使用外部程序来完成配置。serialmail软件包含了一些Qmail可以使用的工具程序,其中之一是maildirsmtp程序。下载、编译并安装此软件,配置内部邮件服务器的virtualdomains控制文件,把所有外发的邮件都交给一个普通用户账号firewall。不指明域名时,Qmail会把所有不是发给本地用户的邮件都发给这个firewall本地用户。命令如下:

    # useradd firewall

    # maildirmake /home/firewall/Maildir

    # echo ./Maildir/ > /home/firewall/.qmail-default

    然后,将maildirsmtp命令写入crontab任务中,定时转发邮件给邮件防火墙:

    */5 * * * * maildirsmtp /home/firewall/Maildir

    firewall- firewall.virtual.com trueserver.com

    4.防止开放式转发

    开放式转发的邮件服务器能够自动将远程客户发来的邮件转向正确的目的邮件服务器(而不是它本身)。但是,现在有很多公司和个人利用这一特点发送大量的 UCE(Unsolicited Commerial E-mail,非请求商业电子邮件)邮件,给客户及邮件服务提供商带来了麻烦。Qmail默认不开放转发功能,在rcpthosts文件中并没有设置任何允许转发的域名,也没有设置RELAYCLIENT参数,从而保证邮件系统默认不转发邮件,防止垃圾邮件的产生。

    对于想要转发邮件的客户,Qmail提供了三种机制保证能够安全地转发邮件而不至于成为垃圾邮件滥发站。

    (1)通过配置Qmail的rcpthosts文件,加入外部邮件服务器的域,即可发送邮件。如在文件中加入“hotmail.com”,就可以自动把所有发送给@hotmail.com的邮件发到外部邮件服务器。

    (2)通过用户身份验证机制向外转发邮件。如图7在Outlook中进行设置,通过此设置,发送到外部的邮件就可以顺利地被发送到外部邮件服务器。


    图7 设置用户身份验证通过机制转发邮件



    (3)用tcp.smtp文件来控制。如允许192.168.0.0/24网段的所有机器可以通过身份验证实现IP relay,即不需要SMTP AUTH,可以利用tcprules命令在。/etc/tcp.smtp中添加一行:

    192.168.0.:allow,RELAYCLIENT=“”,LOCALMF

    CHECK=“server.com”

    或者是针对某个特殊的用户进行设置,如限制只有IP地址为192.168.0.222的机器可以转发邮件:

    192.168.0.222:allow,RELAYCLIENT=“”,LOCALMF

    CHECK=“server.com”


声明:凡注明CIO时代网(www.ciotimes.com)原创之作品(文字、图片、图表),转载请务必注明出处,违者本网将依法追究责任。

猜你喜欢

转载自shellyli.iteye.com/blog/1142828
今日推荐