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等流行动态网页编程语言,它们都有相关函数对用户进行认证和对用户邮箱目录进行存取并结合数据库管理邮件用户的所有数据。

3.4 安全邮件服务器的实现

依照前面的分析,在本文的最后对上述的设想在作者本人实验室的服务器上加以了实现。

该系统运行的操作系统平台为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]。基本的安全问题已经解决,如果在过滤和杀毒方面如果能加以很好实现,这将是一个非常完善的系统。

通过文章的分析和研究,我们可以清楚的知道如何实现Qmail安全性高,希望对大家有所帮助!

  1. 深入了解 分布式的Qmail邮件系统
  2. 如何在Qmail里配置SMTP
  3. Qmail邮件系统日志和管理
  4. 深入了解 Qmail的工作原理和配置文件
  5. Qmail简单介绍
  6. Linux下的邮件服务器 Qmail
  7. Mysql安装与qmail实际操作概述
  8. linux-qmail 病毒/垃圾邮件处理


相关内容