基于postfix的邮件系统Word格式文档下载.docx
- 文档编号:1019517
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:45
- 大小:36.09KB
基于postfix的邮件系统Word格式文档下载.docx
《基于postfix的邮件系统Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于postfix的邮件系统Word格式文档下载.docx(45页珍藏版)》请在冰点文库上搜索。
6.
配置Cyrus-SASL
6.1.
6.2.
运行
7.
安装Postfix
7.1.
7.2.
7.3.
7.4.
运行
7.5.
测试
8.
安装Cyrus-IMAP
8.1.
8.2.
8.3.
8.4.
8.5.
9.
安装IMP
9.1.
9.2.
配置Apache/PHP
9.3.
配置Horde
9.4.
配置Imp
9.5.
配置Turba
9.6.
测试IMP
10.
其它
10.1.
启动脚本
10.2.
整体测试
本文试图介绍如何在一个Linux平台上安装一套功能完整的邮件系统。
这里我们以Postfix做SMTP服务器、Cyrus-IMAP做POP3/IMAP4服务器、通过Cyrus-SASL对存储在MySQL数据库中的用户进行验证和授权,并且使用IMP来提供一个完善的WEBMAIL界面。
这个邮件系统的设计目标是提供一个可扩充的、具备大多数功能的邮件系统。
本文的最新版本可以在这里找到:
gnu.org/technology/Postfix_I.html。
如果希望使用Courier-IMAP替代了Cyrus-IMAP做IMAP/POP3服务器,可以参阅本文的姊妹篇gnu.org/technology/Postfix_II.html。
有关本文所涉及的技术问题,请到http:
//www.anti-
本文的版权遵循GPL,可以在不删除版权信息和注明修改的情况下任意传播。
∙2002-05-21第一次发布,版本0.20。
∙2002-08-13修正一些错误,版本0.21。
∙2002-08-23修正一些错误,版本0.22。
∙2002-09-12在RedHatLinuxAdvanceServerV2.1上进行了测试,修正了一些错误,版本0.30。
∙2002-12-12修正了一些错误,添加了IMP部分的内容,版本0.31。
∙2003-01-30修正了一些错误,添加了非明文密码部分的内容,版本0.32。
∙2003-02-05修正了一些错误,版本0.33
∙2003-03-26使用了SASLV2和Cyrus-IMAP2,支持使用db4的新的Linux发行版,如RedHat8.0和Mandrake9.0,并以RedHat8.0为示范平台。
修正了一些错误,版本0.40。
∙2003-03-28修正了一些错误,特别感谢bjchenxu,版本0.41。
∙2003-09-24添加了虚拟域功能,修正了一些笔误,版本0.50。
∙2003-10-13修正了虚拟域的错误,版本0.51。
∙2003-12-02修正了部分错误,版本0.52。
如果没有其它的输入错误问题,本文将不再更新。
∙2004-01-29做了较大的改动,版本0.70。
以AS3为示范平台。
令人疯狂的是当我即将完成这次的修改时,居然因为DreamWeaver的一个脚本错误导致我一天一夜的辛苦工作消失的干干净净。
我哭~。
本次的修改涉及SASL、MySQL和Cyrus-IMAP等各个部分,遵照最小修改的原则,凡是AS3中提供的部件可用,我将不再重新编译,这可能对移植到其它平台或版本有较大的困难。
∙2004-02-04修正了一些笔误。
TODO
∙增加邮件列表功能
∙增加SSL部分的内容
∙翻译:
希望有能力的朋友可以翻译这篇文章为英文,这样国外的朋友也可以看到
谢谢lesson.ward、YunpingZhu、Temp、bjchenxu的指正。
也感谢C和anti-的各位朋友的关注和建议。
参考文档:
http:
//www.delouw.ch/linux/Postfix-Cyrus-Web-cyradm-HOWTO/html/index.html。
在这篇文章撰写之初,参考过该文章,目前该文章也在不断更新,大家也可以看看。
系统逻辑结构:
+---------------------------------------------------+
||
|25/2525/25110/993143/99580/443|
|IncomingOutgoingPOP3IMAPWEB-MAIL|
|/\/\/\/\/\|
||||||||||||
|\/\/\/\/\/|
+-------------------+---------------+---------------+
|Postfix||IMP|
||+---------------+
||Cyrus-IMAP|
|+-----------+-------------------------------+
||Cyrus-SASL|
|+-------------------------------------------+
||saslauthd|
||PAM|
||pam_mysql|
+-------+-------------------------------------------+
|MySQL|
整个系统对外的界面包括几个部分,用来发信的SMTP、用来收信的POP3和IMAP、以及一个WEB界面的邮件使用系统。
这里没有提供WEB界面的管理工具,需要大家自行依据实际需要开发。
如果需要商业应用,可以购买CEM产品(
MySQL作为系统中存储数据的核心,它存储了用户的信息。
这个信息不但用于POP3/IMAP和SMTPAUTH的认证需要,而且也为Postfix提供了本地接收者的列表和转发功能。
认证流程比较繁琐。
整个认证是通过Cyrus-SASL来做的,通过运行一个守护进程saslauthd来监听认证需求。
saslauthd这里使用了pam认证方式通过pam_mysql插件对MySQL数据库进行查找。
系统支持虚拟域用户和非虚拟域邮箱。
为什么选择这些部件组成这套邮件系统呢?
选择Postfix作为MTA,是因为它是一个非常优秀的MTA服务器,它不但性能卓越,对sendmail的兼容性好,支持和多种其它软件的隅合,而且本身就带有很强的反垃圾邮件功能。
选择MySQL作为存储用户信息的部分,是因为一方面MySQL本身是一个轻量级的数据库,在处理少量数据时非常快速,而且通过关系型数据库可以更方便地管理用户信息和提供更多用户特性(如基本每用户的过滤控制),此外还消除了因为使用系统用户所带来的安全隐患。
选择Cyrus-SASL作为认证机制,是因为它是一个标准的认证层,多数软件都支持它的认证。
选择Cyrus-IMAP作为IMAP/POP3服务器,是因为它的IMAP/POP实现效率很高,要比Courier-IMAP的实现要高一些,虽然它因此而使用的Maildir/格式与标准的QMAIL定义的格式有所不同。
这个系统将来可能的改进有几个方面:
一是使用更高版本的Cyrus-SASL,直接支持对MySQL的查询认证,避免了使用saslauthd=>
pam=>
pam_mysql这样罗嗦的环节;
二是使用更高版本的Cyrus-IMAP,对虚拟域有更加直接的支持,不用像现在这样需要做别名转发才能实现。
本文以Linux系统为目标平台,支持多数的Linux平台如RedHat7.x/8.x/9.x/AS2.1/AS3、Mandrake8.x/9.x等,理论上也会支持其他的Linux发行版,甚至其他的UNIX系统。
这里以RedHatLinuxAdvanceServerEnterpriseV3.0(以下简称AS3)为说明平台。
我采用了最基本的AS3安装,只选择了“WebServer”、“DnsNameServer”、“MySQLDatabaseServer”、“DevelopmentTools”和“KernelDevelopment”等软件包组(“Core”和“Base”组是默认必选的软件包)。
除此外,还需要额外安装以下RPM:
1、php-mysql-4.3.2-8.ent.i386.rpm(在CD3)
4.1.
AS3默认是只包含MySQL除了服务器程序外的部分的,所以需要从RPMFIND下载MySQL的源RPM重建(最好使用源码包,采用MySQL.com提供的RPM和BIN包都可能在其它使用mysql的部分编译时候出现错误)。
[root@mailroot]#cd/usr/src
[root@mailsrc]#wgetftp:
//
4.2.
[root@mailsrc]#rpmbuild--rebuildmysql-3.23.58-1.src.rpm
[root@mailsrc]#cdredhat/RPMS/i386
[root@maili386]#rpm-ivhmysql-server-3.23.58-1.i386.rpm
为提高MySQL的安全性,使之只监听在本地打环端口,修改/etc/f:
[root@maili386]#cd
[root@mailroot]#vi/etc/f
在[mysqld]小节里面添加:
bind-address=127.0.0.1
并设置其开机时候自动运行:
[root@mailroot]#chkconfig--level0123456mysqldon
4.3.
启动命令如下:
[root@maili386]#/etc/init.d/mysqldstart
4.4.
启动MySQL后,首先检查日志/var/log/messages有无错误信息,然后检查进程,应该有如下进程存在:
[root@mailroot]#pstree|grepmysqld
|-safe_mysqld---mysqld
接着检查端口,应该有如下端口打开:
[root@mailroot]#netstat-an|grepLISTEN
tcp 0 0127.0.0.1:
3306 0.0.0.0:
* LISTEN
MySQL安装配置好以后,创建如下SQL脚本mail.sql:
CREATEDATABASEmail;
GRANTALLONmail.*TOmail@localhost
IDENTIFIEDBY"
secret"
;
FLUSHPRIVILEGES;
USEmail;
CREATETABLEUSER(
IDint(10)unsignedNOTNULLauto_increment,
USERNAMEvarchar(128)NOTNULLdefault'
'
PASSWORDvarchar(40)NOTNULLdefault'
FORWARDvarchar(128)NOTNULLdefault'
DOMAINvarchar(64)NOTNULLdefault'
MAILvarchar(64)NOTNULLdefault'
FILTERvarchar(64)NOTNULLdefault'
OK'
PARTITIONvarchar(32)NOTNULLdefault'
default'
QUOTAint(11)NOTNULLdefault'
10485760'
STATUStinyint(4)NOTNULLdefault'
1'
PRIMARYKEY(ID),
UNIQUEKEYUSERNAME(USERNAME),
UNIQUEKEYMAIL(MAIL)
)TYPE=MyISAM;
INSERTINTOUSER(USERNAME,PASSWORD,FORWARD,DOMAIN,MAIL)
VALUES('
trueuser'
'
$1$pi.WVgBx$a3dUCzBnbY76jnZlqWQCQ/'
cngnu.org'
trueuser@cngnu.org'
),
('
virtualuser@cngnu.org'
virtualuser~cngnu.org'
);
[root@mailroot]#mysql<
mail.sql
在MySQL中创建邮件用户数据库,并添加两个测试邮箱:
∙非虚拟域邮箱“trueuser”,密码是“testpw”
∙虚拟域邮箱“virtualuser@cngnu.org”,密码是“testpw”
上面的mail数据库的USER表用来保存用户信息:
∙USERNAME和PASSWORD字段就是用户名和MD5-Crypt密码。
USERNAME不但作为认证的字段,而且是本地邮箱查找条件(见下面的Postfix的virtual.mysql)。
这里采用了加密密码是为了更好的安全性。
对于
o非虚拟域邮箱:
USERNAME字段是邮件的本地部分(“@”前面的部分)
o虚拟域邮箱:
USERNAME字段是邮件地址全称
邮箱的密码是“testpw”,加密后的(MD5-CRYPT)密文是“$1$pi.WVgBx$a3dUCzBnbY76jnZlqWQCQ/”(可以通过系统的passwd命令来添加一个用户,生成密码,然后从/etc/shadow中复制。
)
∙FORWARD字段默认是指向用户的“存储邮箱”名的(Cyrus-IMAP所管理的邮箱名称),即进行本地投递;
如果FORWARD字段是另外一个用户名或者邮件地址,则该邮件被转发到别的用户或其它邮件地址。
其存储邮箱与用户名相同
为了支持多个域,考虑到不同的域可能拥有相同的用户名(本地部分),所以使用邮件全称作为用户的登录名(POP/IMAP的登录名和SMTP认证的登录名),但是由于Cyrus-IMAP不直接支持虚拟域(虽然可以创建带“@”的邮箱,在Cyrus-IMAP的2.2.x版本支持虚拟域,但是目前该版本还是测试版),不能在邮件的本地部分包含“@”,所以实际的存储邮箱名把“@”替换为“~”。
(参见下面Cyrus-IMAP部分描述)
此外,由于Postfix令人吃惊的区分邮箱的大小写,所以通过这样的一个转发,正好可以消除大小写的区别。
∙DOMAIN字段用来快速找出某个域下存在的邮箱,仅为管理方便使用。
∙MAIL字段是邮件地址全称。
对于非虚拟域邮箱,它包含了本地部分外的域部分;
对于虚拟域邮箱,它和USERNAME字段一样。
一方面是为了管理方便使用,同时该字段还用来做全局过滤控制FILTER的查找条件(见FILTER字段及下面Postfix的filter.mysql)。
∙FILTER字段用于控制该邮箱是否接受服务器的全局邮件过滤。
该值设置为“OK”或为空表示对该邮箱不进行过滤;
设置为“DUNNO”表示对该邮箱进行Postfix中定于的全局过滤。
该值可以是任何合法的Postfix的access过滤规则。
∙PARTITION字段用于指明邮箱存储的Cyrus-IMAP邮件分区。
可以建立多个不同的邮件分区。
仅为了管理方便使用。
∙QUOTA字段指定邮箱的磁盘限额。
∙STATUS字段用来指示该用户是否有效,可以通过修改该值为0来临时禁止某个用户。
[root@mailsrc]#wget
注:
如果不能访问该网站取得pam_mysql,请自行使用代理服务器访问。
编译pam_mysql:
[root@mailsrc]#tar-zxfpam_mysql-0.5.tar.gz
[root@mailsrc]#cdpam_mysql
修改pam_mysql.c的源代码,去掉调试消息:
[root@mailpam_mysql]#vi+54pam_mysql.c
将如下一行:
#defineDEBUG
修改为:
/*#defineDEBUG*/
然后编译:
[root@mailpam_mysql]#make
[root@mailpam_mysql]#cppam_mysql.so/lib/security
有些情况下,这个编译会报错,但是如果编译能生成pam_mysql.so模块,还是可以用的。
创建/etc/pam.d/mail,它用来支持Cyrus-IMAP的imap认证、pop认证和Postfix的smtp认证:
[root@mailpam_mysql]#cd/etc/pam.d
[root@mailpam.d]#echoauthsufficientpam_mysql.souser=mailpasswd=secret\
>
host=localhostdb=mailtable=USERusercolumn=USERNAMEpasswdcolumn=PASSWORD\
crypt=1sqllog=0>
/etc/pam.d/mail
[root@mailpam.d]#echoaccountrequiredpam_mysql.souser=mailpasswd=secret\
[root@mailpam.d]#echoauthsufficientpam_unix_auth.so>
[root@mailpam.d]#echoaccountsufficientpam_unix_acct.so>
这里前面两行是指通过mysql数据库来认证用户,后面两行指是通过UNIX的基本方式认证用户(即系统用户)。
这里我们之所以保留UNIX系统认证模式,是因为我们下面要通过系统用户cyrus来管理cyrus-imap邮箱。
不过你也可以选择将这个管理帐号cyrus放入mysql认证数据库里面,只需要你在上面的数据库里面添加一个cyrus用户。
通过给上面的crypt赋予不同的值可以使用多种密码存储方式:
∙crypt=0:
表示使用明文来存储密码。
这样存储的好处是简单,但是不够安全。
∙crypt=1:
表示使用UNIX系统的DES加密密码方式来存储。
即通常的UNIX的/etc/passwd(老式系统加密口令存储在这里)或/etc/shadow(较为新的系统加密口令存放在这里)中存储的加密口令。
加密口令有两种,一种是普通的des加密的,也叫crypt(),这种密码是13位长,前面两个字符是加密种子;
还有一种是使用了MD5算法增强了的,也叫MD5crypt(),这种密码的加密种子是以$1$开头的12个字符,密码长度不定。
∙crypt=2:
表示使用mysql的SQL函数password()加密方式来存储。
∙crypt=3:
表示使用md5的散列方式来存储。
这种方式和MD5crypt()是不一样的。
一般如果从系统用户迁移到使用数据库的虚拟用户时,可以使用crypt=1方式,系统会自动辨别两种加密口令。
如果需要开发用户修改口令的功能时,C和Perl里面的crypt函数不能支持MD5crypt()口令,需要使用额外的编程或模块来支持。
做个符号链接/etc/pam.d/imap,它用来支持Cyrus-IMAP的imap认证:
[root@mailpam.d]#[-fimap]&
&
mvimapimap.orig
[root@mailpam.d]#ln-smailimap
同样创建/etc/pam.d/pop
,它用来支持Cyrus-IMAP的pop3认证:
[root@mailpam.d]#[-fpop]&
mvpoppop.orig
[root@mailpam.d]#ln-smailpop
同样创建/etc/pam.d/smtp
,它用来支持Postfix的smtpauth认证:
[root@mailpam.d]#[-fsmtp]&
mvsmtpsmtp.orig
[root@mailpam.d]#ln-smailsmtp
系统上可能已经存在了这些文件,将原来的改名备份或删除即可。
A
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 postfix 邮件系统