作者:LinuxAid Floatboat
一切版权属于作者
前言
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的技术支持工程师会根据讨论的结果继续完善此手册。
一、编译源码
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都使用系统账号作为缺省的用户数据库。如果要使用数据库做为用户账号数据库则需要对源码进行修改,我们这里不进行介绍。
POSTFIX与CYRUS-IMAP结合并使用系统账号作为邮件账号只适用于不超过两千个账号的系统,当使用数据库(MySQL)作为用户账号存储媒介时只适用于不超过十万个邮件账号的系统。
基本概念大约就是这么多,希望大家都可以理解POSTFIX和CYRUS-IMAP这一对组合到底可以做些什么,以及有什么限制。
2、先期准备
我们假设系统所有的东西都将安装在:/usr/local/servers中,之所以要安装在这个目录里面而不使用缺省的安装路径,是为了方便大家在想要删除POSTFIX及其相关的支持文件时,可以直接通过rm对应的目录即可删除,而不需要手工去查找哪些文件需要删除(这特别适用于新入门的用户)。
相关的路径信息:
POSTFIX源码目录:/usr/local/servers/packages/postfix
POSTFIX安装目录:/usr/local/servers/postfix
CYRUS-IMAP源码目录:/usr/local/servers/packages/cyrus
CYRUS-IMAP安装目录:/usr/local/servers/cyrus
CYRUS-SASL源码目录:/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源码前先行安装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源码
安装前我们需要先下载域名,可以从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
到这里我们已经成功的把源码解开了,并使用CD命令进入了POSTFIX的源码目录。接下来需要根据我们的需要进行配置。
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源码
从以下地址得到CYRUS-IMAP的源码:
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
然后使用以下命令配置源码:
./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
完成以后,以ROOT的身份运行
startcyrus
然后使用
tail /var/log/messages
应该可以看到与之类似的内容:
Nov 4 19:48:28 linuxaid master[1092]: process started
Nov 4 19:48:28 linuxaid ctl_mboxlist[1093]: running mboxlist recovery
Nov 4 19:48:29 linuxaid ctl_mboxlist[1093]: done running mboxlist recovery
Nov 4 19:48:29 linuxaid master[1092]: ready for work
如果有其它的错误信息,请至论坛《邮件系统》版讨论。然后使用
stopcyrus
将CYRUS-IMAP停止。
2、配置POSTFIX服务
POSTFIX的主要配置文件都在/etc/postfix目录中。主配置文件名为main.cf,内容如下:
queue_directory = /var/spool/postfix
command_directory = /usr/local/servers/postfix/sbin
daemon_directory = /usr/local/servers/postfix/libexec
alias_maps = hash:/etc/postfix/aliases
mail_owner = postfix
myhostname = smtp.linuxaid.com.cn #主机名
mydomain = linuxaid.com.cn #域名
myorigin = $mydomain
mailbox_transport = lmtp:unix:/var/imap/conf/socket/lmtp
fallback_transport = lmtp:unix:/var/imap/conf/socket/lmtp
mynetworks = 127.0.0.0/8
smtpd_banner = $mydomain ESMTP 1.0
local_destination_concurrency_limit = 2
default_destination_concurrency_limit = 10
debug_peer_level = 2
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_maps_rbl, check_relay_domains
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtp_sasl_security_options = noanonymous
maximal_queue_lifetime = 30m
maps_rbl_domains = blackholes.mail-abuse.org, dialups.mail-abuse.org, relays.mail-abuse.org
smtpd_client_restrictions = permit_mynetworks, reject_maps_rbl
完成之后存盘退出,生成别名文件:
/usr/local/servers/postfix/sbin/postalias /etc/postfix/aliases
至此所有配置文件都已经成功设置,再运行:
/usr/local/servers/postfix/sbin/postfix start
即可启动POSTFIX,使用
tail /var/log/maillog
应该可以看到,与之类似的信息:
Nov 4 20:10:25 linuxaid postfix-script: warning: creating missing Postfix pid directory
Nov 4 20:10:25 linuxaid postfix-script: warning: creating missing Postfix incoming directory
Nov 4 20:10:25 linuxaid postfix-script: warning: creating missing Postfix active directory
Nov 4 20:10:25 linuxaid postfix-script: warning: creating missing Postfix bounce directory
Nov 4 20:10:25 linuxaid postfix-script: warning: creating missing Postfix defer directory
Nov 4 20:10:25 linuxaid postfix-script: warning: creating missing Postfix deferred directory
Nov 4 20:10:25 linuxaid postfix-script: warning: creating missing Postfix flush directory
Nov 4 20:10:25 linuxaid postfix-script: warning: creating missing Postfix saved directory
Nov 4 20:10:25 linuxaid postfix-script: warning: creating missing Postfix corrupt directory
Nov 4 20:10:25 linuxaid postfix-script: warning: creating missing Postfix public directory
Nov 4 20:10:25 linuxaid postfix-script: warning: creating missing Postfix private directory
Nov 4 20:10:26 linuxaid postfix-script: starting the Postfix mail system
Nov 4 20:10:26 linuxaid postfix/master[1324]: daemon started
然后使用:
/usr/local/servers/postfix/sbin/postfix stop
将POSTFIX停止
至此一个完整的服务已经安装完成。
三、管理
1、记录文件
邮件系统的记录文件主要有两个,一个是CYRUS-IMAP的记录文件/var/log/messages,另外一个是POSTFIX的记录文件/etc/log/maillog。需要监视系统时只要查看这两个文件即可。
2、用户管理
由于POSTFIX和CYRUS-IMAP都使用系统账号,所以添加用户时需要在使用系统的useradd对应的添加用户账号。下面我们以用户testuser为例子说明添加用户的过程。
步骤1,添加普通用户,并设置用户主目录为/home/mailuser,不允许其登录。
useradd testuser -d /home/mailuser -s/usr/bin/passwd
步骤2,为此用户添加邮箱。
/usr/local/servers/cyrus/bin/cyradm -u cyrus localhost
#启动CYRUS邮箱管理器,会提示你输入CYRUS的密码,输入后就可以进入管理命令行。
在命令行运行:
cm user.testuser
即可为此用户添加一个账号,如果需要添加发件箱、垃圾箱,则可以继续使用命令:
cm user.testuser.Sent
cm user.testuser.Trash
cm user.testuser.Drafts
注意,收件箱是user.testuser,所有的文件夹都必须以user.testuser为基础创建。
其它用户的管理方法也是这样。
四、启动系统
只需要使用:
startcyrus
/usr/local/servers/postfix/sbin/postfix start
就可以启动,至此你就拥有一个支持以下功能的邮件系统了:
SMTP
SMTP AUTH
IMAP4
POP3
SIEVE
进一步的功能,如邮件账号与系统账号分析等等将在以后的版本中继续说明。