摘要本文首先指出了著名的开源邮件系统Qmail在安全方面存在的问题,并借用UNIX系统上现有的安全工具对Qmail现存的安全隐患加以解决,接着介绍了一种比Base64编码效率更高的Base91编码技术对邮件编码进行改进。最后利用实验室的平台基本实现了该高速、简洁、安全的邮件系统。
引言邮件服务是Internet中使用率仅次于WWW的服务,一个邮件服务器主要包括三个主要的功能:邮件传输代理MTA(Mail Transport Agent),邮件分发代理MDA(Mail Delevery Agent),邮件用户代理MUA(Mail User Agent)。前两者是核心模块,负责邮件收发和处理。
Qmail是全球安装使用量仅次于Linux/Unix上缺省安装的的Sendmail的邮件服务器软件,到目前为止Qmail的MTA依然是世界上转发速度最快的邮件传输代理[1],Qmail几乎兼容所有的Linux/Unix类操作系统。由于在Linux/Unix类型的操作系统中,Sendmail被缺省安装,所以其使用量在该领域位居首位,但是其配置烦琐,而且仅仅支持单文件(/var/spool/mail/$USER)方式存储用户所有邮件,导致邮件收发仅能串行处理,效率低下,而且一旦存取该文件出错,用户的全部邮件将丢失。而Qmail支持以目录的形式管理用户的邮件[3]($HOME/Maildir),在数据安全和存取速度上比前者都有明显的优势。Qmail的整体模块如图1[2]所示,主要由MTA、MDA、MUA三大部分组成。
图1 Qmail系统框架图由于体系结构比X.400 MHS(Message Handling System)体系简单,而且是基于TCP/IP协议,SMTP(Simple Mail Transfer Protocol)已成为事实上的邮件协议标准,由于该协议设计过于简单,其报文在网络上用明文方式传输,给网络监听者带来了极大的方便,Qmail系统的MTA协议用的就是SMTP,邮件在传输途中很容易被截获。
目前的Internet上垃圾、反动、病毒邮件泛滥,Qmail在设计时对这三个方面的安全问题考虑不足。
本文针对上述的问题,结合新的编码技术和UNIX系统现有的一些安全工具对其加以研究、改进。
1 问题的提出垃圾邮件、反动邮件和病毒邮件是目前对所有邮件用户最大的威胁。从图1的框架图来看,qmail的MTA和MDA中没有任何对邮件的检测和过滤的措施,无疑对上述安全问题没有任何防护能力。
1.1针对垃圾邮件
Qmail缺省不支持对Smtp用户的认证,这就是说,任何能访问该Qmail服务器的用户均能利用它来向任何地址发送邮件,对于那些想利用邮件列表发布邮件广告的商人,或想借他人主机发送大量攻击性邮件的黑客来说,其可以被轻而易举地被拿来直接达到目的。事实统计90%的垃圾邮件是从那些打开了开放性转发(Open Relay)权限的服务器发出的。
1.2针对反动、色情邮件等非法邮件
反动、色情邮件主要是指邮件的内容中有违反国家法律的反动信息和黄色信息,这些信息通常也是使用邮件列表进行传播,其性质较商业广告垃圾邮件恶劣,对社会产生很大的负面影响。Qmail没有任何基于内容的过滤模块,不能拦截该类邮件。
1.3针对病毒邮件
病毒邮件是指携带了病毒体的邮件报文,该类邮件一般通过附件来携带病毒文件,如果要过滤该类恶意邮件,要求MTA、MDA、MUA三个模块中至少有一个模块拥有病毒查杀模块,Qmail设计中没有考虑到这一点,这也是Qmail系统存在的一大安全问题。
1.3针对报文的明文传输
基于SMTP协议的Qmail直接进行邮件收发对报文仅仅进行了简单的编码,对于邮件体甚至没有进行任何编码,利用网络窃听工具可以轻易获取邮件内容,图2是用著名的网络窃听器ethereal截获的邮件报文,从中我们知道这封邮件收发人的邮件地址、发送使用的MDA、编码方式、邮件体的类型、和信件的所有内容。如果有附件,我们可以根据已知的编码方式对其进行反编码获得最后的原始文件,所以毫无保密性可言。
图2 截获的明文格式的邮件报文1.4针对用户的管理
Qmail设计成和操作系统共用用户,UNIX操作系统的用户数据库是一个文件,缺省为/etc/passwd文件,随之带来的问题就是添加邮件的用户必须同时添加一个系统用户,因为对于服务器来说多一个系统用户就等于系统多一个可以被用来入侵的途径,就等于要多耗费一个用户配置文件的存储空间,这将主要导致安全隐患和系统资源的浪费。
1.5针对访问权限的控制
Inetd是UNIX操作系统用来调用一些基本服务如Ftp、Telnet的特殊守护进程,Smtp和Pop(Post Office Protocol)协议也可以用其来启动,Qmail在没有第三方工具的支持时仅能使用Inetd来调用。随Inetd带来的问题就是不能控制访问邮件服务的IP地址的范围,在已知非法用户或恶意攻击者的IP地址的情况下,不能拒绝对他们提供服务,对服务器安全不利。
2 现有的基于UNIX的安全工具UNIX系统下有很多开放源代码的软件包,他们一般由很多程序员自发组织进行开发。在安全领域,已有很多流行软件包可以解决Qmail存在的大部分安全问题。
2.1密码认证工具
2.1.1 checkpassword
是一个基于/etc/passwd进行认证的工具,第三方的程序可以将其作为和系统用户数据库进行交互的代理,对系统用户进行认证操作。
2.1.2 cmd5checkpw[4]
cmd5checkpw是一个和checkpasswd兼容的支持CRAM-MD5算法进行认证的工具。只要支持checkpasswd进行系统用户认证的程序均可以使用其来支持CRAM-MD5算法对数据进行信息摘要,防止密码被盗取。
2.1.3 vchkpw
vchkpw是Vpopmail工具集中一个认证工具,
2.1.4 qmail-Smtp-auth[5]
qmail-Smtp-auth是Mrs.Brisby开发的让Qmail支持Smtp认证的补丁程序的升级版本,后者仅仅支持基于LOGIN方式的认证,前者加入PLAIN和CRAM-MD5认证机制并且还支持认证方法的后续添加。
2.2传输过程的加密工具
2.2.1 OPENSSL[6]
OPENSSL是由全世界自愿者开发的开放源代码的SSL(Secure Sockets Layer)协议的实现工具集,其支持SSL v2/v3和TLS v1(Transport Layer Security)协议并拥有一个非常强大的密码库。
SSL[7]是一个用将用户数据用非对称加密方法加密后在互联网上进行安全传输的协议,使用该协议能很好地杜绝窃听者用嗅探器抓取信息明文的事件发生。
2.3访问控制工具
2.3.1 Ucspi-tcp[8]
Ucspi-tcp是一个基于UNIX的用来给网络应用程序提供安全TCP连接的程序,主要包括服务模块(tcpserver)和客户模块(tcpclient)两个部分,其中在服务器模块中具有访问控制特性,此特性允许对客户端的访问权限进行限制。
2.4用户管理工具
2.4.1 vpopmail
Vpopmail是UNIX上的一个创建和管理邮件虚拟域(Virtual Domain)的工具包,包括管理虚拟域、管理用户的工具和密码认证模块,它可以使一个邮件服务器提供多种“@domain”给用户选择,并且支持用数据库来存储和认证用户。
2.4.2 Mysql数据库[9]
Mysql是一个全世界使用最多的开源数据库软件,其运行方式是Server-Client方式,目前基于UNIX的大型应用程序均对其支持,包括前面提到的Vpopmail工具包。
3 问题的分析解决3.1问题的分析
Qmail产生安全问题的关键在于其仅仅是一个出色MTA和MDA,其仅仅实现了邮件服务器的基本功能,在于没有考虑到现实网络中的安全问题。利用上面介绍的一些工具,可以把Qmail在安全方面的漏洞一一补全。
3.2 问题的解决
3.2.1针对垃圾邮件的解决方案
qmail-Smtp-auth是针对qmail开放性转发无法关闭的漏洞设计的补丁,使用这个补丁生成的Smtpd守护进程要求邮件发送者不能直接发送邮件,必须在发送时同时提供有效的用户名和密码。不过该补丁无法提供用户身份鉴别功能,所以它必须结合一个密码验证工具作为和用户验证数据库之间的代理。
在前面介绍的密码验证工具中checkpassword结合cmd5checkpw作为验证代理能提供对Linux/Unix的系统用户进行认证,基于这种方式进行认证的系统允许Linux/Unix操作系统内部用户使用Smtp发送和转发邮件;另外一种更好的密码验证方法在安装了vpopmail后可以使用,该方法的用一个可以从Mysql数据库取出用户数据来进行验证的工具vchkpw来实现,该工具比checkpassword好在可以让Qmail的用户数据不局限于用操作系统的系统用户,增强了用户认证的灵活性、安全性和高效性。
3.2.2针对反动、色情邮件等非法邮件
针对这个问题,还很少见现成的基于UNIX的工具可以支持对邮件的内容进行过滤,所以在这里本文仅能提一些设想。
从图1我们可以看到,在框图的上部分Qmail的MTA负责把收到的邮件放入排队队列,之后排队程序按照邮件的目的地址决定邮件发往本地邮箱目录存储还是发往下一个邮件服务器。在这个排队队列的处理程序中,可以加入一些基于文本、图像、声音、视频等内容过滤的程序代码,从而实现对非法邮件的过滤。
3.2.3针对病毒邮件
对付病毒邮件的方法和前面的基于内容的过滤方式基本上相同,不过在排队过程中,邮件必须通过杀毒软件的检测,由于杀毒软件本身涉及庞大的病毒库,一般直接使用由杀毒软件公司提供的模块是比较可行的方案。
3.2.4针对报文的明文传输
前面提到的SSL是专门用来对TCP协议的数据报进行用非对称密码进行加密传输。SMTP是运行在TCP协议之上的应用层协议,自然可以借助SSL来杜绝明文数据传输。在UNIX环境下,借助OPENSSL可以免费地获得这种服务。
3.2.4针对用户的管理
为了节约系统资源、增强安全性和提高效率,应该尽量避免使用系统用户来作为邮件用户,vpopmail工具集提供的丰富的用户管理工具,利用vadduser、udeluser、vpasswd、vadddomain等工具可以轻松地增减邮件用户、修改密码和增减虚拟域,而且支持绝大多数的数据库,包括最著名的开源数据库软件Mysql。
3.2.5针对访问权限的控制
由于Qmail缺省借用Inetd来同外界进行TCP连接,不能对来访的IP地址进行限定,导致安全隐患诸多。所以必须借助目前UNIX中广泛使用的TCP连接工具Ucspi-tcp来建立连接,其中的服务器模块tcpserver可以设定deny、allow等参数来拒绝和允许来访IP地址。
3.3针对性能的一些改进
由于SMTP的传输机制是以7bit的二进制编码的ASCII字符为基础的,虽然SMTP扩展允许发送8bit的二进制数据,但是有一些非Internet网关是不能够正确处理的。因此要确保二进制信息在传输过程中的完整性必须先对其进行编码[10]。目前最常用的编码是quoted-printable和base64编码,前者主要针对非附件部分的文本进行编码,后者主要针对附件进行编码。由于base64是把6比特二进制数据用一个字节的ASCII码来表示,其带宽利用率仅仅为0.75,效率比较低,增加了网络的负担。现在一种名为base91[10]的新编码方法已在1999被西南交通大学的何大可教授提出了,该编码使用了92(包括空格)个可打印字符作为映射集,把输入的消息比特切分为13比特的分组作为映射源,编码的源字节数比较大(大于64K)的时候其编码的带宽利用率接近于81.25%,比base64提高了大约6个百分点,所以在对附件(一般大于64K)的编码方案上base91是Qmail比base64更好的选择。
3.2.4对Webmail的支持
Webmail是web和mail结合的产物,其作用是提供一个基于Web界面的MUA,用户可以登陆邮件服务器的网站来收发自己的信件,Qmail没有Webmail模块,这部分单独进行开发很容易,后台可以选用PHP、JSP、ASP、CGI等流行动态网页编程语言,它们都有相关函数对用户进行认证和对用户邮箱目录进行存取并结合数据库管理邮件用户的所有数据。
4 安全邮件服务器的实现依照前面的分析,在本文的最后对上述的设想在作者本人实验室的服务器上加以了实现,具体框架图如图3所示。
图3 经过改造后的安全邮件系统架构该系统运行的操作系统平台为Freebsd[11], Webmail平台为Apache服务器,数据库选择了Mysql,使用Openssl作为TCP传输加密软件。
从图3我们可以看到,外部服务器和客户端(因为对于本服务器它们都相当于客户角色,后面统称客户)通过Tcpserver来和本服务器连接并进行Smtp传输, 利用Tcpserver的allow、deny等命令参数可以限定客户的IP地址范围。在建立连接后,转向qmail-smtpd-auth模块进行认证,qmail-smtpd-auth借助vchkpw来用加密的方式将客户提供的用户名和密码与Mysql数据库进行对比认证,当认证通过后,客户的邮件报文被放入邮件队列等待处理。在这个阶段,可以加入基于文本、图像、声音或视频的过滤模块对邮件进行过滤,也可以放置病毒查杀模块对带病毒邮件进行处理,合法的邮件将由qmail-send模块根据邮件目的地址判断是转交给邮件外发模块还是存储到本地邮箱目录,在邮件外发模块qmail-remote将Base64编码方法替换成为Base91,提高了编码效率。
邮件用户在发送邮件的时候可以用基于Smtp的客户端工具也可以直接使用Webmail,前者的流程刚才已经介绍过了,后者的认证依靠Webmail同Mysql用户数据库进行交互来判断用户是否合法,合法的邮件由qmail-inject模块交付qmail-queue进入邮件队列,接下来的过程同基于smtp的发送流程一致。
邮件用户再收取邮件的时候可以使用Webmail和基于Pop协议的客户程序,前者在用户通过验证后根据用户名去读取该用户的邮件信息然后用Web页面的方式反馈给用户。后者首先用vchkpw来验证用户,然后通过Pop协议把该用户邮件下载到用户机本地磁盘上保存。
经过安装和运行,基本上验证了该系统的安全性,由于没有庞大的用户群来做重负荷测试,对该系统的运行速度和负荷能力还未能测试,但官方的资料显示Qmail在16MB内存486/66级别的机器上拥有日发7万封邮件的能力[12]。基本的安全问题已经解决,如果在过滤和杀毒方面如果能加以很好实现,这将是一个非常完善的系统。
参考文献[1]D. J. Bernstein. Frequently asked questions of qmail. http://cr.yp.to/qmail/faq.html.
[2]The big qmail picture. http://www.nrg4u.com/qmail/the-big-qmail-picture-103-p1.gif.
[3]D. J. Bernstein. Building a POP toaster. http://cr.yp.to/qmail/toaster.html.
[4]cmd5checkpw http://members.elysium.pl/brush/cmd5checkpw/
[5]qmail-Smtpd-auth http://members.elysium.pl/brush/qmail-Smtpd-auth/
[6]Openssl http://www.openssl.org/
[7]Secure Sockets Layer http://www.webopedia.com/TERM/S/SSL.html
[8]Ucspi-tcp http://cr.yp.to/ucspi-tcp.html
[9] About Mysql AB http://www.Mysql.com/company/index.html
[10]张晓鹏. 基于Base-91的安全电子邮件服务器研究与实现[D].硕士论文. 西南交通大学, U.D.C:621.316.9. 2003.
[11]曾慧鹏. 用FreeBSD构建家庭网络世界.http://cnfug.org/journal/systems/2004/000046.html
[12]D.J.Bernstein . Frequently asked questions
The qmail security guarantee.http://cr.yp.to/qmail.html