当前位置:Linux教程 - Mysql - email - Postfix+Cyrus-IMAP+Cyrus-SASL+MySQL+IMP

email - Postfix+Cyrus-IMAP+Cyrus-SASL+MySQL+IMP

Postfix+Cyrus-IMAP+Cyrus-SASL+MySQL+IMP
2004-04-23 15:18 pm
来自:Linux文档
现载:Www.8s8s.coM
地址:无名

1. 安装说明
这里以RedHat AS 3.0平台,安装AS3时选择Web Server、MySQL Database Server”、
Development Tools和Kernel Development软件组,安装完AS3后需要额外安装的有:
php-mysql-4.3.2-8.ent.i386.rpm和mysql-devel-3.23.58-1.i386.rpm,另外需要说明的是,我以
下的安装过程中使用了我预先建立好的安装包和配置文件。大家可以在我的ftp下载
ftp://test:[email protected]/postfix/ ,下载这个目录里所有的文件到你的/home/pub/目录下,这样大家就可以不用修改下文中的有关路径直接安装就可以了。
2.0. 配置MySQL
2.1. 安装MySQL
  # cd /home/pub
# rpm -ivh mysql-server-3.23.58-1.i386.rpm
修改/etc/my.cnf,使之只监听在本地打环端口:
# vi /etc/my.cnf
  在[mysqld]小节里面添加:
  bind-address=127.0.0.1
并设置其开机时候自动运行:
# chkconfig --level 35 mysqld on
2.2. 运行MySQL
  启动MySQL:
# /etc/init.d/mysqld start
设置MySQL的root用户密码:
# mysqladmin -u root password new_password
2.3. 测试MySQL
  启动MySQL后,检查MySQL的运行情况:
# pstree | grep mysqld
|-safe_mysqld---mysqld
  应该有如下端口打开:
# netstat -an | grep LISTEN
tcp  0  0 127.0.0.1:3306  0.0.0.0:*  LISTEN
2.4. 建立数据库
  # cd /home/pub
修改我建好的数据库脚本注意替换脚本中的域名为你自己的域名然后创用户建数据库:
# mysql --user=root --password=password < mail.sql
在这个过程中创建了用户数据库,确定了每个用户的邮箱为50M并添加了用户“test”,密码是“123456”
3.0. 安装pam_mysql
3.1. 编译与安装
  编译pam_mysql:
# cd /home/pub
# tar -zxf pam_mysql-0.5.tar.gz
# cd pam_mysql
  修改pam_mysql.c的源代码,去掉调试消息:
# vi +54 pam_mysql.c
  将如下一行:
#define DEBUG
  修改为:
/* #define DEBUG */
  然后编译:
# make
# cp pam_mysql.so /lib/security

3.2. 配置
  创建/etc/pam.d/mail,它用来支持Cyrus-IMAP的imap认证、pop认证和Postfix的smtp认证:
# cd /etc/pam.d
# echo auth sufficient pam_mysql.so user=mail passwd=secret host=localhost db=mail table=USER usercolumn=USERNAME passwdcolumn=PASSWORD crypt=1 sqllog=0 > /etc/pam.d/mail
# echo account required pam_mysql.so user=mail passwd=secret host=localhost db=mail table=USER usercolumn=USERNAME passwdcolumn=PASSWORD crypt=1 sqllog=0 >> /etc/pam.d/mail
# echo auth sufficient pam_unix_auth.so >> /etc/pam.d/mail
# echo account sufficient pam_unix_acct.so >> /etc/pam.d/mail
  
  做个符号链接/etc/pam.d/imap,它用来支持Cyrus-IMAP的imap认证:
# [ -f imap ] && mv imap imap.orig
# ln -s mail imap
  同样创建/etc/pam.d/pop ,它用来支持Cyrus-IMAP的pop3认证:
# [ -f pop ] && mv pop pop.orig
# ln -s mail pop
  同样创建/etc/pam.d/smtp ,它用来支持Postfix的smtp auth认证:
# [ -f smtp ] && mv smtp smtp.orig
# ln -s mail smtp
  系统上可能已经存在了这些文件,将原来的改名备份或删除即可。
4.0. 配置Cyrus-SASL
4.1. 配置
  AS3默认安装的Cyrus-SASL可以满足这套邮件系统的需要,一般不必重新编译。
设置Postfix使用SASL的saslauthd认证守护进程来支持smtp auth认证,并只打开了plain和login认证模块:
# cd
# echo pwcheck_method: saslauthd > /usr/lib/sasl2/smtpd.conf
# echo mech_list: plain login >> /usr/lib/sasl2/smtpd.conf
 配置saslauthd使用PAM认证方案:
# vi /etc/sysconfig/saslauthd
 内容如下:
MECH=pam
将saslauthd设置为自动运行:
# chkconfig --level 35 saslauthd on
4.2. 运行
  运行saslauthd守护进程:
# /etc/rc.d/init.d/saslauthd start
  
5.0. 安装Postfix
5.1. 编译与安装
  如果你的系统上原来有sendmail,先将其停止并将其文件改名:
# cd /home/pub
# /etc/init.d/sendmail stop
# chkconfig --level 35 sendmail off
# mv /usr/bin/newaliases /usr/bin/newaliases.orig
# mv /usr/bin/mailq /usr/bin/mailq.orig
# mv /usr/sbin/sendmail /usr/sbin/sendmail.orig

  然后添加两个组:postfix和maildrop和一个用户:postfix
# groupadd -g 400 postfix
# groupadd -g 401 postdrop
# useradd -u 400 -g 400 -c postfix -M -d/no/where -s/no/shell postfix
  这里的组和用户的ID是系统中未使用的ID。

  编译Postfix,并支持mysql和sasl:
# tar -xvzf postfix-2.0.16.tar.gz
# cd postfix-2.0.16
# make -f Makefile.init makefiles 'CCARGS=-DUSE_SASL_AUTH -DHAS_MYSQL -I/usr/include/mysql -I/usr/include/sasl' 'AUXLIBS=-L/usr/lib/mysql -L/usr/lib/sasl2 -lmysqlclient -lsasl2 -lz -lm'
# make install

  安装时,安装程序会提问一些问题,可以直接按回车采用默认值。
  给postfix用户做一个系统别名,并将超级用户的邮箱转发到一个普通用户。使用/etc/postfix/aliases别名数据库(把“nero.3322.org”改成你的域名):
# cd /etc/postfix
# echo 'root: [email protected]' >> /etc/postfix/aliases
  生成/etc/postfix/aliases别名数据库:
# postalias /etc/postfix/aliases
  生成/etc/postfix/virtual的DB库:
# postmap virtual
  
5.2. 配置
  修改/etc/postfix/master.cf中的关于cyrus的配置,(cyrus的命令行和以前有不兼容的地方,确保你的cyrus的参数如下使用了-r ${sender}参数):
修改/etc/postfix/master.cf的配置:
  使用已备份的文件:
# cp /home/pub/master.cf /etc/postfix/master.cf

 修改/etc/postfix/main.cf的配置:
修改我已建好的main.cf文件,改其中的nero.3322.org和3322.org为你自己的域主机名和域名,然后:
# cp /home/pub/main.cf /etc/postfix/main.cf
 
修改/etc/postfix/virtual.mysql的配置:
使用已建好的文件:
# cp /home/pub/virtual.mysql /etc/postfix/virtual.mysql

修改/etc/postfix/filter.mysql的配置:
使用已建好的文件:
# cp /home/pub/filter.mysql /etc/postfix/filter.mysql

5.3. 运行
  启动命令如下:
# /usr/sbin/postfix start
5.4. 测试Postfix
  启动Postfix后,首先检查日志/var/log/messages有无错误信息,然后检查进程,应该有如下进程存在:检查端口及进程:
# pstree |grep master
|-master-+-pickup
  接着检查端口,应该有如下端口打开:
# netstat -an |grep LISTEN
tcp  0  0 0.0.0.0:25  0.0.0.0:*  LISTEN
  再检测SMTP服务是否正常:
# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.nero.3322.org ESMTP Postfix
QUIT
221 Bye
Connection closed by foreign host.
6.0. 安装Cyrus-IMAP
6.1. 编译与安装
  在RedHat系列的Linux中,其Kerberos的头文件不在标准的地方,所以需要在编译配置前用env命令指定。此外取消对ucdsnmp的支持:
# cd /home/pub
# tar -zxf cyrus-imapd-2.1.16.tar.gz
# cd cyrus-imapd-2.1.16
# env CPPFLAGS=-I/usr/kerberos/include ./configure --with-cyrus-prefix=/usr/cyrus --with-sasl=/usr/lib/sasl2 --with-auth=unix --without-ucdsnmp --with-krb=/usr/kerberos
# make depend
# make all CFLAGS=-O
# make install
  如果编译时提示没有找到com_err.h,请复制当前目录的et目录下面的com_err.h到/usr/include:
# cp et/com_err.h /usr/include

  Cyrus-IMAP的安装脚本有问题,cyradm(现在使用的是Perl版本,原来的TCL版本不再支持)所需要的perl模块被安装到一些不在Perl的标准@INC的目录里,需要手工安装。
# cd perl/imap
# perl Makefile.PL
# make install
6.2. 配置
  创建主配置文件/etc/cyrus.conf:
# cd /home/pub/cyrus-imapd-2.1.16
# cp master/conf/small.conf /etc/cyrus.conf
  添加cyrus-imap的管理账号cyrus,并设置密码为“cyrus”(实际应用中可以使用更加复杂的密码),但是没有指定有效的SHELL,以防止使用它来登录:
# useradd -g mail -M -s/no/shell -d/var/imap cyrus
# passwd cyrus
Changing password for user cyrus
New password: ******
BAD PASSWORD: it it too short
Retype new password: ******
passwd: all authentocation tokens updated successfully
这里要记住你设的cyrus的密码,在以后添加用户时有用。
  创建IMAP配置文件/etc/imapd.conf,管理员是cyrus:
使用已建好的文件:
# cp /home/pub/imapd.conf /etc/imapd.conf

  建立Cyrus-IMAP服务器的目录结构:
# mkdir -p /var/imap/sieve
# mkdir /var/spool/imap
# chown -R cyrus:mail /var/imap
# chown -R cyrus:mail /var/spool/imap
# su -s/bin/bash cyrus
$ tools/mkimap
$ exit
  这里tools/mkimap这个实用程序在cyrus-imap的源程序目录里面。

  创建日志:
# echo local6.debug /var/log/imapd.log >> /etc/syslog.conf
# echo auth.debug /var/log/auth.log >> /etc/syslog.conf
# /etc/rc.d/init.d/syslog restart
  设置邮件限额:
# chattr -R +S /var/imap/user
# chattr -R +S /var/imap/quota
# chattr -R +S /var/spool/imap

  由于Cyrus-IMAP的主控进程和Postfix的主控进程名字一样,容易混淆而且不方便控制,所以将Cyrus-IMAP服务器的主控进程做个别名连接:cyrusd。
# cd /usr/cyrus/bin
# ln -s master cyrusd
6.3.创建用户邮箱
# cyradm --user cyrus localhost
IMAP Password:******
nero.3322.org> cm user/test
nero.3322.org> sq user/test STORAGE 52485760
nero.3322.org> lm
user/INBOX (HasNoChildren)
user/test (HasNoChildren)
nero.3322.org> quit

6.4. 删除用户邮箱
# cyradm --user cyrus localhost
IMAP Password: ******
nero.3322.org> sam user/username cyrus cd
nero.3322.org> dm user/username
nero.3322.org> quit
# rm –rf username

7.0. 配置Apache与PHP
  IMP对PHP的环境要求较高。所以通常需要升级PHP包,并安装由Horde定制后的PEAR包。
  修改/etc/php.ini,将register_globals功能打开。
register_globals = On
  修改/etc/httpd/conf/httpd.conf,添加如下内容:
AddType application/x-httpd-php .php
并且在DirectoryIndex中加入index.php
安装PEAR包,在AS3中,它位于/usr/share/pear下:
# cd /home/pub
# tar zxf pear-1.1.tar.gz
# cd /usr/share
# cp -Rf /home/pub/pear/* pear
  最后重新启动Apache:
# /etc/rc.d/init.d/httpd restart
7.1. 安装配置Horde、IMP和Turba:
  安装Horde、IMP和Turba的集合包:
把/home/pub/horde.tar.gz解压到/var/www/html/目录中
# tar –zvxf horde.tar.gz –C /var/www/html
# cd /var/www/html/horde/scripts/db
改掉mysql_create.sql中horde的默认密码。
# mysql --user=root --password=password < mysql_create.sql
  
最后在浏览器中访问如下URL测试Horde需要的环境是否满足:
http://nero.3322.org/horde/test.php
  如果发现有红色的提示,可能需要修改你的PHP的安装和配置,然后再重新测试。
  
7.2. 配置Turba
# cd /var/www/html/horde/turba/config
# vi sources.php
  在146行添上你设的horde的密码
最后,添加turba数据库表:
# cd ../scripts/drivers
# mysql --user=root --password=password horde < turba.sql
7.3. 配置IMP
  修改/var/www/html/horde/imp/config/servers.php中的域名部分
最后在浏览器中访问如下URL:
http://nero.3322.org/horde/
  输入用户名test和密码123456登录
7.4. 启动脚本
  可以编写一个启动脚本/etc/rc.d/init.d/mailsys来启动这些进程,这样就不需要单独启动postfix和cyrusd了:
# cp /home/pub/mailsys /etc/rc.d/init.d/mailsys
# chmod 755 /etc/rc.d/init.d/mailsys
# chkconfig --level 35 mailsys on

8.0. 添加和删除用户
8.1. 添加用户数据库脚本:
USE mail;
INSERT INTO USER (USERNAME,PASSWORD,FORWARD,DOMAIN,MAIL)
VALUES ('user','$1$hmX8KLab$uLC0tV0WJA$6WT2jS4ty3Yg0',
'user','nero.3322.org','[email protected]');

8.2. 删除用户数据库脚本:

USE mail;
DELETE FROM USER
WHERE USERNAME = 'user';

8.3. 打开防火墙的25和110端口
可参考:http://bbs.chinaunix.net/forum/4/20040228/269510.html

8.4. 建立动态域名解析
可参考:http://bbs.chinaunix.net/forum/4/20040228/269510.html

8.5. 作者注
本文参考了《Postfix+Cyrus-IMAP+Cyrus-SASL+MySQL+IMP》连接如下:
http://www.cngnu.org/technology/Postfix_I.html

8.6. 服务器事例
http://nero.3322.org/horde/ test:123456