📄 1417.html
字号:
<style type="text/css">
<!--
p,li { font-size: 12px; margin-top: 4px; margin-bottom: 4px}
td { font-family: "Courier New", "Courier", "mono"; font-size: 12px; font-weight: bold}
.type {color: #FF0000;}
.style2 {color: #E63A00}
-->
</style></head>
<body bgcolor="#ffffff" leftmargin="20">
<h2 align="left"><font face="Arial, Helvetica, sans-serif">CNGNU Postfix</font>邮件系统系列指南之一</h2>
<h1 align="center"><font face="Arial, Helvetica, sans-serif"><font color="#ff0000">P</font>ostfix
+ <font color="#ff0000">C</font>yrus-IMAP + <font color="#ff0000">C</font>yrus-SASL
+ <font color="#ff0000">M</font>ySQL + <font color="#ff0000">I</font>MP</font><br>
完全指南</h1>
<hr noshade="noshade" size="1">
<p> </p>
<blockquote>
<p>作者:王兴宇 <a href="mailto:wxy@cngnu.org"><wxy@cngnu.org></a> </p>
<p>版本:0.71</p>
<p>版权:GPL</p>
<p>发布日期:2003-02-04</p>
<p> </p>
<h3>目录</h3>
<p><a href="#a.1">1. 概述</a></p>
<p><a href="#a.1.1">1.1. 目的</a></p>
<p><a href="#a.1.2">1.2. 更新历史</a></p>
<p><a href="#a.1.3">1.3. TODO</a></p>
<p><a href="#a.1.4">1.4. 鸣谢</a></p>
<p><a href="#a.2">2. 系统功能</a></p>
<p><a href="#a.3">3. 系统基本前提</a></p>
<p><a href="#a.4">4. 安装MySQL</a></p>
<p><a href="#a.4.1">4.1. 下载</a></p>
<p><a href="#a.4.2">4.2. 编译与安装</a></p>
<p><a href="#a.4.3">4.3. 运行</a></p>
<p><a href="#a.4.4">4.4. 测试</a></p>
<p><a href="#a.4.5">4.5. 建立数据库</a></p>
<p><a href="#a.5">5. 安装pam_mysql</a></p>
<p><a href="#a.5.1">5.1. 下载</a></p>
<p><a href="#a.5.2">5.2. 编译与安装</a></p>
<p><a href="#a.5.3">5.3. 配置</a></p>
<p><a href="#a.6">6. 配置Cyrus-SASL</a></p>
<p><a href="#a.6.1">6.1. </a><a href="#a.6.3">配置</a></p>
<p><a href="#a.6.2">6.2. 运行</a></p>
<p><a href="#a.7">7. 安装Postfix</a></p>
<p><a href="#a.7.1">7.1. 下载</a></p>
<p><a href="#a.7.2">7.2. 编译与安装</a></p>
<p><a href="#a.7.3">7.3. 配置</a></p>
<p><a href="#a.7.4">7.4. 运行</a></p>
<p><a href="#a.7.5">7.5. 测试</a></p>
<p><a href="#a.8">8. 安装Cyrus-IMAP</a></p>
<p><a href="#a.8.1">8.1. 下载</a></p>
<p><a href="#a.8.2">8.2. 编译与安装</a></p>
<p><a href="#a.8.3">8.3. 配置</a></p>
<p><a href="#a.8.4">8.4. 运行</a></p>
<p><a href="#a.8.5">8.5. 测试</a></p>
<p><a href="#a.9">9. 安装IMP</a></p>
<p><a href="#a.9.1">9.1. 下载</a></p>
<p><a href="#a.9.2">9.2. 配置Apache/PHP</a></p>
<p><a href="#a.9.3">9.3. 配置Horde</a></p>
<p><a href="#a.9.4">9.4. 配置Imp</a></p>
<p><a href="#a.9.5">9.5. 配置Turba</a></p>
<p><a href="#a.9.6">9.6. 测试IMP</a></p>
<p><a href="#a.10">10. 其它</a></p>
<p><a href="#a.10.1">10.1. 启动脚本</a></p>
<p><a href="#a.10.2">10.2. </a><a href="#a.10.3">整体测试</a></p>
<hr size="1">
<p> </p>
</blockquote>
<h1><a name="a.1" id="a.1"></a>1. 概述</h1>
<h2><a name="a.1.1"></a>1.1. 目的</h2>
<p> 本文试图介绍如何在一个Linux平台上安装一套功能完整的邮件系统。这里我们以Postfix做SMTP服务器、Cyrus-IMAP做
POP3/IMAP4服务器、通过Cyrus-SASL对存储在MySQL数据库中的用户进行验证和授权,并且使用IMP来提供一个完善的WEBMAIL
界面。</p>
<p> 这个邮件系统的设计目标是提供一个可扩充的、具备大多数功能的邮件系统。</p>
<p> 本文的最新版本可以在这里找到:<a href="javascript:if(confirm('http://www.cngnu.org/technology/Postfix_I.html \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?'))window.location='http://www.cngnu.org/technology/Postfix_I.html'" tppabs="http://www.cngnu.org/technology/Postfix_I.html">http://www.cngnu.org/technology/Postfix_I.html</a>。如果希望使用Courier-IMAP替代了Cyrus-IMAP做IMAP/POP3服务器,可以参阅本文的姊妹篇<a href="javascript:if(confirm('http://www.cngnu.org/technology/Postfix_II.html \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?'))window.location='http://www.cngnu.org/technology/Postfix_II.html'" tppabs="http://www.cngnu.org/technology/Postfix_II.html">http://www.cngnu.org/technology/Postfix_II.html</a>。</p>
<p> 有关本文所涉及的技术问题,请到<a href="javascript:if(confirm('http://anti-spam.org.cn/forums/index.php?showforum=6 \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?'))window.location='http://anti-spam.org.cn/forums/index.php?showforum=6'" tppabs="http://anti-spam.org.cn/forums/index.php?showforum=6">http://www.anti-spam.org.cn/forums/</a>的邮件技术版讨论,我会尽快回复的,请勿就技术问题给我发邮件。</p>
<p> 本文的版权遵循GPL,可以在不删除版权信息和注明修改的情况下任意传播。</p>
<h2><a name="a.1.2"></a>1.2. 更新历史</h2>
<ul>
<li>2002-05-21 第一次发布,版本0.20。</li>
<li>2002-08-13 修正一些错误,版本0.21。</li>
<li>2002-08-23 修正一些错误,版本0.22。</li>
<li>2002-09-12 在RedHat Linux Advance Server V2.1上进行了测试,修正了一些错误,版本0.30。</li>
<li>2002-12-12 修正了一些错误,添加了IMP部分的内容,版本0.31。</li>
<li>2003-01-30 修正了一些错误,添加了非明文密码部分的内容,版本0.32。</li>
<li>2003-02-05 修正了一些错误,版本0.33</li>
<li>2003-03-26 使用了SASL V2和Cyrus-IMAP 2,支持使用db4的新的Linux发行版,如RedHat 8.0和Mandrake
9.0,并以RedHat 8.0为示范平台。修正了一些错误,版本0.40。</li>
<li>2003-03-28 修正了一些错误,特别感谢bjchenxu,版本0.41。</li>
<li>2003-09-24 添加了虚拟域功能,修正了一些笔误,版本0.50。</li>
<li>2003-10-13 修正了虚拟域的错误,版本0.51。</li>
<li>2003-12-02 修正了部分错误,版本0.52。如果没有其它的输入错误问题,本文将不再更新。</li>
<li>2004-01-29
做了较大的改动,版本0.70。以AS3为示范平台。令人疯狂的是当我即将完成这次的修改时,居然因为DreamWeaver的一个脚本错误导致我一天一
夜的辛苦工作消失的干干净净。我哭~。本次的修改涉及SASL、MySQL和Cyrus-IMAP等各个部分,遵照最小修改的原则,凡是AS3中提供的部
件可用,我将不再重新编译,这可能对移植到其它平台或版本有较大的困难。</li>
<li>2004-02-04 修正了一些笔误。</li>
</ul>
<h2><a name="a.1.3"></a>1.3. TODO </h2>
<ul>
<li>增加邮件列表功能</li>
<li>增加SSL部分的内容</li>
<li>翻译:希望有能力的朋友可以翻译这篇文章为英文,这样国外的朋友也可以看到</li>
</ul>
<h2><a name="a.1.4"></a>1.4. 鸣谢</h2>
<p> 谢谢lesson.ward、Yunping Zhu、Temp、bjchenxu的指正。也感谢<a href="javascript:if(confirm('http://chinaunix.net/ \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?'))window.location='http://chinaunix.net/'" tppabs="http://chinaunix.net/">Chinaunix.net</a>和<a href="javascript:if(confirm('http://anti-spam.org.cn/ \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?'))window.location='http://anti-spam.org.cn/'" tppabs="http://anti-spam.org.cn/">anti-spam.org.cn</a>的各位朋友的关注和建议。</p>
<p> </p>
<p> 参考文档:<a href="javascript:if(confirm('http://www.delouw.ch/linux/Postfix-Cyrus-Web-cyradm-HOWTO/html/index.html \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?'))window.location='http://www.delouw.ch/linux/Postfix-Cyrus-Web-cyradm-HOWTO/html/index.html'" tppabs="http://www.delouw.ch/linux/Postfix-Cyrus-Web-cyradm-HOWTO/html/index.html">http://www.delouw.ch/linux/Postfix-Cyrus-Web-cyradm-HOWTO/html/index.html</a>。在这篇文章撰写之初,参考过该文章,目前该文章也在不断更新,大家也可以看看。</p>
<h1><a name="a.2"></a>2. 系统功能</h1>
<p> 系统逻辑结构:</p>
<pre><font face="Courier New, Courier, mono" size="2">
+---------------------------------------------------+
| |
| 25/25 25/25 110/993 143/995 80/443 |
| Incoming Outgoing POP3 IMAP WEB-MAIL |
| /\ /\ /\ /\ /\ |
| || || || || || |
| \/ \/ \/ \/ \/ |
+-------------------+---------------+---------------+
| Postfix | | IMP |
| | +---------------+
| | Cyrus-IMAP |
| +-----------+-------------------------------+
| | Cyrus-SASL |
| +-------------------------------------------+
| | saslauthd |
| +-------------------------------------------+
| | PAM |
| +-------------------------------------------+
| | pam_mysql |
+-------+-------------------------------------------+
| MySQL |
+---------------------------------------------------+
</font></pre>
<p> 整个系统对外的界面包括几个部分,用来发信的SMTP、用来收信的POP3和IMAP、以及一个WEB界面的邮件使用系统。这里没有提供WEB界面的管理工具,需要大家自行依据实际需要开发。如果需要商业应用,可以购买CEM产品(<a href="javascript:if(confirm('http://cngnu.net/products/cem/ \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?'))window.location='http://cngnu.net/products/cem/'" tppabs="http://cngnu.net/products/cem/">http://cngnu.net/products/cem/</a>),其中包括了完善的管理界面和优化的邮件服务器环境。</p>
<p> MySQL作为系统中存储数据的核心,它存储了用户的信息。这个信息不但用于POP3/IMAP和SMTP AUTH的认证需要,而且也为Postfix提供了本地接收者的列表和转发功能。</p>
<p> 认证流程比较繁琐。整个认证是通过Cyrus-SASL来做的,通过运行一个守护进程saslauthd来监听认证需求。saslauthd这里使用了pam认证方式通过pam_mysql插件对MySQL数据库进行查找。</p>
<p> 系统支持虚拟域用户和非虚拟域邮箱。</p>
<p> 为什么选择这些部件组成这套邮件系统呢?</p>
<p> 选择Postfix作为MTA,是因为它是一个非常优秀的MTA服务器,它不但性能卓越,对sendmail的兼容性好,支持和多种其它软件的隅合,而且本身就带有很强的反垃圾邮件功能。</p>
<p> 选择MySQL作为存储用户信息的部分,是因为一方面MySQL本身是一个轻量级的数据库,在处理少量数据时非常快速,而且通过关系型数据库可以更方便地管理用户信息和提供更多用户特性(如基本每用户的过滤控制),此外还消除了因为使用系统用户所带来的安全隐患。</p>
<p> 选择Cyrus-SASL作为认证机制,是因为它是一个标准的认证层,多数软件都支持它的认证。</p>
<p> 选择Cyrus-IMAP作为IMAP/POP3服务器,是因为它的IMAP/POP实现效率很高,要比Courier-IMAP的实现要高一些,虽然它因此而使用的Maildir/格式与标准的QMAIL定义的格式有所不同。</p>
<p> 这个系统将来可能的改进有几个方面:一是使用更高版本的Cyrus-SASL,直接支持对MySQL的查询认证,避免了使用saslauthd
=>pam=>pam_mysql这样罗嗦的环节;二是使用更高版本的Cyrus-IMAP,对虚拟域有更加直接的支持,不用像现在这样需要
做别名转发才能实现。</p>
<h1><a name="a.3"></a>3. 系统基本前提</h1>
<p> 本文以Linux系统为目标平台,支持多数的Linux平台如RedHat 7.x/8.x/9.x/AS2.1/AS3、Mandrake 8.x/9.x等,理论上也会支持其他的Linux发行版,甚至其他的UNIX系统。</p>
<p> 这里以RedHat Linux Advance Server Enterprise V 3.0 (以下简称AS3)为说明平台。我采用了最基本的AS3安装,只选择了“Web
Server”、“Dns Name Server”、“MySQL Database Server”、“Development Tools”和“Kernel
Development”等软件包组(“Core”和“Base”组是默认必选的软件包)。</p>
<p> 除此外,还需要额外安装以下RPM:</p>
<p> 1、php-mysql-4.3.2-8.ent.i386.rpm(在CD3)</p>
<h1><a name="a.4"></a>4. 安装MySQL</h1>
<h2><a name="a.4.1" id="a.4.1"></a>4.1. 下载</h2>
<p> AS3默认是只包含MySQL除了服务器程序外的部分的,所以需要从RPMFIND下载MySQL的源RPM重建(最好使用源码包,采用MySQL.com提供的RPM和BIN包都可能在其它使用mysql的部分编译时候出现错误)。</p>
<table border="0" width="100%" bgcolor="#ccffcc">
<tbody><tr>
<td>
<p>[root@mail root]# <span class="type">cd /usr/src</span></p>
<p>[root@mail src]# <span class="type">wget <a href="javascript:if(confirm('ftp://rpmfind.net/linux/redhat/enterprise/3/en/os/i386/SRPMS/mysql-3.23.58-1.src.rpm \n\nThis file was not retrieved by Teleport Pro, because it did not meet the project\'s file type specifications. \n\nDo you want to open it from the server?'))window.location='ftp://rpmfind.net/linux/redhat/enterprise/3/en/os/i386/SRPMS/mysql-3.23.58-1.src.rpm'" tppabs="ftp://rpmfind.net/linux/redhat/enterprise/3/en/os/i386/SRPMS/mysql-3.23.58-1.src.rpm">ftp://rpmfind.net/linux/redhat/enterprise/3/en/os/i386/SRPMS/mysql-3.23.58-1.src.rpm</a></span></p></td>
</tr>
</tbody></table>
<h2><a name="a.4.2" id="a.4.2"></a>4.2. 编译与安装</h2>
<table border="0" width="100%" bgcolor="#ccffcc">
<tbody><tr>
<td>
<p>[root@mail src]# <span class="type">rpmbuild --rebuild mysql-3.23.58-1.src.rpm </span></p>
<p>[root@mail src]# <span class="type">cd redhat/RPMS/i386</span></p>
<p>[root@mail i386]# <span class="type">rpm -ivh mysql-server-3.23.58-1.i386.rpm</span></p></td>
</tr>
</tbody></table>
<p> 为提高MySQL的安全性,使之只监听在本地打环端口,修改/etc/my.cnf:</p>
<table border="0" width="100%" bgcolor="#ccffcc">
<tbody><tr>
<td>
<p>[root@mail i386]# <span class="type">cd</span></p>
<p>[root@mail root]# <span class="type">vi /etc/my.cnf </span></p></td>
</tr>
</tbody></table>
<p> 在[mysqld]小节里面添加:</p>
<table border="0" width="100%" bgcolor="#ccffcc">
<tbody><tr>
<td bgcolor="#ffffcc">bind-address=127.0.0.1</td>
</tr>
</tbody></table>
<p> 并设置其开机时候自动运行:</p>
<table border="0" width="100%" bgcolor="#ccffcc">
<tbody><tr>
<td>
<p>[root@mail root]# <span class="type">chkconfig --level 0123456 mysqld
on </span></p></td>
</tr>
</tbody></table>
<p></p>
<h2><a name="a.4.3" id="a.4.3"></a>4.3. 运行</h2>
<p> 启动命令如下:</p>
<table border="0" width="100%" bgcolor="#ccffcc">
<tbody><tr>
<td> <p>[root@mail i386]# <span class="type">/etc/init.d/mysqld start</span></p></td>
</tr>
</tbody></table>
<h2><a name="a.4.4" id="a.4.4"></a>4.4. 测试</h2>
<p> 启动MySQL后,首先检查日志/var/log/messages有无错误信息,然后检查进程,应该有如下进程存在:</p>
<table border="0" width="100%" bgcolor="#ccffcc">
<tbody><tr>
<td> <p>[root@mail root]# <span class="type">pstree | grep mysqld</span></p>
<p> </p>
<p>|-safe_mysqld---mysqld</p>
<p> </p></td>
</tr>
</tbody></table>
<p> 接着检查端口,应该有如下端口打开:</p>
<table border="0" width="100%" bgcolor="#ccffcc">
<tbody><tr>
<td> <p>[root@mail root]#<font color="#ff0000"> </font><span class="type">netstat
-an | grep LISTEN</span></p>
<p> </p>
<p>tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN<br>
</p></td>
</tr>
</tbody></table>
<p> </p>
<h2><a name="a.4.1"></a>4.5. 建立数据库</h2>
<p> MySQL安装配置好以后,创建如下SQL脚本mail.sql:</p>
<table border="0" width="100%" bgcolor="#ccffcc">
<tbody><tr>
<td bgcolor="#ffffcc">
<p>CREATE DATABASE mail;</p>
<p>GRANT ALL ON mail.* TO mail@localhost</p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -