前言
POSTFIX是一个性能卓越的MTA,拥有非常高的稳定性及安全性。在一台普通的机器上拥有足够带宽的前提下每天可以处理超过四百万封邮件。作为一个MTA,POSTFIX被设计为代替Sendmail的一个软件。关于POSTFIX的更多信息可以参见其官方网站:http://www.postfix.org。
POSTFIX一般情况下与CYRUS-IMAP相配合,由于CYRUS-IMAP及相关的附加模块配置起来非常复杂,所以POSTFIX+CYRUS-IMAP并不一定适合于初学者使用!
由于此手册未经实际验证,所以请不要转载以免误导最终用户!
本手册只在www.linuxaid.com.cn发表,大家有关于此手册的任何问题请至LinuxAid.com.cn技术支持论坛的《邮件服务器》版面讨论,LinuxAid的技术支持工程师会根据讨论的结果继续完善此手册。
一、编译[url=http://www.pccode.net].net" class="wordstyle"源码
1、基本概念
POSTFIX只是一个MTA,也就是一个SMTP服务器。它本身只提供SMTP服务,如果你需要POP3或IMAP服务,则需要通过安装类似于CYRUS这样的IMAP服务器与其配合从而实现一个完整的系统。
由于POSTFIX只是一个MTA,它只负责邮件的转发以及本地的分发,用户管理工作由MDA负责,所以在理解上要注意。
POSTFIX的SMTP验证需要通过SASL库才可以实现,SASL库则通过一个称为PWCHECK的服务向POSTFIX提供验证的渠道。
PWCHECK会在/var/pwcheck中创建一个UNIX SOCKET文件,供客户端进行访问。
除了CYRUS-IMAP外,所有需要通过SASL进行验证的客户端软件(POSTFIX,等)都需要在SASL库的SASL目录下创建其进程所对应的配置文件,如POSTFIX的文件名为smtpd.conf。并在其中指定验证方式。
POSTFIX通过LMTP或PIPE与CYRUS-IMAP沟通,将发往本地的邮件直接通过LMTP或PIPE转给CYRUS-IMAP处理。
POSTFIX可以与MySQL结合将别名(Alias)存放于数据库中。
缺省情况下POSTFIX和CYRUS-IMAP都使用系统账号作为缺省的用户数据库。如果要使用数据库做为用户账号数据库则需要对[url=http://www.pccode.net].net" class="wordstyle"源码进行修改,我们这里不进行介绍。
POSTFIX与CYRUS-IMAP结合并使用系统账号作为邮件账号只适用于不超过两千个账号的系统,当使用数据库(MySQL)作为用户账号存储媒介时只适用于不超过十万个邮件账号的系统。
基本概念大约就是这么多,希望大家都可以理解POSTFIX和CYRUS-IMAP这一对组合到底可以做些什么,以及有什么限制。
2、先期准备
我们假设系统所有的东西都将安装在:/usr/local/servers中,之所以要安装在这个目录里面而不使用缺省的安装路径,是为了方便大家在想要删除POSTFIX及其相关的支持文件时,可以直接通过rm对应的目录即可删除,而不需要手工去查找哪些文件需要删除(这特别适用于新入门的用户)。
相关的路径信息:
POSTFIX[url=http://www.pccode.net].net" class="wordstyle"源码目录:/usr/local/servers/packages/postfix
POSTFIX安装目录:/usr/local/servers/postfix
CYRUS-IMAP[url=http://www.pccode.net].net" class="wordstyle"源码目录:/usr/local/servers/packages/cyrus
CYRUS-IMAP安装目录:/usr/local/servers/cyrus
CYRUS-SASL[url=http://www.pccode.net].net" class="wordstyle"源码目录:/usr/local/servers/packages/sasl
CYRUS-SASL安装目录:/usr/local/servers/library/sasl
在安装前我们需要先准备好所需要的目录,按照以下的步骤进行(#号后面的是注释,执行时不要输入):
useradd postfix #为POSTFIX添加一个系统账号
useradd cyrus -g mail #为cyrus添加一个系统账号,并将其所属的组设置为mail
passwd cyrus #设置cyrus的密码,注意此密码将用于管理用户账号。
usermod daemon -g group #将daemon系统账号所属的组设置为mail,因为POSTFIX在做为DAEMON支持时需要用到这个用户
mkdir /var/pwcheck #为PWCHECK,用户身份验证服务创建目录
chown cyrus.mail /var/pwcheck #将这个目录的所有者设置为cyrus和mail组
3、为支持SMTP验证准备好库文件
POSTFIX的SMTP验证需要SASL库的支持,为此我们需要在安装POSTFIX[url=http://www.pccode.net].net" class="wordstyle"源码前先行安装SASL库文件,步骤如下:
mkdir /usr/local/servers/packages/sasl
cd /usr/local/servers/packages/sasl
wget ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/cyrus-sasl-1.5.24.tar.gz
tar zxf cyrus-sasl-1.5.24.tar.gz
cd cyrus-sasl-1.5.24
./configure --prefix=/usr/local/servers/library/sasl --enable-plain=yes --enable-login=yes --enable-cram=no --enable-digest=no --with-pwcheck=/var/pwcheck
make
make install
ln -s /usr/local/servers/library/sasl /usr/lib/sasl
修改/etc/ld.so.conf,添加:
/usr/local/servers/library/sasl/lib
/usr/local/servers/library/sasl/lib/sasl
存盘退出,运行:
ldconfig
运行:
/usr/local/servers/library/sasl/sbin/saslpasswd -c admin
输入两次密码,这个程序会在/etc生成一个sasldb文件。对于当前版本的SASL,这个文件是必须的(虽然它在PWCHECK验证方式下没有任何作用)。
chmod o+r /etc/sasldb #让所有用户都可以访问,否则POSTFIX在验证的时候怎么样都通不过:)。
echo "pwcheck_method: pwcheck" > /usr/lib/sasl/smtpd.conf #创建SMTP验证文件
至此SASL库已经成功安装。
4、安装POSTFIX[url=http://www.pccode.net].net" class="wordstyle"源码
安装前我们需要先下载域名,可以从POSTFIX的网站上找到相关的链接,这里我们使用国内的镜像:
ftp://postfix.cn99.com/pub/postfix/index.html
从这个地址可以下载到最新版本的POSTFIX,我们这里使用
ftp://postfix.cn99.com/pub/postfix/official/postfix-20010228-pl06.tar.gz
按照以下的步骤创建我们的安装目录:
mkdir /usr/local/servers/packages/postfix -p
cd /usr/local/servers/packages/postfix
wget ftp://postfix.cn99.com/pub/postfix/official/postfix-20010228-pl06.tar.gz
tar zxf postfix-20010228-pl06.tar.gz
cd postfix-20010228-pl06
到这里我们已经成功的把[url=http://www.pccode.net].net" class="wordstyle"源码解开了,并使用CD命令进入了POSTFIX的[url=http://www.pccode.net].net" class="wordstyle"源码目录。接下来需要根据我们的需要进行配置。
make -f Makefile.init makefiles 'CCARGS-DUSE_SASL_AUTH -I/usr/local/servers/library/sasl/include' 'AUXLIBS=-L/usr/local/servers/library/sasl/lib -lsasl'
make
sh INSTALL.sh
按照以下的提示输入相关的路径([]号中的是缺省值,]号后的是输入值)
install_root: [/] /
tempdir: [/usr/local/servers/packages/postfix/postfix-20010228-pl06] /tmp
config_directory: [/etc/postfix] /etc/postfix
daemon_directory: [/usr/libexec/postfix] /usr/local/servers/postfix/libexec
command_directory: [/usr/sbin] /usr/local/servers/postfix/sbin
queue_directory: [/var/spool/postfix] /var/spool/postfix
sendmail_path: [/usr/sbin/sendmail]
newaliases_path: [/usr/bin/newaliases]
mailq_path: [/usr/bin/mailq]
mail_owner: [postfix]
setgid: [no]
manpages: [/usr/local/man] /usr/local/servers/postfix/man
完成以后POSTFIX的安装程序会自动把POSTFIX安装至所提供的目录。
5、安装CYRUS-IMAP[url=http://www.pccode.net].net" class="wordstyle"源码
从以下地址得到CYRUS-IMAP的[url=http://www.pccode.net].net" class="wordstyle"源码:
ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/cyrus-imapd-2.0.16.tar.gz
按照以下的步骤创建安装目录:
mkdir /usr/local/servers/packages/cyrus -p
cd /usr/local/servers/packages/cyrus
wget ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/cyrus-imapd-2.0.16.tar.gz
tar zxf cyrus-imapd-2.0.16.tar.gz
cd cyrus-imapd-2.0.16
然后使用以下命令配置[url=http://www.pccode.net].net" class="wordstyle"源码:
./configure --prefix=/usr/local/servers/cyrus --with-cyrus-prefix=/usr/local/servers/cyrus --with-sasl=/usr/local/servers/library/sasl
make
make install
完成之后Cyrus会安装在/usr/local/servers/cyrus中。
接下来我们要创建CYRUS运行时所必须的几个目录:
mkdir /var/imap/sieve -p
mkdir /var/spool/imap
chown cyrus.mail /var/imap -R
chown cyrus.mail /var/spool/imap -R
二、系统配置
配置工作主要有两部分,一是配置SMTP服务器也就是POSTFIX,二是配置IMAP服务器也就是CYRUS-IMAP。我们一步一步来,先配置CYRUS-IMAP。
1、配置CYRUS-IMAP服务器
CYRUS-IMAP服务器的配置文件主要有两个cyrus.conf和imapd.conf
创建/etc/cyrus.conf,内容如下:
START {
mboxlist cmd="ctl_mboxlist -r"
deliver cmd="ctl_deliver -r"
}
SERVICES {
imap cmd="imapd" listen="imap" prefork=0
pop3 cmd="pop3d" listen="pop3" prefork=0
sieve cmd="timsieved" listen="127.0.0.1:sieve" prefork=0
lmtpunix cmd="lmtpd" listen="/var/imap/conf/socket/lmtp" prefork=0
}
存盘退出,在/etc/services中添加一项:
sieve 2000/tcp
存盘退出,再创建/etc/imapd.conf,内容如下:
configdirectory: /var/imap/conf
partition-default: /var/spool/imap
admins: cyrus
sasl_pwcheck_method: pwcheck
sendmail: /usr/sbin/sendmail
sieveusehomedir: false
sievedir: /var/imap/sieve
存盘退出。至此CYRUS-IMAP的配置文件已经设置完成,我们要运行它的初始化命令去生成整个目录结构:
cd /usr/local/servers/packages/cyrus/cyrus-imapd-2.0.16/tools
su cyrus
./mkimap
exit
完成之后mkimap程序会自动创建CYRUS-IMAP运行时所需的所有目录。
接下来就要创建启动脚本了,CYRUS-IMAP缺省是没有启动脚本的,我自己写了两个:
启动脚本,请将其存为/sbin/startcyrus,内容如下:
#!/bin/sh
#
# /sbin/startcyrus
#
# Starts the cyrus daemon
test -x /usr/local/servers/cyrus/bin/master' 'exit 0
if [ ! -f /var/lock/subsys/cyrus.pid ]; then
/usr/local/servers/cyrus/bin/master&
echo $! > /var/lock/subsys/cyrus.pid
echo ""
echo "Cyrus IMAP Server started."
echo ""
else
echo "Cyrus IMAP Server:`cat /var/lock/subsys/cyrus.pid`"
kill -TERM `cat /var/lock/subsys/cyrus.pid`
rm -f /var/lock/subsys/cyrus.pid
echo ""
echo "Cyrus IMAP Server shutdown normally."
echo ""
/usr/local/servers/cyrus/bin/master&
echo $! > /var/lock/subsys/cyrus.pid
echo ""
echo "Cyrus IMAP Server started."
echo ""
fi
停止脚本,请交其存为/sbin/stopcyrus,内容如下:
#!/bin/sh
if [ ! -f /var/lock/subsys/cyrus.pid ]; then
echo ""
echo "Is cyrus running already?"
echo "I can't found it's pid."
echo ""
else
echo "Cyrus IMAP Server:`cat /var/lock/subsys/cyrus.pid`"
kill -TERM `cat /var/lock/subsys/cyrus.pid`
rm -f /var/lock/subsys/cyrus.pid
echo ""
echo "Cyrus IMAP Server shutdown normally."
echo ""
fi
创建这两个文件之后,不要忘记给它们设置执行属性:
chmod +x /sbin/startcyrus
chmod +x /sbin/stopcyrus
完成