Postfix+Cyrus-IMAP + Cyrus-SASL + MySQL + IMP 配置指南

2023-10-31

CNGNU Postfix邮件系统系列指南之一

Postfix + Cyrus-IMAP + Cyrus-SASL + MySQL + IMP
完全指南


 

作者:王兴宇 <wxy@cngnu.org>

版本:0.71

版权:GPL

发布日期:2003-02-04

 

目录

1.  概述

1.1.  目的

1.2.  更新历史

1.3.  TODO

1.4.  鸣谢

2.  系统功能

3.  系统基本前提

4.  安装MySQL

4.1. 下载

4.2. 编译与安装

4.3. 运行

4.4. 测试

4.5.  建立数据库

5.  安装pam_mysql

5.1.  下载

5.2.  编译与安装

5.3.  配置

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.  整体测试


 

1.  概述

1.1.  目的

本文试图介绍如何在一个Linux平台上安装一套功能完整的邮件系统。这里我们以Postfix做SMTP服务器、Cyrus-IMAP做POP3/IMAP4服务器、通过Cyrus-SASL对存储在MySQL数据库中的用户进行验证和授权,并且使用IMP来提供一个完善的WEBMAIL界面。

这个邮件系统的设计目标是提供一个可扩充的、具备大多数功能的邮件系统。

本文的最新版本可以在这里找到:http://www.cngnu.org/technology/Postfix_I.html。如果希望使用Courier-IMAP替代了Cyrus-IMAP做IMAP/POP3服务器,可以参阅本文的姊妹篇http://www.cngnu.org/technology/Postfix_II.html

有关本文所涉及的技术问题,请到http://www.anti-spam.org.cn/forums/的邮件技术版讨论,我会尽快回复的,请勿就技术问题给我发邮件。

本文的版权遵循GPL,可以在不删除版权信息和注明修改的情况下任意传播。

1.2.  更新历史

  • 2002-05-21 第一次发布,版本0.20。
  • 2002-08-13 修正一些错误,版本0.21。
  • 2002-08-23 修正一些错误,版本0.22。
  • 2002-09-12 在RedHat Linux Advance Server V2.1上进行了测试,修正了一些错误,版本0.30。
  • 2002-12-12 修正了一些错误,添加了IMP部分的内容,版本0.31。
  • 2003-01-30 修正了一些错误,添加了非明文密码部分的内容,版本0.32。
  • 2003-02-05 修正了一些错误,版本0.33
  • 2003-03-26 使用了SASL V2和Cyrus-IMAP 2,支持使用db4的新的Linux发行版,如RedHat 8.0和Mandrake 9.0,并以RedHat 8.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 修正了一些笔误。

1.3.  TODO

  • 增加邮件列表功能
  • 增加SSL部分的内容
  • 翻译:希望有能力的朋友可以翻译这篇文章为英文,这样国外的朋友也可以看到

1.4.  鸣谢

谢谢lesson.ward、Yunping Zhu、Temp、bjchenxu的指正。也感谢Chinaunix.netanti-spam.org.cn的各位朋友的关注和建议。

 

参考文档:http://www.delouw.ch/linux/Postfix-Cyrus-Web-cyradm-HOWTO/html/index.html。在这篇文章撰写之初,参考过该文章,目前该文章也在不断更新,大家也可以看看。

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                        |
+---------------------------------------------------+

整个系统对外的界面包括几个部分,用来发信的SMTP、用来收信的POP3和IMAP、以及一个WEB界面的邮件使用系统。这里没有提供WEB界面的管理工具,需要大家自行依据实际需要开发。如果需要商业应用,可以购买CEM产品(http://cngnu.net/products/cem/),其中包括了完善的管理界面和优化的邮件服务器环境。

MySQL作为系统中存储数据的核心,它存储了用户的信息。这个信息不但用于POP3/IMAP和SMTP AUTH的认证需要,而且也为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,对虚拟域有更加直接的支持,不用像现在这样需要做别名转发才能实现。

3.  系统基本前提

本文以Linux系统为目标平台,支持多数的Linux平台如RedHat 7.x/8.x/9.x/AS2.1/AS3、Mandrake 8.x/9.x等,理论上也会支持其他的Linux发行版,甚至其他的UNIX系统。

这里以RedHat Linux Advance Server Enterprise V 3.0 (以下简称AS3)为说明平台。我采用了最基本的AS3安装,只选择了“Web Server”、“Dns Name Server”、“MySQL Database Server”、“Development Tools”和“Kernel Development”等软件包组(“Core”和“Base”组是默认必选的软件包)。

  除此外,还需要额外安装以下RPM:

  1、php-mysql-4.3.2-8.ent.i386.rpm(在CD3)

4.  安装MySQL

4.1.  下载

  AS3默认是只包含MySQL除了服务器程序外的部分的,所以需要从RPMFIND下载MySQL的源RPM重建(最好使用源码包,采用MySQL.com提供的RPM和BIN包都可能在其它使用mysql的部分编译时候出现错误)。

[root@mail root]# cd /usr/src

[root@mail src]# wget ftp://rpmfind.net/linux/redhat/enterprise/3/en/os/i386/SRPMS/mysql-3.23.58-1.src.rpm

4.2.  编译与安装

[root@mail src]# rpmbuild --rebuild mysql-3.23.58-1.src.rpm

[root@mail src]# cd redhat/RPMS/i386

[root@mail i386]# rpm -ivh mysql-server-3.23.58-1.i386.rpm

  为提高MySQL的安全性,使之只监听在本地打环端口,修改/etc/my.cnf:

[root@mail i386]# cd

[root@mail root]# vi /etc/my.cnf

  在[mysqld]小节里面添加:

bind-address=127.0.0.1

  并设置其开机时候自动运行:

[root@mail root]# chkconfig --level 0123456 mysqld on

4.3.  运行

启动命令如下:

[root@mail i386]# /etc/init.d/mysqld start

4.4.  测试

启动MySQL后,首先检查日志/var/log/messages有无错误信息,然后检查进程,应该有如下进程存在:

[root@mail root]# pstree | grep mysqld

 

|-safe_mysqld---mysqld

 

接着检查端口,应该有如下端口打开:

[root@mail root]# netstat -an | grep LISTEN

 

tcp00 127.0.0.1:33060.0.0.0:*LISTEN

 

4.5.  建立数据库

MySQL安装配置好以后,创建如下SQL脚本mail.sql:

CREATE DATABASE mail;

GRANT ALL ON mail.* TO mail@localhost

IDENTIFIED BY "secret";

FLUSH PRIVILEGES;

 

USE mail;

CREATE TABLE USER (
ID int(10) unsigned NOT NULL auto_increment,
USERNAME varchar(128) NOT NULL default '',
PASSWORD varchar(40) NOT NULL default '',
FORWARD varchar(128) NOT NULL default '',
DOMAIN varchar(64) NOT NULL default '',
MAIL varchar(64) NOT NULL default '',
FILTER varchar(64) NOT NULL default 'OK',
PARTITION varchar(32) NOT NULL default 'default',
QUOTA int(11) NOT NULL default '10485760',
STATUS tinyint(4) NOT NULL default '1',
PRIMARY KEY (ID),
UNIQUE KEY USERNAME (USERNAME),
UNIQUE KEY MAIL (MAIL)
) TYPE=MyISAM;

 

INSERT INTO USER (USERNAME,PASSWORD,FORWARD,DOMAIN,MAIL)

VALUES ('trueuser','$1$pi.WVgBx$a3dUCzBnbY76jnZlqWQCQ/',

'trueuser','cngnu.org','trueuser@cngnu.org'),
('virtualuser@cngnu.org','$1$pi.WVgBx$a3dUCzBnbY76jnZlqWQCQ/',

'virtualuser~cngnu.org','cngnu

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Postfix+Cyrus-IMAP + Cyrus-SASL + MySQL + IMP 配置指南 的相关文章

随机推荐