2009年4月7日星期二

CentOS 5.1下 postfix + extmail + dovecot + maildrop 最新版安装笔记

CentOS 5.1下 postfix + extmail + dovecot + maildrop 最新版安装笔记

本文最初发表于 http://hi.baidu.com/delphiss/blog/item/38571c94f7a7d50e7af48052.html
转载请注明出处
作者:wdy

安装环境是 CentOS 5.1,分区的时候 对 /var/spool/postfix 和 /var/vmail 进行了单独分区。

/var/spool/postfix 是postfix存储队列的地方, /var/vmail 是用来存储虚拟账号邮件的。

CentOS提供了很方便的yum在线安装,我的基本原则是非重要、对版本不敏感的模块尽量用yum安装,邮件系统主要模块则用源码编译安装。

首先用yum安装的模块有: mysql mysql-server mysql-devel db4-devel openssl gcc libxml2 libxml2-devel gcc-c++

几个模块都需要用到PCRE, 前面说的 gcc-c++ 是安装PCRE必须的。
下载安装 RCRE:
ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-7.8.tar.gz

先说明一下几个模块的搭配。

MTA 用的是 postfix的最新版本 postfix-2.5.5。

web模块是最先需要确定的,因为它决定了mysql表结构,这里选用国产的extmail,其他的根据extmail的需要倒推来确定。

webmail 使用 extmail-1.0.5 ,web管理模块用 extman-0.2.5

最新版本的extmail对maildrop的自动回复、转发等提供了很好的支持,所以MDA采用最流行的maildrop(2.0.4 )

这里面简单说一下为什么要用maildrop。

对虚拟用户投递的支持,postfix自带了一个投递代理(MDA):virtual

virtual投递代理在 master.cf 里描述为:
virtual unix - n n - - virtual

如果我们在main.cf 里 设置 virtual_transport = virtual ,就表示对于包含在 virtual_mailbox_domains 域名里的邮件,都使用virtual进行投递。

postfix自带的virtual只提供了最基本的QUOTA功能,如果想使用更复杂的功能,如自动转发,自动回复,邮件自定义过滤等,就需要换成更高级的MDA。

当然可选择的MDA有很多种,比如 procmail, maildrop 等。我这里选用maildrop,为啥?大家都用这个。。。

用户信息存储方式也有很多可选的,比如mysql,ldap等。这里选mysql,原因是各个模块,包括extmail等对这个支持最好最方便最简单。

maildrop 在投递邮件的时候,需要确定一些数据,比如收件用户的Maildir的路径,保存邮件用的uid,gid,邮箱容量等,这些数据需要maildrop的同门师兄 courier-authlib 来提供,所以要先吧courier-authlib装好。

下面要说的是SMTP 的 SASL认证(这个说来话长,有空补上)。postfix的模块化设计在这里也体现出比qmail高明的地方。

postfix 2.3 以后sasl支持三种模块:
Cyrus SASL version 1
Cyrus SASL version 2
Dovecot protocol version 1

网上大部分的文章都是讲用 Cyrus SASL 2(并用Cyrus IMAP 提供POP3/IMAP服务),本文采用后起新秀 Dovecot 做为 sasl模块,Dovecot同时提供 POP3/IMAP 服务。

Dovecot使用最新的dovecot-1.1.4 。

开始安装!

下载 postfix-2.5.5.tar.gz

postfix安装的是需要指定几个专门的用户和组,先创建

#groupadd -g 2001 postfix
#useradd -g postfix -u 1001 -s /sbin/nologin -M postfix
#groupadd -g 2002 postdrop
#useradd -g postdrop -u 2002 -s /bin/false -M postdrop

编译
#make makefiles CCARGS='-DUSE_SASL_AUTH -DDEF_SERVER_SASL_TYPE=\"dovecot\" \
-DHAS_PCRE -DHAS_MYSQL \
-I/usr/include/ -I/usr/local/include -I/usr/include/mysql/' \
AUXLIBS='-L/usr/local/lib -L/usr/lib/mysql -lmysqlclient -lpcre'
#make
#make install

make install的提问全部回车默认。
注意参数
-DUSE_SASL_AUTH -DDEF_SERVER_SASL_TYPE=\"dovecot\"
表示启用SASL身份认证,并默认使用dovecot。
mysql的几个路径可以根据实际情况做修改,我这里的目录都是yum默认安装的。


先导入mysql表结构和数据。

下载extman-0.2.5.tar.gz
解开后进入 docs目录


建库建表:
#mysql -u root -p < extmail.sql
(注意extmail.sql里配置的数据库,用户名,口令都是extmail)

导入初始数据:
#mysql -u root -p < init.sql
(先吧 init.sql 文件里的 extmail.org 改成你自己的域名)

把目录下 mysql_*.cf 全部拷贝至 /etc/postfix
# cp mysql_*.cf /etc/postfix/

下载 dovecot-1.1.4.tar.gz

#./configure --prefix=/usr/local/dovecot --sysconfdir=/etc/dovecot --with-sql --with-sql-drivers --with-mysql --with-ssl=openssl
#make
#make install

注:dovecot的安装参考了javaeye unixboy的文章,略有改动

配置dovecot.conf
#cd /etc/dovecot
#cp dovecot-example.conf dovecot.conf
#vi dovecot.conf

[Copy to clipboard] [ - ]CODE:
base_dir=/var/run/dovecot
protocols=imap imaps pop3 pop3s
listen=*
disable_plaintext_auth = no
ssl_disable = yes
mail_location = maildir:/var/vmail/%d/%n/Maildir
pop3_uidl_format=%08Xu%08Xv

auth default {
...
mechanisms = plain login digest-md5 cram-md5

# 去掉注释
passdb sql {
args = /etc/dovecot/dovecot-sql.conf
}
...
# 去掉注释
userdb sql {
args = /etc/dovecot/dovecot-sql.conf
}
...
socket listen {
...
client {
path = /var/spool/postfix/private/auth
mode = 0660
user = postfix
group = postfix
}
}
}
配置dovecot-sql.conf
#cp dovecot-sql-example.conf dovecot-sql.conf
#vi dovecot-sql.conf

[Copy to clipboard] [ - ]CODE:
driver = mysql
connect = host=localhost dbname=extmail user=extmail password=extmail
default_pass_scheme = MD5-CRYPT

password_query = SELECT username AS user, password AS password \
FROM mailbox WHERE username = '%u' AND active = '1'

user_query = \
SELECT maildir as home,2001 as uid ,2001 as gid \
FROM mailbox WHERE username='%u' and active='1'
创建符号链接
#ln -s /usr/local/dovecot/sbin/dovecot /usr/bin/dovecot

继续配置 postfix

#mv /etc/aliases /etc/aliases.old
#ln -s /etc/postfix/aliases /etc/aliases
#/usr/bin/newaliases

# vi main.cf

[Copy to clipboard] [ - ]CODE:
myhostname = mail.abc.com
mydomain = abc.com
myorigin = $mydomain
mydestination = $myhostname localhost localhost.$mydomain
mynetworks = 127.0.0.0/8
inet_interfaces = all
home_mailbox = Maildir/

sendmail_path = /usr/sbin/sendmail
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/local/man
sample_directory = /etc/postfix

#=====================Vritual Mailbox settings=========================
virtual_mailbox_base = /var/vmail/
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_alias_domains =
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_uid_maps = static:2001
virtual_gid_maps = static:2001
virtual_transport = virtual

#====================QUOTA========================
message_size_limit = 52428800
mailbox_size_limit = 209715200
virtual_mailbox_limit = 209715200
virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_overquota_bounce = yes

#====================SASL ESMTP Authenticat=================
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
#smtpd_sasl_path 注意这个是dovecot的sasl路径,与 dovecot.conf 里的对应
smtpd_sasl_path = private/auth
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_mynetworks,
permit_sasl_authenticated,
reject_invalid_hostname,
reject_non_fqdn_hostname,
reject_unknown_sender_domain,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_recipient_domain,
reject_unauth_pipelining,
reject_unauth_destination
smtpd_sasl_local_domain =
smtpd_sasl_security_options = noanonymous
smtpd_banner=$myhostname ESMTP


readme_directory = no
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
queue_directory = /var/spool/postfix
mail_owner = postfix
data_directory = /var/lib/postfix
启动服务
dovecot
postfix start

如果出错,看看 /var/log/maillog

未完待续...高清播放机

没有评论: