基于 Qmail 的 Linux 企业邮件系统的实现
前言
您的公司是否还在使用 m$ 的 Exchange 邮件系统 ?
您的邮件系统是否总是处于重负荷而狼狈不堪的状态 ?
您是不是老担忧病毒会通过邮件途径传播至您的内部网络 ?
您的同事经常抱怨邮件收发其慢无比,或者因为邮件无缘无故地收不到而满腹牢骚 ?
或者您还在使用功能陈旧,邮箱大小受限制,不是您自己掌管和可以自由支配的邮件系统 ?
您是不是发觉您的优秀的网络工程师即使努力勤奋工作却依旧不能使邮件系统安全和高效地运转?
本文为您提供一个在 GNU/Linux 平台上建立 Qmail 邮件系统的最基本的实现,
以及介绍由此衍生出来的,以 Qmail 为基础的、全部是开放源代码软件所完美构建的,
稳定、高效、安全的企业邮件系统的一揽子解决方案。
其中,您将领略 Qmail 的功能强大而且同时容易使用的特色;
您还会了解到 Qmail 邮件系统已经拥有了极为庞大的用户数量的这个事实,
以及理解为什么这个邮件系统如此广泛地被大企业使用的原因所在。
最后,按照本文的方法,您将以极小的代价得到一个基于 GUN/Linux 平台的、开放源代码的、扩展性极高、广泛支持各种特征的邮件系统平台,
获得邮件系统高效地、稳定地、安全地运转。
您从此将高枕无忧,轻松、愉快地度过您的每一个假期和节日。
第一节、 企业邮件系统的现状
- 目前使用的最为广泛的的邮件系统还应该是 Sendmail 。
Sendmail 古老、优秀而且传统;
许多 GNU/Linux 发行套件和商业的 UNIX 都默认使用 Sendmail 作为邮件服务器;
您不需要花费多少力气,就可以迅速地使自己的邮件系统运行起来。
这些都使得 Sendmail 在 Internet 上的邮件系统中占据了大半山河。
由于 Sendmail 邮件系统的用户就是系统本身的帐户,一般用于用户数量较小的环境,
而且管理者需要掌握一定的 Linux/UNIX 基础知识。
解释:
- MTA:Mail Transport Agent,邮件传输代理
例如 Sendmail、Qmail、Postfix、Exim 等。
- MDA:Mail Delivery Agent,邮件投递代理
例如: Procmail、Maildrop 等。
- MUA:Mail User Agent,邮件用户代理
例如:Emacs、Mutt、Pine、Mozilla Mail,以及大家广为使用的、极为熟悉的 Microsoft Outlook、Foxmail 等。
实际上, Sendmail 基本上只是一个 MTA 。
但 MTA 是邮件系统的基础,
人们依据习惯,一般还是将以 Sendmail 为 MTA 的邮件系统,统称为 Sendmail 邮件系统。
这个邮件系统还包含 IMAP(UW)、Procmail、Maildrop 等一系列软件。
下面所说的 Qmail 也一样。
- 受条件所困,小型企业的邮件服务器目前一般是 m$ 的 Windows 平台的 Exchange 。
其直观的图形界面、和域控制器的结合、带有群件功能,
在要求不高的一般场合、特别只是内部应用的场合还是可以凑合着使用。
- Lotus Domino/Notes 这个 IBM 的群件软件带有邮件服务器功能,一般运行于 Windows 平台,
广泛使用在许多企业、政府、金融这些较高要求的行业,应用层次深;
但如果纯粹是做邮件服务器,有点大材小用的感觉。其维护起来,需要专业的计算机人员。
|
IBM Lotus Domino/Notes、Microsoft Exchange 和 Novell Groupwise 等群件系统,
除了提供收发电子邮件的基本功能之外,还表现出较强的协同工作能力,
同时也具有良好的安全性能。
这类系统支持协同工作和二次开发,留有开发接口,这在一定程度上降低了邮件系统的安全性能。
开发接口的开放性虽然方便用户开发相关应用,但是也为恶意攻击者攻击系统提供了后门。
由于这类具有协同工作能力的邮件系统能够支持多种非邮件功能,
这也会或多或少地降低了邮件系统的安全功能。
用户在使用这类产品时,需要在安全性能与协同功能之间作出平衡。
|
- Qmail 跟这些相比则是功能齐全、安装复杂。其显著特征在于:
- 邮件用户可以保存在数据库中。
- 良好地支持邮件虚拟域。
- 支持 smtp 验证、邮箱空间大小限制。
- 支持自动转发、自动回复,支持邮件列表。
- 支持众多的防病毒邮件和垃圾邮件的解决方案。
虽然 Qmail 安装复杂,但是安装、配置成功后,用户管理起来却是想象不到的简单:
所有的操作通过浏览器即可。
最重要的一点:跟 Sendmail 一样,都是开放源代码的,
您可以根据自己的特殊需求修改源程序来满足自己的需要。
此外,Qmail 充分吸收了前辈 Sendmail 的经验和教训,
针对 Sendmail 暴露出的缺点一一根本性地加了改进,
从而牢牢地确定了自己在大容量、高负荷邮件系统中的决定性地位。
您或许知道,广为使用的雅虎电邮、hotmail.com 就是使用基于 Qmail 的邮件系统。
第二节、 Qmail 如何工作
- Qmail 是什么?
Qmail
包是在 UNIX 系统上的一个邮件程序。
Qmail 程序由 Dan Bernstein 开发,
为标准的 UNIX 服务器提供邮件传输代理(MTA)的功能的,用于替代 sendmail 。
- Qmail 和相关的服务
Qmail 提供了MTA 功能,但是客户要能看到自己的信件,还需要其他协议和软件。两种
常见的远程用户取回他们消息的机制是邮局协议(Post Office Protocol, pop3)
和互交邮件访问协议(Interactive Mail Access Protocol, imap)。
pop3 可以采用 Vpopmail
或者 Courier-imap ,
imap 可以采用 Courier-imap ,
它们都和 Qmail 搭配极好。
综述,
Qmail 系统包括:可执行程序、配置文件、Qmail 工具和环境变量。这些彼此互相影响,共同提供邮件服务。
- Qmail 投递邮件进程流程
Qmail系统中有 9 个核心程序,这里简单的介绍一下:
qmail-smtpd 负责接收来自远程主机的邮件消息并将它们传送给 qmail-queue 处理。
qmail-inject 程序是用来接收本地产生的邮件消息并传送给 qmail-queue 程序。
qmai-queue 程序处理他们发来的邮件,移进邮件队列以便发送。
一旦消息被成功的放在邮件队列中,就调用 qmail-send 程序来处理。
qmail-send 检查邮件队列中每一个消息状态,前一次邮件请求失败的消息被识别,
并决定它是临时失败还是永久的。
当遇到目的邮件服务器临时故障,邮件暂时无法投递等情况,qmail-send 还负责随后的尝试重发工作:
当临时失败会再次投递,而永久失败将被送递到 qmail-clean 程序,被删除掉。
qmail-clean 实用来清除永久失败的的邮件消息的。
qmail-send 调用了qmail-lspawn 和 qmail-rspawn程序。
qmail-send 判断邮件是发给谁的,发给本地的,就交给 qmail-lspawn 程序,
再由 qmail-local 投送到本地邮件服务器。
要是确定为远程主机,就调用 qmail-rspawn 程序。
qmail-rspawn 为每一个邮件消息的接受方决定目的的邮件服务器,再调用 qmail-remote 程序发送。
这么多的程序分工完成邮件处理,正是不同于 Sendmail 的显著特征。这一特征,使得 Qmail 比起 Sendmail 来,要快速、高效。
- Qmail 的进程
qmail-send
splogger qmail
qmail-lspawn
qmail-rspawn
qmail-clean
Qmail 在任何时候都要求有五个程序在后台运行。这些核心的程序允许 Qmail 扫描新邮件,
并将他们发送到适当的目的地。
- Qmail 实用工具程序
除了以上五个 Qmail 进程外,进程和本地用户在处理和传输消息的过程中,都还会用到几个其他的 Qmail 实用工具程序。如下:
bouncesaying 允许用户将消息转发给程序或者程序不可用时反弹回信息
condredirect 允许用户将消息转发给程序,然后把消息转发到另一个地址
except 过去常用来修改一个调用程序的退出编码
forward 将消息转发给一个备用的邮件地址
maildir2mbox 将在 maildir 格式邮箱中的消息转换到一个标准的 sendmail 邮箱中
maildirwatch 产生一个 maildir 格式的邮箱
maildirwatch 监控一个用户的邮件目录并报告所有的新消息
preline 在将消息转发给相关程序前预处理这些消息
qbiff 当新消息到达后向用户终端显示器上写一个通知
qmail-clean 从 qmail 邮件队列中永远的移出无法到达的消息
qmail-inject 将新消息插入到 qmail 邮件队列中
qmail-local 向本地邮件系统上的用户投递消息
qmail-lspawn 由 qmail-send 调用以便向 qmail-local 程序转发消息
qmail-newmrh 用来从 morercpthosts 文件中创建 qmail 数据库
qmail-newn 从一个包含系统用户名和邮件名的 ASCII 文件表建立一个 qmail 用户文件
qmail-pop3d 接受 pop3 连接以便让用户阅读他们的邮箱
qmail-popup 用来验证 pop3 连接中的用户ID和密码
qmail-pw2u 将 UNIX 系统的用户id和密码转换成 qmail-newn 能用的一个表结构
qmail-qmtpd 接受远程主机发来的 qmtp 连接请求
qmail-qread 产生一个显示当前 qmail 邮件队列里消息的报告
qmail-qstat 产生一个报告来显示当前处在 qmail 投送状态下等待发送的消息数目
qmail-queue 将邮件消息排队等待投送
qmail-remote 将消息投送给远程邮件用户
qmail-rspawn 由 qmail-send 调用来向 qmail-remote 转发消息
qmail-send 尝试投送 qmail 邮件队列里的邮件消息
qmail-showctl 显示当前的 qmail 系统配置情况
qmail-smtpd 接收来自远程主机的 smtp 连接请求
qmail-start 初始化 qmail 的启动脚本
qmail-tcpok 用来清空 qmail-remote 中用到的 tcp 超时记录表
qmail-tcpto 显示当前的 tcp 超时记录表
qreceipt 用来会应对要求受到进行确认的消息
sendmail 用来将 sendmail 程序的功能复制到 mta 程序中
splogger 将消息插入系统日志中
tcp-env 将网络连接的信息转换成 UNIX 环境变量
每一个 Qmail 实用工具程序都在正确的处理和投递邮件消息中扮演不同的脚色。
其中有一些只能 Qmail 内核程序调用,其他的就可以由 Qmail 的系统管理员用来处理消息并得到统计信息。
还有一些可以被单个普通邮件用户来制定自己的邮件消息处理。
- Qmail 环境变量
除了控制文件之外,Qmail 程序还能使用 UNIX 环境变量来控制他们的动作。
多数的控制文件的值都能被一个相应设定的环境变量重载。
如果该环境变量没有设定,就使用控制文件的值。
Qmail 的环境变量是在 Qmail 程序运行前就被设置好的。
这是由一个包装程序完成的。常见的是 Tcpwrapper 和 Ucspi-tcp 里面的 tcpserver 。
我们一般就是用的 tcpserver 。关于 tcpserver 程序如何来运行 Qmail ,不属于本文讨论的范围。
- Qmail 控制文件
这一部,对于管理好 Qmail,非常重要的。
控制文件是 Qmail配置中的中心环节,它控制了 Qmail 的操作性为。
它位于 /var/qmail/control 目录下。
每一个文件包含一个值,这个值定义了相应的 Qmail 可执行程序的变量。
Qmail 控制文件是定义了 Qmail 参数的 ASCII 文本文件。
大多数控制文件要求一个单一的文本值,该值可以在一行中输入。
也有一些控制文件能包含多个值。
在这种情况下,每一个值被输入到单独的一行中,每一行以一个标准的 UNIX 换行符(LF)结尾。
还有一个要重点注意,就是控制文件的权限问题,推荐 root 可读写,其他只读。
第三节、 轻松管理 Qmail
Qmail 的最为显著的特征即是方便管理,您只需要浏览器即可。
同其他终端使用者一样,您肯定也害怕输入那些复杂难记的 UINX 命令。
这个让您轻松管理 Qmail 的软件是: QmailAdmin 。
看看其名字,就知道 QmailAdmin 是专门用来管理 Qmail 的。
它跟 Qmail 绝佳搭配,既可以让管理员增加、删除整个邮件域的用户、邮件列表或者单个用户的细节设置,
也可以让用户自己管理自己的转发、自动回复,更改邮箱登录密码等等。
看看其管理的 Web 界面:
- “主菜单” 的界面

- “邮件帐号” 的界面

- “修改用户” 的界面

第四节、 如何处理病毒和垃圾邮件
绝大多数的网络管理员最为关心病毒邮件,因为邮件病毒会将病毒传播至局域网内。
这也是以往的邮件系统最为头痛的问题。
使用 Qmail 后,您将会尤为放心。
Qmail 通过 Qmail-Scanner 来达到“防病毒和防垃圾邮件”的功能。
而且 Qmail-Scanner 在支持这个功能时,
并没有减低 smtp 验证的功效
(这是很多商业性的邮件杀毒网关所做不到的哟)。
Qmail 的杀邮件病毒的原理尤为先进:
Qmail 的 smtp 守护程序收到邮件后,
先将邮件内容和附件(包括压缩包)用病毒引擎扫描一遍,
没有发现病毒的话,才将邮件放入邮件队列中进行下一步的处理。
它支持超过一打的 UNIX 上的杀病毒软件。
甚至可以同时支持多个杀毒软件,若您不放心只使用一个的话。
对于 SPAM ,即我们通常所说的垃圾邮件,Qmail 调用大名鼎鼎的
spamassassin
来判断用户收到的外来信件是否是垃圾邮件,
若是则将之放进邮件的垃圾箱(慧龙邮件系统将此邮件夹取名为 Spam ),若不是则正常邮递。
或者同时您自己详细定义如何对接收到的邮件进行处置的规则(系统通过 Maildrop
执行您的过滤规则)。
自定义规则可以依据邮件大小、发件人、收件人来进行指定,
并且可以同时定义多条规则,这些规则都将根据您的定义秩序而依次发挥作用 !
第五节、 使用 Qmail 的理由
以下是从 Qmail 用户收集得来的十大理由:
- 安全性: Qmail 防止外人进侵你的计算机。
- 可靠性: Qmail 不会遗失邮件。
- 速度: Qmail 寄递邮件的速度比 Sendmail 更快,而又不影响其可靠性。
- 低资源占用: 在一台 16MB 的 486 计算机上面,Qmail 已经能够同时处理数以十计的邮件寄递。
- 使用者自行管理的通信论坛: 使用者无须系统管理员帮忙,即可自行创立新的通信论坛。
- 轻松设定虚拟主机端(virtual host): Qmail 率先提供多区域(multiple-domain)支持。
- 管理清楚易明: Qmail 将你的烦恼减至最低。
- 变通的程序寄递: Qmail 为外间的邮件处理器提供一个强大的接口。
- 可变的包封回复路径(Variable Envelope Return Paths): 无论有多少订阅人数的通信论坛,
这个功能(配合 ezmlm 使用)
也能提供100%的自动弹回处理。
- maildir 邮件储存格式: 这个功能令设定高容量分布式
POP toasters 变得轻松简单。
第六节、 为什么采用 Linux ,而不是其他的 UNIX ?
UNIX 有很多种类和分支,较著名的有:
Solaris、AIX、HP-UNIX、BSD、SCO UNIX、Tru64 UNIX、IRIX、GNU/Linux 等。
其中只有 BSD、GNU/Linux 是可以免费获得的。
我们认为有下列理由:
- 基本上,GNU/Linux 是最标准化(没有任何私有协议)的 UNIX ,它采用都是标准的 POSIX 规范、标准的 TCP/IP 协议,和遵循广泛的 RFC 标准。
- 针对其他不标准的规范和格式,GNU/Linux 上均有完美的替代的解决方案,例如这两个程序: tnef 、wv 。
2004年01月28日上午09时16分54秒[root@www root]# rpm -qi wv
Name : wv Relocations: (not relocateable)
Version : 1.0.0 Vendor: Gugong
Release : gugong1 Build Date: 2004年01月19日 星期一 18时47分29秒
Install Date: 2004年01月19日 星期一 18时47分46秒 Build Host: www.ehuilong.com
Group : 应用程序/出版 Source RPM: wv-1.0.0-gugong1.src.rpm
Size : 904766 License: GPL
Signature : (none)
Packager : Gugong
URL : http://wvware.sourceforge.net/
Summary : 一个将 M$ Word 8 二进制地转换成 HTML 格式的转换程序。
Description :
WV 转换 Office 97 的 M$ 版本 8 的二进制文件到 HTML,这样
就可以通过 Web 浏览器来查看其内容了。
2004年01月28日上午09时16分57秒[root@www root]#
2004年01月28日上午09时17分32秒[root@www root]# rpm -qi tnef
Name : tnef Relocations: (not relocateable)
Version : 1.2.3.1 Vendor: Gugong
Release : gugong1 Build Date: 2004年01月24日 星期六 00时16分41秒
Install Date: 2004年01月24日 星期六 00时16分44秒 Build Host: www.ehuilong.com
Group : 邮件/解码 Source RPM: tnef-1.2.3.1-gugong1.src.rpm
Size : 101888 License: GPL
Signature : (none)
Packager : Mark Simpson
URL : http://tnef.sourceforge.net
Summary : 对 m$ 的 TNEF 格式的附件进行解码。
Description :
TNEF 程序用来从类型为“application/ms-tnef”的 MIME 附件里面取出文件。只有
萎软采用这种类型的附件。
由于萎软的 Exchange 邮件服务器尤其是 Outlook 邮件客户端的大量使用,越来越多
的邮件包含这种格式的附件。
TNEF 程序允许从包含 TNEF 格式的附件里面取出文件。这样不需要萎软的 Outlook
就可以浏览这种附件。
2004年01月28日上午09时17分35秒[root@www root]#
这两个程序您只需要运行 rpm 来安装即可。而这是其他 UNIX 无法简单、迅速地解决的。
这要归功于
RedHat 的 RPM 格式。
- 比起 BSD 家族,GNU/Linux 的技术支持更为广泛,公开的研究资料更为充足。
而商业 UNIX 都需要采用昂贵、专门的硬件来搭配其操作系统,而且商业 UNIX 操作系统本身价格不菲。
第七节、 关于慧龙邮件系统
慧龙邮件系统正是基于 Qmail 的 Linux 企业邮件系统。
与其他 Qmail 系统不一样的是:
A. 我们采用的是最新版本的 RedHat Enterprise Linux Advance Server(支持 x86 和 x86_64 平台;RHAS 3.x/4.x/5.x 均可);
B. 我们会时刻保持相关软件的更新和补丁的安装;
C. 毫无疑问,除了邮件系统,我们所采用的系统平台也是最安全的。
正是操作系统的安全作后盾,才使得我们的慧龙邮件系统最为优秀和出色。
这是我们感到自豪的,也是客户最为放心和安心使用的 !
慧龙邮件系统的特点:
- 支持百万级海量电子邮件用户。
- 出众的电子邮件投递性能(单机每分钟 1000 封电子邮件以上)。
- 模块化设计,良好的系统扩展能力。
- 强大的抗攻击能力。
- 安全地通过网络存取邮件。
- 直观的系统管理和简便的远程管理功能。
- Maildir 邮箱格式,保证信箱的可靠性。
- 强大的查杀病毒邮件、过滤垃圾邮件的功能。
- 优化的 Linux 系统,日志性文件系统保证数据、操作系统的完整性和可靠性。
-
- 支持 smtp、imap、pop3、http 方式收发邮件(全部支持 SSL 加密)
- 支持 x86_64 的 64 位 Linux 平台(RHAS 3.x/4.x/5.x 均可),让您的应用全面、无缝升级至 64 位 !

第八节、 慧龙邮件系统能给您带来什么 ?
| 传统的 Windows、Exchange 环境 |
|
慧龙企业邮件系统 Linux 环境 |
|
|
|
若您采取传统的 m$ 的 Exchange 做邮件服务器,看看您需要什么和哪些步骤,
以及您得到了什么:
- 您需要购买昂贵(当然盗版的随处可见)的 Windows NT 或者 2K、2003 系列作操作系统平台。
- 您需要另外购买更为昂贵的 Exchange 这个庞大、臃肿的软件(也当然,盗版的随处可见) 做您的邮件系统平台。
- 为防止您的 Windows 服务器不受病毒、黑客和蠕虫的攻击, 您得额外购买杀毒软件(可以作用於 Exchange,每年另付高额的病毒库升级费用)。
- 您也得购买更、更为昂贵的硬件防火墙。或者您舍近求远、另外还使用一台
Linux/UNIX 的邮件网关来过滤病毒(实际上,很多公司正是这么做的)。
- 您需要请一、二位精通 Windows 维护的 MSCE 工程师。
- 这就安全了吗? 非也 !
大量的事实证明:
提供服务的 Windows 机器(特别是提供 Internet 相关服务)运行时间久后会出问题,
而且只能重启才能恢复正常。然后出问题后,再重启,如此周而复始。
连 Microsoft 自己的 Windows 服务器也不例外(即使它采用了第三方的 Linux 代理缓冲服务)。
您花了大钱的 Windows 服务器当然需要间歇的重启(您的邮件用户已经开始投诉了)。
您还得不停地打 m$ 的补丁。嘿 !每打补丁一次,您得重启一次才能起作用,
如此周而复始
(您的邮件用户已经哀声怨道了)。
- 最后,看看您得到了什么:
您的网络管理员无时不刻不绷紧神经、来回疲惫奔波。
您的员工会常常担忧今天可以正常收发上司和同事的邮件不。
一不溜神,病毒就通过邮件侵袭了您的局域网,员工都停下工作,等待杀毒。
您、老板则会担忧重要的邮件是不是立即到了,是否影响公司的重大经营活动。
总之,您花了大钱,却没省事、也不放心。
赶快启用我们的基于 Qmail 的 Linux 企业邮件系统吧,看看您得到了什么:
您只需要一个文员即可足够完成管理一般性的邮件系统维护工作;
当然您省下了购买操作系统、邮件软件、邮件网关、防火墙的一大笔开销;
全部是 Open Source 的软件,您不必担心头痛的版权问题;
完全符合 Internet 标准,向前的兼容性和向后的可扩展性没的说;
互联网上的邮件病毒、蠕虫压根儿危害不到本邮件系统和操作系统平台;
且自带杀毒模块(病毒库和扫描引擎自动升级),将外来的病毒邮件彻底杀除;
极为高效、稳定、安全。您可以前所未有地享受工作,您发觉工作原本是如此快乐。
第九节、 最常见的疑问
- Qmail 这么复杂,管理起来会简单吗?
不错! 我们已经帮您做好了管理后台,您只需要使用浏览器即可进行轻松的邮件用户的管理工作。
- 我没有公网 IP ,只是想在局域网里面建立一个邮件系统,Qmail 可以做到吗?
完全可以,您使用 BIND 简单地建立一个内部的 DNS 服务器即可轻松享受 Qmail 。
- Qmail 相容 Sendmail 吗?
没错,正是。您可以使用 Senmdail 的 MailBox 邮件格式,更可以使用先进的 MailDir 邮件格式。
同时,还可以把 Sendmail 的 Alias 转换成 Qmail 格式,把 MailBox 转换成 MailDir 格式。
- Maildir 的先进性表现在哪里?
Maildir 这种新的信箱格式是 Qmail 提出的,
保证在操作系统掉电或者突然崩溃的情况下不至于破坏整个信箱。
提供了超级的可靠性。
同时,Qmail 只有在邮件被正确地写入到磁盘才返回处理成功的结果。
这样即使在磁盘写入过程中发生系统断电或崩溃等情形,也可以保证邮件不被丢失,而是被重新投递。
- 邮件系统的用户必须是系统用户?
不是,邮件用户与系统用户彻底分开。
邮件用户的数量不受系统用户数的限制,同时提高了系统安全性。
在确保系统正常工作的前提下,还可以充分利用硬件和操作系统的资源。
- Qmail 的效率究竟有多高?
Qmail 支持邮件的并行投递,同时可以投递上百封邮件。
目前邮件投递的瓶颈在于 SMTP 协议,
通过 STMP 向另外一台互联网主机投递一封电子邮件大约需要花费10多秒钟。
而 QMTP(Quick Mail Transfer Protocol,快速邮件传输协议)可以加速邮件的投递。
Qmail 的 设计目标是在一台 16M 的奔腾机器上最终达到每天可以投递大约百万级数目的邮件。
参考资料:
本文链接:
http://www.lootan.net/gugong/gugong/html/Qmail_Mail_System.php
返回主页