基于Linux系统配置高效的Qmail邮件服务器毕业设计论文Word下载.docx
《基于Linux系统配置高效的Qmail邮件服务器毕业设计论文Word下载.docx》由会员分享,可在线阅读,更多相关《基于Linux系统配置高效的Qmail邮件服务器毕业设计论文Word下载.docx(43页珍藏版)》请在冰豆网上搜索。
Themailserver'
sbasedontheLinuxsystemconfigurationandefficient
Abstract
Beforedelvingtoodeeplyintofurtherconfigurationandtailoringofqmail,itisimportanttounderstandthebasicstructureofqmail.Qmailisoftenreferredtoasmerelyamailserversoftwarepackage.Whilethismaybeaccurateinonesense,itismoreaccuratetothinkofqmailasamaildeliveryarchitecturewhosearchitecthasthoughtfullyprovidedabasicimplementationofallthecomponentsofthatarchitecture.Qmailisverymodular—itconsistsofaseriesofsimpleprogramscommunicatingviaspecificandlimitedinterfaces.Eachsimpleprogramhasaspecificandlimitedtasktoperform.Thisarchitectureallowseachcomponentprogramtobeeasilyreplacedornewprogramstobeinsertedbetweenthebasiccomponents.
ThepurposeofthistextisusethefreesoftwareonaUNIXplatforminstallacompletemailsystemandhowmanageit.Weusesqmaiassmtpserver,usesvpopmailaspop3serverandrealizesConjecture,usesezmlmtoofferthesupporttomailrow,WealsousesigenustoofferafriendlywebmailInterface,Clanavmailforthissystemtoprovidetheantivirusmodule.
KeyWords:
Qmail;
mysql;
ezmlm;
igenus;
apache.
前言
实践证明,基于Windows和Exchange的邮件服务器并不是企业级电子邮件系统的最佳选择。
由于对稳定性、安全等性能要求非常高,因此大型电子邮件系统一般都使用UNIX作为服务器的操作系统,例如,Hotmail使用FreeBSD和Solaris,国内163等站点也是采用BSD系列。
追求稳定的大型企业可采用FreeBSD和Solaris,普通中小企业可采用Linux。
Qmail是可以完全替代Sendmail-binmail体系的新一代UNIX邮件系统,它也是一个基于UNIX操作系统的Internet邮件传输机构(InternetMailTransferAgent简称MTA)。
它采用标准的简单邮件传输协议(SimpleMailTransferProtocol简称SMTP)与Internet上其他MTA交换信息。
为了解决用户邮件存储问题,Qmail提出了Maildir存储方式,每个邮件作为单独的一个文件保存在用户个人的邮件目录下,这就避免了加锁。
同时,Qmail支持虚拟域(VirtualDomain)和虚拟用户(VirtualUser),使邮件系统的用户独立于UNIX系统用户。
当前在国内最流行的免费电子邮件系统如163、371等,都是使用网易公司开发的系统。
这些系统就是采用Qmail作为基本服务器软件,采用NFS网络文件系统作为用户邮件存储空间,使用Maildir作为邮件存储格式,提供多级目录以支持较大的用户数。
与Internet上的免费电子邮件系统相比,大中型企业电子邮件系统用户主要为企业内部用户,虽然数量没有上十万、百万那么多,用户群也相对固定,但对系统的安全性、稳定性的要求更高,用户管理工作也更细致、繁琐。
如果能采用统一的Web形式建立完善的用户数据库并提供邮件服务和用户管理,则会在方便用户的同时,大大地减轻系统管理员繁琐的工作。
Qmail是GNU下的一个著名的自由软件,世界各地的高手们为进一步完善和扩充它的功能,开发了大量的基于Qmail的工具和补丁软件,VmailMgr(VirtualMailManaGeR)就是其中之一。
它增强了Qmail虚拟域(VirtualDomain)的功能,提供了大量的命令,以方便建立和管理独立于UNIX系统用户的邮件系统用户,提供软、硬空间限额等丰富的管理功能;
邮件服务器的虚拟用户也可以通过POP3、IMAP标准协议访问自己的邮箱。
特别值得一提的是,VmailMgr还提供一组CGI程序和PHP函数,有了这组程序,用户们可以通过Web页面进行邮箱申请、密码更换,邮件管理员也可以通过Web页面轻松完成用户管理和邮件系统的配置工作。
1.关于邮件系统的相关协议
1.1SMTP协议
SMTP协议是简单的邮件传输协议(SimpleMailTransferProtocol)的缩写。
这是最早出现的,也是被普遍使用的最基本Internet邮件服务协议。
1.2POP3协议
POP协议是邮局协议(PostOfficeProtocol)的缩写,是一种允许用户从邮件服务器收发邮件的协议。
与SMTP协议相结合,POP3是目前最常用的电子邮件服务协议。
1.3IMAP4协议
IMAP协议是Internet消息访问协议(InternetMessageAccessProtocol)的缩写,现在常用的是版本4,它为用户提供了有选择的从邮件服务器接收邮件的功能,基于服务器的信息处理功能和共享信箱功能。
IMAP4在用户登录到邮件服务器以后,允许采取多段处理方式查询邮件。
首先,用户可以仅读取电子邮箱中的邮件信头(Messageheader);
然后,用户可以选择下载指定的邮件或者全部邮件。
IMAP4在邮件服务器一端为用户保留邮件。
1.4HTTP协议和HTML语言
HTTP协议是超级文本传输协议(HyperTextTransferProtocol)的缩写,支持这个协议的邮件服务器,可以提供通过Web的电子邮件收发服务。
1.5MIME协议
MIME是多用途Internet邮件扩展(MultipurposeInternetMailExtensions)协议的缩写。
作为对SMTP协议的扩充,MIME规定了通过SMTP协议传输非文本电子邮件附件的标准。
目前,MIME的用途早已经超越了收发电子邮件的范围,成为在Internet上传输多媒体信息的基本协议之一。
1.6LDAP协议
LDAP协议是轻量目录访问协议(LightweightDirectoryAccessProtocol)的缩写。
通过将相关的内容存放在统一的目录之下,目录服务为用户提供了基于客户/服务器工作方式的信息查询手段。
2.qmail的工作原理和配置文件的设置
2.1qmail和相关的服务
qmail提供了mta功能,但是客户要能看到自己的信件,还需要其他协议和软件。
两种常见的远程用户取回他们消息的机制是邮政协议(postofficeprotocal,pop3)和互交邮件访问协议(interactivemailaccessprotocol,imap)。
综述:
qmail系统包括几个可执行程序、配置文件、qmail工具和环境变量,这些彼此互相影响,共同提供邮件服务。
2.2email投递邮件进程流程
如图3-1
图3-1
qmail系统中有9个核心程序,这里简单的介绍一下。
qmail-smtpd负责接收来自远程主机的邮件消息并将它们传送给qmail-queue处理。
qmail-inject程序是用来接收本地产生的邮件消息并传送给qmail-queue程序。
qmai-queue程序处理他们发来的邮件,移进邮件队列以便发送。
一旦消息被成功的放在邮件队列中,就调用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程序发送。
qmail的进程:
qmail-send、sploggerqmail、qmail-lspawn、qmaiil-rspawn、qmail-clean。
qmail在任何时候都要求有五个程序在后台运行。
这些核心的程序允许qmail扫描新邮件,并将他们发送到适当的目的地。
2.3qmail环境变量
除了控制文件之外,qmail程序还能使用unix环境变量来控制他们的动作。
多数的控制文件的值都能被一个相应设定的环境变量重载。
如果该环境变量没有设定,就使用控制文件的值。
qmail的环境变量是在qmail程序运行前就被设置好的。
这是由一个包装程序完成的。
常见的是tcpwrapper和tcpserver。
本文就是用的tcpserver。
2.4qmail控制文件
对于管理好qmail,这一步非常重要的。
控制文件是qmail配置中的中心环节,它控制了qmail的操作性为。
它位于/var/qmail/control目录下。
每一个文件包含一个值,这个值定义了相应的qmail可执行程序的变量。
qmail控制文件是定义了qmail参数的ASCII文本文件。
大多数控制文件要求一个单一的文本值,该值可以在一行中输入。
也有一些控制文件能包含多个值。
在这种情况下,每一个值被输入到单独的一行中,每一行以一个标准的UNIX换行符(LF)结尾。
还有一个要重点注意,就是控制文件的权限问题,推荐root可读写,其他只读。
#chmod644/var/qmail/control/*
以下将逐一介绍这个控制文件:
Badmailfrom:
这个控制文件实现拒收邮件功能的,每一个地址遵循前面说的规则,要单独一行。
而且,不用重起qmail就能生效。
Bouncefrom:
用来定义用户名的,该用户名是出现在那些被退回给原始发件人的消息中,一般都是永久的投递失败消息。
Bouncefrom默认值是MAILER-DAEMON,它通常是一个虚拟用户名,是一个真实用户的别名。
你要是想给用户的退信消息中用另一个名字,可以用一下命令:
#echopostmaster>
/var/qmail/control/bouncefrom给改为postmaster.
Bouncehost:
制定了退信消息中的主机名,默认的值是me文件的主机名。
Concurrencylocal:
定义了qmail能够同时运行的本地投送进程数。
对于大型的邮件主机,非常重要。
默认参数是10。
就是允许多达10个本地邮件投递进程同时运行。
这个控制文件的最大值是由qmail源代码中的conf-spawn变异参数设置的,这个编译参数默认值是120,最大值是255。
Concurrencyremote:
定义了qmail可以同时运行的远程投递进程数,默认值是20。
它也是由conf-spawn设置的,默认值是120,最大可设255。
但是要根据你的实际情况,因为运行进程要需要内存和硬盘的,设太大了小心服务器负载!
Defaultdomain:
默认域名,如果给本地的邮件用户发信,没有加上域名,qmail-inject会给他添加defaultdomain文件中的域名。
如果设置了QMAILDEFAULTDOMAIN环境变量,就会重载defaultdomain控制文件的值。
Defaulthost:
默认主机名,同一邮件服务器上,给本地用户发邮件,如果收信的用户地址没加域名,就会添加主机名。
Databytes:
定义由qmail-smtpd接受到的邮件消息所允许的最大字节数,也就是发送和接受邮件的大小(本机上给本机用户出发和接受除外)。
就是说,远程邮件主机和你用outlook、foxmail等远程的mua工具发信,都受它的限制。
默认值是0,表示不限制。
#echo10000000>
/var/qmail/control/databyte(设置为10m,超过10m,将得到code552,告知:
其邮件大小超出了该邮件主机所能容忍的限度)
Doublebouncehost:
用来为那些经历了两次反弹后的消息指定主机名。
默认是me文件的值
Doublebounceto:
用来为那些经历了两次反弹后的消息指定用户名,默认是postmaster。
Envnoathost:
是qmail-send用来为没有指定主机名的邮件接受方指定他的主机名的,默认是没有这个控制文件的,qmail-send使用me文件定义的
Helohost:
指定在qmail-remote与远程邮件服务器的smtp会话中用到的主机名。
如果helohost控制文件没有给出,qmail-remote使用me文件的值。
Idhost:
指定了用来在消息中产生message-ID:
头字段得主机名,默认qmail-inject用me文件的值。
Localiphost:
用来为邮件消息指定本地地址的,内容是邮件主机的ip地址。
但是它用在dns上就会有问题。
建议不要设置。
Locals:
指定邮件本地地址,不存在,qmail-send就假定me文件的值为邮件主机的唯一可用本地邮件主机。
Me:
用来指定本地邮件服务器的主机名,最重要的控制文件,如果没有,qmail将不会运行。
me控制文件通常是靠运行qmail配置子目录下的config脚本文件来建立的,config脚本自动判断邮件服务器的dns域名,并产生一个适当的控制文件(me,locals,rcpthhosts)。
如果某种原因你的邮件服务器无法连通dns服务器,可以手工运行configfast来指定邮件服务器主机名:
#/var/qmail/configure/config-fast
Plusdomain:
用来将一个域名指定成任何一个以一个加号(+)结尾的地址。
缺省的情况下,出现在me文件的域名被添加到任何一个以加号结尾的邮件地址中。
Queuelifetime:
用来指定一个消息在他被删除前,可以在邮件列表中保存的时间秒数。
默认是604800,当投递失败的消息超过规定的时间,将被从邮件队列中删除。
Rcphosts:
定义了qmail可以接收消息的主机和域名。
不过因为rcpthosts中的域名最好不要超过50行,多出的添加到morercpthosts中。
Morercpthosts:
用来指定qmail将要为其接受消息的额外的主机和域名。
Smtpgreeting:
用来指定SMTP连接的欢迎标志,默认是用me文件的主机名。
那么建立一个smtp连接的时候将会看到如下信息:
Trying198.160.x.x...
Connectedto
Escapecharacteris^].
220welcomeconnecttooutopenrelaymailserver–ESMTP
Smtproutes:
用来指定能够被用来将邮件投送给特定目的地的静态smtp连接的。
Timeoutconnect:
用来指定qmail-remote将要等待的一个时间秒数。
也就是说等待远程smtp服务器接受本地的一个smtp请求响应的时间,默认是60秒。
对于质量不好的网络,可以适当调节。
Timeoutremote:
用来指定qmail-smtpd等待远程SMTP主机发送数据的时间线。
默认的情况下,如果连接建立后1200秒内没有接受到远程SMTP主机的任何信息,那么将关闭这个连接。
Timeoutsmtpd:
用来指定qmail-smtpd等待远程smtp客户端连接的时间秒数。
默认是1200,超过这个时间,连接取消。
Virtualdomains:
让qmail接受本地邮件以外,还接受该文件中指定的域或者邮件地址,就是常说的虚拟域支持。
以上说的一些控制文件,qmail默认不是都有的,只有一些必须要得。
根据你的mail不同的使用情况,自己选择来建立和设置。
2.5改变MUA程序接口
qmail程序包含了一个可执行程序,该程序替代了unix标准的sendmail程序。
想用qmail作为mail服务器,必须用qmail的sendmail包装程序替代现有的sendmail程序。
#mv/usr/sbin/sendmail/usr/sbin/sendmail.bak
#chmod0/usr/sbin/sendmail.bak
#ln–s/var/qmail/bin/sendmail/usr/sbin/sendmail
2.6建立qmailsmtp功能
传统上使用inetd程序来监听网络,但是缺点很多。
本文中用ucspi-tcp包的tcpserver服务来代替它。
参考了iceblood的qmail-setup.1.5.3的脚本文件,是这样完成的:
1、建立/etc/qmail目录,建立了smtp.shandpop3.sh启动脚本
2、建立了tcp.smtp和tcp.smtp.cdb文件。
具体是这样做的:
#echo“/etc/qmail/start”>
>
/etc/rc.d/rc.locad---开机执行/etc/qmail/start
#touch/etc/qmail/start---建立执行文件
#touch/etc/qmail/smtp---建立smtp脚本文件
#touch/etc/qmail/pop---建立pop脚本文件
#touch/etc/qmail/tcp.smtp---建立tcpserver的连接规则文件
#echo"
csh-cf'
/var/qmail/rc&
'
"
/etc/qmail/start--开机启动qmail
/etc/qmail/smtp.sh"
/etc/qmail/start--开机执行smtp.sh
smtp脚本内容:
/usr/local/bin/tcpserver-H-R–l-t1-c100-v-p-x/etc/qmail/tcp.smtp.cdb-u502-g5010smtp/var/qmail/bin/qmail-smtpd/home/vpopmail/bin/vchkpw/bin/true|/var/qmail/bin/splogger&
(注:
502and501换成系统上的qmaild与nofiles的uidandgid的值。
)
pop脚本内容:
/usr/local/bin/tcpserver-c100-v-l-U-H-R0pop3/var/qmail/bin/qmail-popup/home/vpopmail/bin/vchkpw/var/qmail/bin/qmail-pop3dMaildir2>
&
1|/var/qmail/bin/splogger&
tcp.smtp脚本内容:
127.0.0.1:
allow,RELAYCLIENT="
"
:
allow
#/var/qmail/bin/tcprules/etc/qmail/tcp.smtp.cdb/etc/qmail/tcp.smtp.tmp<
/etc/qmail/tcp.smtp
以上配置,可以做到开机自动启动了。
3.Qmail的安装和配置
3.1Qmail的前期准备
3.1.1系统安装
操作系统:
CentOS6.3
分区状况
/5G
Swap1024MB
/home1024MB(因为邮件都储存在/home/vpopmail下,可以根据情况分区)
3.1.2设置DNS
MX记录和地址反解
3.1.3卸载已有的邮件系统
确认没有邮件服务在运行:
#/etc/init.d/psotfixstop
#netstat-na|grep25
#netstat-na|grep110
#netstat-na|grep143
#servicesendmailstop
删除已有的邮件软件:
#rpm–e--nodepspostfix
3.1.4软件包介绍
Qmail是本文的主角,世界上使用最广的邮件系统之一。
此处使用的是netqmail-1.05的补丁集和shupp.org的Toaster7.0