QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2499|回复: 0

如何在MGC上构架邮件服务器 Postfix + SASL2 + Courier IMAP + Maildrop + PostgreSQL

[复制链接]
发表于 2008-2-21 13:21:26 | 显示全部楼层 |阅读模式
可能有很多人熟悉这篇文章,作者:张招雄 最后修改时间: 2005年10月26日 17:57

2008年2月21日haulm重新修订就对了,不过为了保留张招雄文章的精辟的地方,一些安装的路径就不修改了,请勿完全照抄教程的编译参数和路径,我也在准备着手把教程转换成SRPM软件包。

首先安装软件包:

一.编译并安装PostgreSQL

1.下载软件:
创建存放软件的目录:
mkdir /backup/software (可以存放在任何自己想存放的目录)
ftp://ftp.postgresql.org/pub/source/下载最新稳定版的源代码,放到/backup/software。
本文中下载的是ftp://ftp.postgresql.org/pub/sou ... resql-8.0.3.tar.bz2

2.解压软件:
tar -jxvf postgresql-8.0.3.tar.bz2

3.进入源代码目录:
cd postgresql-8.0.3

4.配置编译选项:
./configure --prefix=/mnt/software/pgsql

--prefix=/mnt/software/pgsql:将所有文件安装到/mnt/software/pgsql目录下
如果你需要其它选项,请使用./configure --help查看或参看文档http://www.postgresql.org/docs/8 ... tall-procedure.html

5.编译:
gmake

6.安装:
gmake install

7.创建PostgreSQL的运行用户
adduser postgres

8.创建数据库目录:
mkdir -p /mnt/database/pgsql_data

9.将数据库目录的拥有者改为PostgreSQL的运行用户
chown postgres /mnt/database/pgsql_data

10.切换到PostgreSQL的运行用户身份:
su - postgres

11.初始化数据库:
/mnt/software/pgsql/bin/initdb -D /mnt/database/pgsql_data -E UTF8 --locale=C

12.设置共享库(Shared Libraries)
/sbin/ldconfig /mnt/software/pgsql/lib
或者:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/software/pgsql/lib

13.设置环境变量:
如果要使用本地的客户端工具,并且不想每次都输入完整路径,就需要设置PATH变量。
export PATH=$PATH:/mnt/software/pgsql/bin

14.启动数据库服务:
/mnt/software/pgsql/bin/postmaster -D /mnt/database/pgsql_data > logfile 2>&1 &
或者:
/mnt/software/pgsql/bin/pg_ctl -D /mnt/database/pgsql_data -l logfile start
如果要通过远程网络访问数据库,加上 -i选项,例如:
/mnt/software/pgsql/bin/pg_ctl -i -D /mnt/database/pgsql_data -l logfile start

15.测试:
创建一个数据库test
/mnt/software/pgsql/bin/createdb test
使用数据库test:
/mnt/software/pgsql/bin/psql test

16.启动脚本(使系统启动时自动启动PostgreSQL数据库服务):
在Linux系统下:
cp /backup/software/postgresql-8.0.3/contrib/start-scripts/linux /etc/init.d/postgresql
编辑文件件/etc/init.d/postgresql,修改prefix和PGDATA参数,修改如下:
prefix=/mnt/software/pgsql
PGDATA="/mnt/database/pgsql_data"
如果要通过远程网络访问数据库,同时修改start、stop、reload函数,修改如下:

start)
$ECHO_N "Starting PostgreSQL: "$ECHO_C
su - $PGUSER -c "$DAEMON -i -D '$PGDATA' &" >>$PGLOG 2>&1
echo "ok"
;;
stop)
echo -n "Stopping PostgreSQL: "
su - $PGUSER -c "$PGCTL stop -D '$PGDATA' -s -m fast"
echo "ok"
;;
restart)
echo -n "Restarting PostgreSQL: "
su - $PGUSER -c "$PGCTL stop -D '$PGDATA' -s -m fast -w"
su - $PGUSER -c "$DAEMON -i -D '$PGDATA' &" >>$PGLOG 2>&1
echo "ok"
;;

修改权限:
chmod a+x /etc/init.d/postgresql

chkconfig --add postgresql

chkconfig --level 35 postgresql on

17. 修改/mnt/database/pgsql_data/postgresql.conf ,去掉监听本地服务的#注释

listen_addresses = 'localhost'

修改 pg_hba.conf 中的验证方式(trust、md5等)

local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5

二.编译并安装Openssl

三.安装并编译 Cyrus SASL v2

1.下载软件:
创建存放软件的目录:
mkdir /backup/software (可以存放在任何自己想存放的目录)
http://asg.web.cmu.edu/cyrus/download/下载最新稳定版的源代码,放到/backup/software。

2.解压软件:
tar -zxvf cyrus-sasl-2.1.21

3.进入源代码目录:
cd cyrus-sasl-2.1.21

4.配置编译选项:

设置编译时PostgreSQL的头文件所在目录:

export CPPFLAGS="-I/mnt/software/pgsql/include"

./configure --prefix=/usr --enable-plain --enable-login --enable-sql --disable-otp --with-pgsql=/mnt/software/pgsql/lib --without-pam --without-saslauthd --without-pwcheck --with-dblib=berkeley --with-openssl --with-plugindir=/usr/lib/sasl2 --with-authdaemon

编译SASLv2的各个选项简要说明:

--prefix=/mnt/software/sasl2 #软件安装目录
--enable-plain # 开启PLAIN认证(明码认证)
--enable-login # 开启LOGIN认证(登陆认证)
--enable-sql # 允许使用SQL插件
--disable-otp # 关闭 OTP 认证
--with-pgsql=/mnt/software/pgsql/lib # 指定PostgreSQL的库文件所在目录
--without-pam --without-saslauthd --without-pwcheck # 禁用pam saslauthd pwcheck 功能
--with-dblib=berkeley # 使用berkeley DB库
--with-openssl=/mnt/software/openssl #指定openssl所在的目录(如果不需要支持TSL,可以不用此项。)
--with-plugindir=/mnt/software/sasl2/lib/sasl2 #指定SASL2插件文件及配置文件所在目录
--with-authdaemon #支持authdamemon功能(由于postfix的smtp认证使用SQL插件时,SQL数据库内存储的邮箱密码只能使用明文密码,改用 authdaemon认证方式可以存储MD5加密后的密码,所以我使用了authdamemon认证,该认证由courier-authlib提供。)

5.编译:
make

6.安装:
make install

四.安装并编译 postfix

1.下载软件:
创建存放软件的目录:
mkdir /backup/software (可以存放在任何自己想存放的目录)
ftp://postfix.linuxaid.com.cn/pub/postfix/index.html下载最新稳定版的源代码,放到/backup/software。
本文中下载的是ftp://postfix.linuxaid.com.cn/pu ... ostfix-2.2.5.tar.gz

2.解压软件:
tar -zxvf postfix-2.2.5

3.进入源代码目录:
cd postfix-2.2.5

4.创建mail_owner用户
groupadd postdrop -g 1002
useradd postfix -u 1001

5.配置编译选项参考:

make -f Makefile.init makefiles 'CCARGS=-DHAS_PGSQL -I/usr/include/pgsql -DUSE_CYRUS_SASL -DUSE_SASL_AUTH -I/usr/include/sasl' 'AUXLIBS=-L/usr/lib/sasl2 -lsasl2 -L/usr/lib/pgsql -lpq'

-DHAS_PGSQL #支持PostgreSQL数据库

-DUSE_SASL_AUTH #支持SASL认证

6. 保存(备份)已经存在的sendmail命令:
# /etc/init.d/sendmail stop
# mv /usr/sbin/sendmail /usr/sbin/sendmail.OFF
# mv /usr/bin/newaliases /usr/bin/newaliases.OFF
# mv /usr/bin/mailq /usr/bin/mailq.OFF
# chmod 755 /usr/sbin/sendmail.OFF /usr/bin/newaliases.OFF /usr/bin/mailq.OFF

7.安装:
make install

install_root: [/]
tempdir: [/backup/postfix-2.2.5]
config_directory: [/etc/postfix]
daemon_directory: [/usr/libexec/postfix]
command_directory: [/usr/sbin]
queue_directory: [/var/spool/postfix]
sendmail_path: [/usr/sbin/sendmail]
newaliases_path: [/usr/bin/newaliases]
mailq_path: [/usr/bin/mailq]
mail_owner: [postfix]
setgid_group: [postdrop]
html_directory: [no] /var/web/clusting/postfix/docs
manpage_directory: [/usr/local/man]
readme_directory: [no]

测试postfix是否已经使用sasl2
ldd ./bin/postconf
如果正确,应该有如下一行:
libsasl2.so.2 => /mnt/software/sasl2/lib/libsasl2.so.2
五.安装Courier authentication library


1.下载软件:
创建存放软件的目录:
mkdir /backup/software (可以存放在任何自己想存放的目录)
http://www.courier-mta.org/?download.php~authlib下载最新稳定版的源代码,放到/backup/software。
本文中下载的是http://easynews.dl.sourceforge.n ... uthlib-0.57.tar.bz2

2.解压软件:
tar -jxvf courier-authlib-0.57.tar.bz2

3.进入源代码目录:
cd courier-authlib-0.57

4.配置编译选项:
$ ./configure
--prefix=/mnt/software/courier
--with-pgsql-libs=/mnt/software/pgsql/lib
--with-pgsql-includes=/mnt/software/pgsql/include
--with-authpgsqlrc=/mnt/software/courier/etc/pgsqlrc #PGSQL模块的初始化文件
--with-authdaemonrc=/mnt/software/courier/etc/daemrc #authdaemon的初始化文件
--with-authpgsql #使用PGSQL模块
--with-redhat #在RedHat系统上必须使用该选项编译才能通过

5.安装
make
make install
make install-migrate
make install-configure
六。安装maildrop


1.下载软件:
创建存放软件的目录:
mkdir /backup/software (可以存放在任何自己想存放的目录)
http://www.courier-mta.org/?download.php下载最新稳定版的源代码,放到/backup/software。
http://easynews.dl.sourceforge.net/sour ... .1.tar.bz2

2.解压软件:
tar -jxvf maildrop-1.8.1.tar.bz2

3.进入源代码目录:
cd maildrop-1.8.1

4.创建用户和用户组
groupadd vmail -g 1004 (as root)
useradd vmail -u 1004 -g 1004 (as root)

export CPPFLAGS="-I/mnt/software/pgsql/include"
export LDFLAGS="-L/mnt/software/pgsql/lib"

5.配置编译选项:
./configure
--prefix=/mnt/software/courier
--enable-maildrop-uid=1004
--enable-maildrop-gid=1004
--enable-maildirquota
--with-dirsync

6.安装
make
make install-strip
make install-man

七.安装Courier IMAP
1.下载软件:
创建存放软件的目录:
mkdir /backup/software (可以存放在任何自己想存放的目录)
http://www.courier-mta.org/?download.php~imap下载最新稳定版的源代码,放到/backup/software。
本文中下载的是http://easynews.dl.sourceforge.n ... -imap-4.0.4.tar.bz2

2.解压软件:
tar -jxvf courier-imap-4.0.4.tar.bz2

3.进入源代码目录:
cd courier-imap-4.0.4

4.配置编译选项:
export COURIERAUTHCONFIG=/mnt/software/courier/bin/courierauthconfig
export CPPFLAGS="-I/mnt/software/mysql/include/mysql -I/mnt/software/pgsql/include -I/mnt/software/openssl/include -I/mnt/software/courier/include"
export LDFLAGS="-L/mnt/software/pgsql/lib -L/mnt/software/openssl/lib -L/mnt/software/courier/lib/courier-authlib/lib"

./configure --prefix=/mnt/software/courier --with-pgsql-libs=/mnt/software/pgsql/lib --with-pgsql-includes=/mnt/software/pgsql/include --with-openssl-includes=/mnt/software/openssl/include --with-openssl-libs=/mnt/software/openssl/lib --without-ipv6 --with-trashquota --enable-unicode --with-dirsync --with-redhat

5.编译安装:
make
make check
su root
make install
make install-configure


以下进行软件包的配置:
一、配置PostgreSQL:

运行时的设置:
1.共享内存设置位1024M
$ echo 1073741824 > /proc/sys/kernel/shmall
$ echo 1073741824 > /proc/sys/kernel/shmmax

or edit /etc/sysctl.conf add the line:
kernel.shmall = 1073741824
kernel.shmmax = 1073741824

Configuring Kernel Parameters on Linux:
/etc/sysctl.conf
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000

Enter the following command to change the current values of the kernel
parameters:
# /sbin/sysctl -p

Set Shell Limits for the oracle User:
/etc/security/limits.conf
* soft nproc 2047
* hard nproc 16384
* soft nofile 1024
* hard nofile 65536

/etc/pam.d/login
session required /lib/security/pam_limits.so

/etc/profile
if [ $USER = "postgres" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi

2.创建数据库用户:
创建数据库:
[postgres@www postgres]$ createdb db_mail
[postgres@www postgres]$createuser mail_user

单域邮箱:
CREATE TABLE "mailbox" (
id serial NOT NULL,
"username" character varying(255) NOT NULL,
"password" character varying(255) NOT NULL,
"maildir" character varying(255) NOT NULL,
"quota" numeric(10,0) DEFAULT '0' NOT NULL,
"created" timestamp(0) with time zone DEFAULT now(),
"modified" timestamp(0) with time zone DEFAULT now(),
"active" boolean DEFAULT 't'::bool,
"homedir" character varying(255) DEFAULT '/home/vmail/',
"uid" numeric(4,0) DEFAULT 1004,
"gid" numeric(4,0) DEFAULT 1004
);

授权:
GRANT UPDATE,SELECT,INSERT ON mailbox TO mail_user;

修改密码:
ALTER USER mail_user WITH PASSWORD 'admin';

插入数据:
insert into mailbox (username,password,maildir) values('admin','$1$UTs0q7lB$sJD.oIMc.cFKUy6Hyh4x91','admin/Maildir/');
#####创建了一个邮件用户,用户名为admin,密码为admin (密码可以从/etc/shadow文件复制过来)
二、配置courier-authlib

1. 编辑/mnt/software/courier/etc/daemrc,主要参数设置如下:
authmodulelist="authpgsql" #仅使用pgsql模块
authmodulelistorig="authpgsql"
daemons=5
authdaemonvar=/mnt/software/courier/var/spool/authdaemon # 指定authdaenon守护进程的Socket接口所在目录
DEBUG_LOGIN=2 #调试级别(如果不需要调试信息,可以设置成0)

2. 编辑/mnt/software/courier/etc.pgsqlrc,主要参数设置如下:
PGSQL_HOST localhost
PGSQL_PORT 5432
PGSQL_USERNAME mail_user
PGSQL_PASSWORD admin
PGSQL_USER_TABLE mailbox
PGSQL_CRYPT_PWFIELD password
PGSQL_UID_FIELD uid
PGSQL_GID_FIELD gid
PGSQL_LOGIN_FIELD username
PGSQL_HOME_FIELD homedir
PGSQL_NAME_FIELD username
PGSQL_MAILDIR_FIELD maildir
PGSQL_QUOTA_FIELD quota

4.测试courier-authlib
(1)启动服务
/mnt/software/courier/sbin/authdaemond start

(2)/mnt/software/courier/sbin/authtest admin
出现如下提示,则认证成功:
Authentication succeeded.

Authenticated: admin (uid 1004, gid 1004)
Home Directory: /home/vmail/
Maildir: admin/Maildir/
Quota: 0
Encrypted Password: $1$UTs0q7lB$sJD.oIMc.cFKUy6Hyh4x91
Cleartext Password: (none)
Options: (none)
三、配置postfix:

1.编辑 /etc/postfix/master.cf (使用maildrop作为投递代理)
flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient} 改为:
flags=DRhu user=vmail argv=/mnt/software/courier/bin/maildrop -d ${recipient}

2. /etc/postfix/main.cf主要参数如下:
myhostname = mail.example.com #你的服务器名称
mydomain = example.com #你的域名
myorigin = $mydomain #你的组织名称
mydestination = $mydomain, $myhostname, localhost.$mydomain, localhost,
mail.$mydomain, http://www.$mydomain, ftp.$mydomain # 本地邮件服务接收哪些邮件
mynetworks_style = host
home_mailbox = Maildir/

3.配置SASL的支持:
/etc/postfix/main.cf:

smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated ,reject_unauth_destination,reject_non_fqdn_recipient
smtpd_sasl_application_name = smtpd



##(smtp用户认证,需要进行如下设置)
/usr/lib/sasl2/smtpd.conf:
#pwcheck_method: saslauthd
#saslauthd_path: /var/run/saslauthd
pwcheck_method: authdaemond
log_level: 3
mech_list: PLAIN LOGIN
#mech_list: AUTH LOGIN
authdaemond_path: /var/spool/authdaemon/socket

###如果数据库存储的密码不需要加密,只需要明文存储,则可以使用下面的陪配置:
/usr/lib/sasl2/smtpd.conf:
pwcheck_method:auxprop
mech_list:plain login
auxprop_plugin:sql
sql_engine:pgsql
sql_hostnames:localhost
sql_user:mail_user
sql_passwd:admin
sql_database:db_mail
sql_select:SELECT password FROM mailbox WHERE username = '%u' and active='t'

##有关smtpd.conf的配置更多配置选项,请参考 http://www.clusting.com/cyrus/SASL/doc/options.html

使其他用户可以访问authdaemon的socket:
chmod o+x /mnt/software/courier/var/spool/authdaemon/



4.测试用户认证:
(1)明码认证(AUTH PLAIN):
telnet localhost 25
提示如下:
Connected to http://www.clusting.com (127.0.0.1).
Escape character is '^]'.
220 mail.clusting.com ESMTP Postfix
执行:
EHLO localhost
提示如下:
250-mail.clusting.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH LOGIN PLAIN
250 8BITMIME

在另一窗口执行如下命令,生成用户名和密码的Base64编码(用户名:admin,密码:admin):
perl -MMIME::Base64 -e 'print encode_base64("admin\0admin\0admin");'
将生成的编码:"YWRtaW4AYWRtaW4AYWRtaW4="复制到下面的AUTH PLAIN命令后面
如下:
AUTH PLAIN YWRtaW4AYWRtaW4AYWRtaW4=
235 Authentication successful
验证成功。

(2)登录认证(AUTH LOGIN):
生成用户名的Base64编码:
perl -MMIME::Base64 -e 'print encode_base64("admin");'
YWRtaW4=
生成口令的Base64编码:
perl -MMIME::Base64 -e 'print encode_base64("admin");'
YWRtaW4=
接上一步,执行:
AUTH LOGIN
提示如先:
334 VXNlcm5hbWU6
复制用户名的Base64编码并粘贴到后面:
YWRtaW4=
回车后出现如下提示:
334 UGFzc3dvcmQ6
复制口令的Base64编码并粘贴到后面:
YWRtaW4=
回车后出现如下提示:
235 Authentication successful
验证成功。

5.配置本地投递(local deliver),/etc/postfix/mail.cf:
local_recipient_maps = $virtual_alias_maps $virtual_mailbox_maps
virtual_alias_maps = hash:/etc/aliases #本选项是为了使系统用户的邮件可以被接收到(偷懒了,嘻嘻^_^)
maildrop_destination_recipient_limit = 5 #限制maildrop可以同时投递5封邮件。
local_transport = virtual
virtual_transport = maildrop
virtual_uid_maps = static:1004
virtual_gid_maps = static:1004
virtual_mailbox_base = /home/vmail
virtual_mailbox_maps = pgsql:/etc/postfix/pgsql-virtual-mailbox.cf

6./etc/postfix/pgsql-virtual-mailbox.cf:

hosts = localhost
user = mail_user
password = admin
dbname = db_mail
select_field = maildir
table = mailbox
where_field = username
additional_conditions = AND active = 't'
四、配置maildrop


/mnt/software/courier/etc/maildroppgsql.config 修改内容如下:
hostname localhost
port 5432
database db_mail
dbuser mail_user
dbpw admin
dbtable mailbox
default-uidnumber 1004
default-gidnumber 1004
maildir-field maildir
homedirectory homedir
quota_field quota
mailstatus_field active
where_clause AND active = 't'


五、配置courier-imap:


1.增加邮箱用户:
su - vmail
mkdir /home/vmail/admin
maildirmake /home/vmail/admin/Maildir

2.配置pop3、imap服务

/mnt/software/courier/etc/pop3d:

POP3DSTART=YES

/mnt/software/courier/etc/imapd:

IMAPDSTART=YES

启动服务:
/mnt/software/courier/libexec/imapd.rc start
/mnt/software/courier/libexec/pop3d.rc start

3.测试pop3服务:
telnet localhost 110
出现下面的提示:
Trying 127.0.0.1...
Connected to http://www.clusting.com (127.0.0.1).
Escape character is '^]'.
+OK Hello there. 输入:
user admin
出现如下提示:
+OK Password required.
再输入:
pass admin
出现如下提示:
+OK logged in.
认证成功。
quit退出
您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-3-28 23:27 , Processed in 0.060240 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表