本文将详细介绍如何使用postfix,extman,extmail等一系列开源软件构建适合企业应用的邮件系统,测试服务器平台为RHEL5.4 32位操作系统,在开始之前,请部署好LAMP环境,这方面的介绍可以参考我的另一篇文章:http://ylw6006.blog.51cto.com/470441/657907,如果要做到收发邮件均没有问题,需要DNS的邮件交换记录(MX)支持,这方面的设置不在本文中介绍…
一:安装courier-authlib
1:使用该验证库,可以使用mysql验证邮件账户
[root@orcl ~]# cd /usr/local/src/tarbag
[root@orcl tarbag]# wget http://sourceforge.net/projects/courier/files/authlib/0.63.0/courier-authlib-0.63.0.tar.bz2/download
[root@orcl tarbag]# tar -jxvf courier-authlib-0.63.0.tar.bz2 -C ../software/
[root@orcl tarbag]# cd ../software/courier-authlib-0.63.0/
[root@orcl courier-authlib-0.63.0]# groupadd postfix -g 1000
[root@orcl courier-authlib-0.63.0]# groupadd vmail -g 1001
[root@orcl courier-authlib-0.63.0]# groupadd postdrop -g 1002
[root@orcl courier-authlib-0.63.0]# useradd -u 1001 -g 1000 vmail
[root@orcl courier-authlib-0.63.0]# useradd -u 1000 -g 1000 postfix
[root@orcl courier-authlib-0.63.0]# id vmail
uid=1001(vmail) gid=1000(postfix) groups=1000(postfix)
[root@orcl courier-authlib-0.63.0]# id postfix
uid=1000(postfix) gid=1000(postfix) groups=1000(postfix)
[root@orcl courier-authlib-0.63.0]# ./configure --prefix=/usr/local/courier-authlib --with-mailuser=vmail --with-mailgroup=vmail --sysconfdir=/etc --without-authpam --without-authldap --without-authpwd --without-authshadow --without-authvchkpw --without-authpgsql --with-authmysql --with-mysql-libs=/usr/local/mysql/lib/mysql --with-mysql-includes=/usr/local/mysql/include/mysql --with-redhat --with-authmysqlrc=/etc/authmysqlrc --with-authdaemonrc=/etc/authdaemonrc CFLAGS="-march=i686 -O2 -fexpensive-optimizations" CXXFLAGS="-march=i686 -O2 -fexpensive-optimizations"
[root@orcl courier-authlib-0.63.0]# make && make install
[root@orcl courier-authlib-0.63.0]# ls /usr/local/courier-authlib/
bin include lib libexec sbin share var
[root@orcl courier-authlib-0.63.0]# echo '/usr/local/courier-authlib/lib/courier-authlib/' >> /etc/ld.so.conf
[root@orcl courier-authlib-0.63.0]# ldconfig
备注:如果是64位系统,需要将i686修改位x86-64,各编译选项的含义可以使用./configrue --help来获取
2:修改authlib库相关配置文件
[root@orcl ~]# cp /etc/authdaemonrc.dist /etc/authdaemonrc
[root@orcl ~]# grep -v '^#' /etc/authdaemonrc |grep -v '^$'
authmodulelist="authmysql"
authmodulelistorig="authmysql"
daemons=5
authdaemonvar=/usr/local/courier-authlib/var/spool/authdaemon
DEBUG_LOGIN=0
DEFAULTOPTIONS=""
LOGGEROPTS=""
[root@orcl ~]# cp /etc/authmysqlrc.dist /etc/authmysqlrc
[root@orcl ~]# grep -v '^#' /etc/authmysqlrc |grep -v '^$'
MYSQL_SERVER 127.0.0.1
MYSQL_USERNAME extmail
MYSQL_PASSWORD 123456
MYSQL_SOCKET /tmp/mysql.sock
MYSQL_PORT 3306
MYSQL_OPT 0
MYSQL_DATABASE extmail
MYSQL_USER_TABLE mailbox
MYSQL_CRYPT_PWFIELD password
MYSQL_UID_FIELD 1001
MYSQL_GID_FIELD 1001
MYSQL_LOGIN_FIELD username
MYSQL_HOME_FIELD concat('/email/mailbox/',homedir)
MYSQL_NAME_FIELD name
MYSQL_MAILDIR_FIELD concat('/email/mailbox/',maildir)
3:启动authlib服务
[root@orcl ~]# /usr/local/courier-authlib/sbin/authdaemond start
[root@orcl ~]# ps -ef |grep courier
root 31874 1 0 11:35 ? 00:00:00 /usr/local/courier-authlib/sbin/courierlogger -pid=/usr/local/courier-authlib/var/spool/authdaemon/pid -start /usr/local/courier-authlib/libexec/courier-authlib/authdaemond
root 31875 31874 0 11:35 ? 00:00:00 /usr/local/courier-authlib/libexec/courier-authlib/authdaemond
root 31876 31875 0 11:35 ? 00:00:00 /usr/local/courier-authlib/libexec/courier-authlib/authdaemond
root 31877 31875 0 11:35 ? 00:00:00 /usr/local/courier-authlib/libexec/courier-authlib/authdaemond
root 31878 31875 0 11:35 ? 00:00:00 /usr/local/courier-authlib/libexec/courier-authlib/authdaemond
root 31879 31875 0 11:35 ? 00:00:00 /usr/local/courier-authlib/libexec/courier-authlib/authdaemond
root 31880 31875 0 11:35 ? 00:00:00 /usr/local/courier-authlib/libexec/courier-authlib/authdaemond
[root@orcl ~]# echo '/usr/local/courier-authlib/sbin/authdaemond start' > /etc/rc.local
二:安装 cyrus-sasl,SASL (Simple Authentication Security Layer)简单认证安全层,功能主要是用于SMTP认证;而 Cyrus SASL是SASL的一个实现
1:卸载系统自带的sasl rpm包,使用--nodeps选项强制卸载
[root@orcl ~]# rpm -qa |grep sasl
cyrus-sasl-2.1.22-5.el5
cyrus-sasl-devel-2.1.22-5.el5
cyrus-sasl-lib-2.1.22-5.el5
cyrus-sasl-plain-2.1.22-5.el5
[root@orcl ~]# rpm -e $(rpm -qa |grep cyrus-sasl) --nodeps
[root@orcl ~]# rpm -qa |grep sasl |wc -l
0
[root@orcl ~]# cd /usr/local/src/tarbag/
[root@orcl tarbag]# wget ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/cyrus-sasl-2.1.22.tar.gz
[root@orcl tarbag]# tar -zxvf cyrus-sasl-2.1.22.tar.gz -C ../software/
[root@orcl tarbag]# cd ../software/cyrus-sasl-2.1.22/
[root@orcl cyrus-sasl-2.1.22]# ./configure --prefix=/usr/local/sasl2 --with-mysql=/usr/local/mysql --disable-sample --disable-saslauthd --disable-pwcheck --disable-cram --disable-digest --disable-krb4 --disable-gssapi --disable-anon --enable-plain --enable-login --enable-sql --disable-ntlm --disable-otp --disable-srp --disable-srp-setpass --with-authdaemond=/usr/local/courier-authlib/var/spool/authdaemon/socket --with-mysql-includes=/usr/local/mysql/include/ --with-mysql-libs=/usr/local/mysql/lib/mysql
[root@orcl cyrus-sasl-2.1.22]# make && make install
[root@orcl cyrus-sasl-2.1.22]# ls /usr/local/sasl2/
include lib man sbin
[root@orcl cyrus-sasl-2.1.22]# rm -rf /usr/lib/sasl2/
[root@orcl cyrus-sasl-2.1.22]# ln -s /usr/local/sasl2/lib/sasl2/ /usr/lib
[root@orcl ~]# tail -2 /etc/ld.so.conf
/usr/local/sasl2/lib/sasl2
/usr/local/sasl2/lib
[root@orcl ~]# ldconfig
2:编辑smtpd认证配置文件,该文件默认不存在
[root@orcl ~]# cat /usr/local/sasl2/lib/sasl2/smtpd.conf
pwcheck_method: authdaemond
log_level: 3
mech_list: PLAIN LOGIN
authdaemond_path:/usr/local/courier-authlib/var/spool/authdaemon/socket
3:创建相关目录并启动测试
[root@orcl ~]# mkdir -p /var/state/saslauthd
[root@orcl ~]# /usr/local/sasl2/sbin/saslauthd -a shadow pam -d
saslauthd[10252] :main : num_procs : 5
saslauthd[10252] :main : mech_option: NULL
saslauthd[10252] :main : run_path : /var/state/saslauthd
saslauthd[10252] :main : auth_mech : shadow
saslauthd[10252] :ipc_init : using accept lock file: /var/state/saslauthd/mux.accept
saslauthd[10252] :detach_tty : master pid is: 0
saslauthd[10252] :ipc_init : listening on socket: /var/state/saslauthd/mux
saslauthd[10252] :main : using process model
saslauthd[10253] :get_accept_lock : acquired accept lock
saslauthd[10252] :have_baby : forked child: 10253
saslauthd[10252] :have_baby : forked child: 10254
saslauthd[10252] :have_baby : forked child: 10255
saslauthd[10252] :have_baby : forked child: 10256
saslauthd[10256] :server_exit : child exited: 10256
saslauthd[10255] :server_exit : child exited: 10255
saslauthd[10254] :server_exit : child exited: 10254
saslauthd[10253] :server_exit : child exited: 10253
saslauthd[10252] :handle_sigchld : child exited: 10253
saslauthd[10252] :handle_sigchld : child exited: 10254
saslauthd[10252] :handle_sigchld : child exited: 10255
saslauthd[10252] :handle_sigchld : child exited: 10256
此处按"ctrl+C"
saslauthd[10252] :server_exit : pid file lock removed: /var/state/saslauthd/saslauthd.pid.lock
saslauthd[10252] :ipc_cleanup : accept lock file removed: /var/state/saslauthd/mux.accept
saslauthd[10252] :ipc_cleanup : socket removed: /var/state/saslauthd/mux
saslauthd[10252] :server_exit : master exited: 0
[root@orcl ~]# /usr/local/sasl2/sbin/saslauthd -a shadow pam -d &
[1] 30341
[root@orcl ~]# exit
logout
[root@orcl ~]# ps -ef |grep sasl
root 30341 1 0 11:19 ? 00:00:00 /usr/local/sasl2/sbin/saslauthd -a shadow pam -d
root 30342 30341 0 11:19 ? 00:00:00 /usr/local/sasl2/sbin/saslauthd -a shadow pam -d
root 30343 30341 0 11:19 ? 00:00:00 /usr/local/sasl2/sbin/saslauthd -a shadow pam -d
root 30344 30341 0 11:19 ? 00:00:00 /usr/local/sasl2/sbin/saslauthd -a shadow pam -d
root 30345 30341 0 11:19 ? 00:00:00 /usr/local/sasl2/sbin/saslauthd -a shadow pam -d
[root@orcl ~]# echo '/usr/local/sasl2/sbin/saslauthd -a shadow pam -d' >> /etc/rc.local
三:安装BerkeleyDB
1:卸载系统自带的db4 rpm包,使用--nodeps选项强制卸载
[root@orcl ~]# rpm -qa |grep db4
db4-4.3.29-10.el5
db4-devel-4.3.29-10.el5
[root@orcl ~]# rpm -e $(rpm -qa |grep db4) --nodeps
[root@orcl ~]# rpm -qa |grep db4 |wc -l
0
[root@orcl ~]# cd /usr/local/src/tarbag/
[root@orcl tarbag]# wget http://download.oracle.com/berkeley-db/db-4.8.26.tar.gz
[root@orcl tarbag]# tar -zxvf db-4.8.26.tar.gz -C ../software/
[root@orcl tarbag]# cd ../software/db-4.8.26/build_unix/
[root@orcl build_unix]# ../dist/configure --prefix=/usr/local/BerkeleyDB
[root@orcl build_unix]# make && make install
[root@orcl build_unix]# ls /usr/local/BerkeleyDB/
bin docs include lib
[root@orcl ~]# ln -s /usr/local/BerkeleyDB/include /usr/include/db4
[root@orcl ~]# ln -s /usr/local/BerkeleyDB/include/db.h /usr/include/
[root@orcl ~]# ln -s /usr/local/BerkeleyDB/include/db_cxx.h /usr/include/
[root@orcl ~]# echo '/usr/local/BerkeleyDB/lib' >> /etc/ld.so.conf
[root@orcl ~]# ldconfig
四:安装postfix
1:关闭sendmail
[root@orcl ~]# service sendmail stop
Shutting down sm-client: [ OK ]
Shutting down sendmail: [ OK ]
[root@orcl ~]# chkconfig sendmail off
2:下载postfix源码包并编译安装
[root@orcl ~]# echo '/usr/local/mysql/lib/mysql/' >> /etc/ld.so.conf
[root@orcl ~]# ldconfig
[root@orcl ~]# cd /usr/local/src/tarbag/
[root@orcl tarbag]# wget ftp://ftp.cuhk.edu.hk/pub/packages/mail-server/postfix/official/postfix-2.8.0.tar.gz
[root@orcl tarbag]# wget http://vda.sourceforge.net/VDA/postfix-vda-2.8.0.patch //支持磁盘配额的补丁
[root@orcl tarbag]# tar -zxvf postfix-2.8.0.tar.gz -C ../software/
[root@orcl tarbag]# mv postfix-vda-2.8.0.patch ../software/postfix-2.8.0/
[root@orcl tarbag]# cd ../software/postfix-2.8.0/
[root@orcl postfix-2.8.0]# make clean
[root@orcl postfix-2.8.0]# make tidy
[root@orcl postfix-2.8.0]# patch -p1 < postfix-vda-2.8.0.patch
patching file README_FILES/VDA_README
patching file src/global/mail_params.h
patching file src/util/file_limit.c
patching file src/virtual/mailbox.c
patching file src/virtual/maildir.c
patching file src/virtual/virtual.c
patching file src/virtual/virtual.h
[root@orcl postfix-2.8.0]# make -f Makefile.init Makefiles 'CCARGS=-DHAS_MYSQL -I/usr/local/mysql/include/mysql -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/local/sasl2/include/sasl' 'AUXLIBS=-L/usr/local/mysql/lib/mysql -lmysqlclient -lz -lm -L/usr/local/sasl2/lib -lsasl2 -L/usr/local/BerkeleyDB/lib'
[root@orcl postfix-2.8.0]# make && make install
Please specify the prefix for installed file names. Specify this ONLY
if you are building ready-to-install packages for distribution to other
machines.
install_root: [/]
Please specify a directory for scratch files while installing Postfix. You
must have write permission in this directory.
tempdir: [/usr/local/src/software/postfix-2.8.0]
Please specify the final destination directory for installed Postfix
configuration files.
config_directory: [/etc/postfix] /usr/local/postfix/etc
Please specify the final destination directory for installed Postfix
administrative commands. This directory should be in the command search
path of adminstrative users.
command_directory: [/usr/sbin] /usr/local/postfix/sbin
Please specify the final destination directory for installed Postfix
daemon programs. This directory should not be in the command search path
of any users.
daemon_directory: [/usr/libexec/postfix] /usr/local/postfix/libexec
Please specify the final destination directory for Postfix-writable
data files such as caches or random numbers. This directory should not
be shared with non-Postfix software.
data_directory: [/var/lib/postfix] /usr/local/postfix/var/lib
Please specify the destination directory for the Postfix HTML
files. Specify "no" if you do not want to install these files.
html_directory: [no]
Please specify the owner of the Postfix queue. Specify an account with
numerical user ID and group ID values that are not used by any other
accounts on the system.
mail_owner: [postfix]
Please specify the final destination pathname for the installed Postfix
mailq command. This is the Sendmail-compatible mail queue listing command.
mailq_path: [/usr/bin/mailq]
Please specify the destination directory for the Postfix on-line manual
pages. You can no longer specify "no" here.
manpage_directory: [/usr/local/man] /usr/local/postfix/man
Please specify the final destination pathname for the installed Postfix
newaliases command. This is the Sendmail-compatible command to build
alias databases for the Postfix local delivery agent.
newaliases_path: [/usr/bin/newaliases]
Please specify the final destination directory for Postfix queues.
queue_directory: [/var/spool/postfix] /usr/local/postfix/var/spool
Please specify the destination directory for the Postfix README
files. Specify "no" if you do not want to install these files.
readme_directory: [no]
Please specify the final destination pathname for the installed Postfix
sendmail command. This is the Sendmail-compatible mail posting interface.
sendmail_path: [/usr/sbin/sendmail]
Please specify the group for mail submission and for queue management
commands. Specify a group name with a numerical group ID that is
not shared with other accounts, not even with the Postfix mail_owner
account. You can no longer specify "no" here.
setgid_group: [postdrop]
编译最后报错如下,找不到/etc/postfix/main.cf,后面通过软链接解决,这里直接无视!
postfix: fatal: open /etc/postfix/main.cf: No such file or directory
make: *** [install] Error 1
3:验证postfix是否支持sasl和mysql
[root@orcl postfix-2.8.0]# ls /usr/local/postfix/
etc libexec man sbin var
[root@orcl postfix-2.8.0]# ls /usr/local/postfix/etc/
access canonical LICENSE makedefs.out TLS_LICENSE
aliases generic main.cf master.cf transport
bounce.cf.default header_checks main.cf.default relocated virtual
[root@orcl ~]# mv /etc/aliases /tmp/aliases.old
[root@orcl ~]# ln -s /usr/local/postfix/etc/aliases /etc/
[root@orcl ~]# /usr/bin/newaliases
newaliases: fatal: open /etc/postfix/main.cf: No such file or directory
[root@orcl ~]# ln -s /usr/local/postfix/etc/main.cf /etc/po
[root@orcl ~]# mkdir /etc/postfix
[root@orcl ~]# ln -s /usr/local/postfix/etc/main.cf /etc/postfix/
[root@orcl ~]# /usr/bin/newaliases
[root@orcl ~]# /usr/local/postfix/sbin/postconf -a
cyrus
dovecot
[root@orcl ~]# /usr/local/postfix/sbin/postconf -m |grep mysql
mysql
4.配置并启动postfix
[root@orcl ~]# cp /usr/local/postfix/etc/main.cf /usr/local/postfix/etc/main.cf.orig
[root@orcl ~]# cat /etc/postfix/main.cf
##====================MAIN========================
myhostname = mail.yang.com
mydomain = yang.com
myorigin = $mydomain
mydestination =
inet_interfaces = all
mynetworks = 192.168.227.0/24,192.168.123.0/24,127.0.0.0/8
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
queue_directory = /usr/local/postfix/var/spool
command_directory = /usr/local/postfix/sbin
daemon_directory = /usr/local/postfix/libexec
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/postfix/man
sample_directory = /usr/local/postfix/etc/
readme_directory = no
unknown_local_recipient_reject_code = 550
##====================SASL========================
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,
permit
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous
smtpdsmtpd_sasl_application_name = smtpd
smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)
##================ Virtual Mailbox Settings =====================#
virtual_mailbox_base = /email/mailbox
virtual_mailbox_maps = mysql:/usr/local/postfix/etc/mysql_virtual_mailbox_maps.cf
virtual_mailbox_domains = mysql:/usr/local/postfix/etc/mysql_virtual_domains_maps.cf
virtual_alias_domains = virtual_alias_maps = mysql:/usr/local/postfix/etc/mysql_virtual_alias_maps.cf
virtual_uid_maps = static:1001
virtual_gid_maps = static:1001
virtual_transport = maildrop
maildrop_destination_recipient_limit = 1
maildrop_destination_concurrency_limit = 1
message_size_limit = 14336000
virtual_mailbox_limit = 20971520
virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
virtual_mailbox_limit_maps = mysql:/usr/local/postfix/etc/mysql_virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = Sorry, the user's maildir has overdrawn his diskspace quota, please Tidy your mailbox and try again later.
virtual_overquota_bounce = yes
[root@orcl ~]# cat /usr/local/postfix/etc/mysql_virtual_domains_maps.cf
user = extmail
password = 123456
hosts = localhost
dbname = extmail
table = domain
select_field = description
where_field = domain
additional_conditions = AND active = '1'
[root@orcl ~]# cat /usr/local/postfix/etc/mysql_virtual_mailbox_maps.cf
user = extmail
password = 123456
hosts = localhost
dbname = extmail
table = mailbox
select_field = maildir
where_field = username
additional_conditions = AND active = '1'
[root@orcl ~]# cat /usr/local/postfix/etc/mysql_virtual_alias_maps.cf
user = extmail
password = 123456
hosts = localhost
dbname = extmail
table = alias
select_field = goto
where_field = address
additional_conditions = AND active = '1'
[root@orcl ~]# cat /usr/local/postfix/etc/mysql_virtual_limit_maps.cf
user = extmail
password = 123456
hosts = localhost
dbname = extmail
table = mailbox
select_field = quota
where_field = username
additional_conditions = AND active = '1'
[root@orcl ~]# /usr/local/postfix/sbin/postfix start
postfix/postfix-script: fatal: no /etc/postfix/master.cf file found
postfix/postfix-script: fatal: Postfix integrity check failed!
[root@orcl ~]# ll /etc/postfix/main.cf
[root@orcl ~]# ln -s /usr/local/postfix/etc/master.cf /etc/postfix/
[root@orcl ~]# /usr/local/postfix/sbin/postfix start
postfix/postfix-script: starting the Postfix mail system
[root@orcl ~]# netstat -ntpl |grep :25
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 22089/master
五.安装Courier-IMAP
[root@orcl ~]# cd /usr/local/src/tarbag/
[root@orcl tarbag]# wget http://sourceforge.net/projects/courier/files/imap/4.9.3/courier-imap-4.9.3.tar.bz2/download
[root@orcl tarbag]# tar -jxvf courier-imap-4.9.3.tar.bz2 -C ../software/
[root@orcl tarbag]# cd ../software/courier-imap-4.9.3/
[root@orcl courier-imap-4.9.3]# ./configure --prefix=/usr/local/courier-imap --with-redhat --enable-unicode --disable-root-check --with-trashquota --without-ipv6 CPPFLAGS='-I/usr/local/courier-authlib/include' COURIERAUTHCONFIG='/usr/local/courier-authlib/bin/courierauthconfig'
[root@orcl courier-imap-4.9.3]# make && make install
[root@orcl courier-imap-4.9.3]# cd /usr/local/courier-imap/etc
[root@orcl etc]# cp imapd.dist imapd
[root@orcl etc]# cp pop3d.dist pop3d
[root@orcl etc]# cp imapd-ssl.dist imapd-ssl
[root@orcl etc]# cp pop3d-ssl.dist pop3d-ssl
[root@orcl etc]# egrep -i 'path|start' pop3d |grep -v '^#'
POP3DSTART=YES
MAILDIRPATH=/opt/mailbox
[root@orcl etc]# egrep -i 'path|start' imapd |grep -v '^#'
IMAPDSTART=YES
MAILDIRPATH=/opt/mailbox
[root@orcl etc]# cp /usr/local/src/software/courier-imap-4.9.3/courier-imap.sysvinit /etc/init.d/imapd
[root@orcl etc]# chmod +x /etc/init.d/imapd
[root@orcl etc]# chkconfig --add imapd
[root@orcl etc]# service imapd start
Starting Courier-IMAP server: imap pop3
[root@orcl etc]# netstat -ntpl |egrep '110|143'
tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN 14416/couriertcpd
tcp 0 0 0.0.0.0:143 0.0.0.0:* LISTEN 14410/couriertcpd
六: 安装maildrop
[root@orcl etc]# cd /usr/local/src/tarbag/
[root@orcl tarbag]# wget http://nchc.dl.sourceforge.net/project/courier/maildrop/2.5.4/maildrop-2.5.4.tar.bz2
[root@orcl tarbag]# yum -y install pcre-devel
[root@orcl tarbag]# tar -jxvf maildrop-2.5.4.tar.bz2 -C ../software/
[root@orcl maildrop-2.5.4]# ./configure --enable-sendmail=/usr/sbin/sendmail --enable-trusted-users='root vmail' --enable-syslog=1 --enable-maildirquota --enable-maildrop-uid=1001 --enable-maildrop-gid=1001 --with-trashquota --with-dirsync
[root@orcl maildrop-2.5.4]# make && make install
[root@orcl maildrop-2.5.4]# maildrop -v
maildrop 2.5.4 Copyright 1998-2005 Double Precision, Inc.
GDBM/DB extensions enabled.
Maildir quota extension are now always enabled.
This program is distributed under the terms of the GNU General Public
License. See COPYING for additional information.
[root@orcl maildrop-2.5.4]# cat /etc/maildroprc //该文件默认不存在
logfile "/var/log/maildrop.log"
[root@orcl maildrop-2.5.4]# touch /var/log/maildrop.log
[root@orcl maildrop-2.5.4]# chown vmail.vmail /var/log/maildrop.log
配置postfix支持maildrop
[root@orcl ~]# grep -2 -i 'maildrop' /etc/postfix/master.cf |grep -v '^#'
maildrop unix - n n - - pipe
flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}
[root@orcl ~]# egrep '1001|maildrop' /etc/postfix/main.cf
virtual_transport = maildrop
virtual_uid_maps = static:1001
virtual_gid_maps = static:1001
七:配置extman和extmail等
1:配置extman
[root@orcl ~]# mkdir -p /email/mailbox
[root@orcl ~]# chown -R vmail.vmail /email/mailbox/
[root@orcl ~]# chown -R vmail.vmail /email/mailbox/
[root@orcl tarbag]# tar -zxvf extman-1.1.tar.gz -C ../software/
[root@orcl tarbag]# mv ../software/extman-1.1/ /www/extman
[root@orcl tarbag]# mv /www/extman/webman.cf.default /opt/extman/webman.cf
[root@orcl ~]# grep -v '^#' /www/extman/webman.cf |grep -v '^$'
SYS_CONFIG = /www/extman/
SYS_LANGDIR = /www/extman/lang
SYS_TEMPLDIR = /www/extman/html
SYS_MAILDIR_BASE = /email/mailbox
SYS_SHOW_WARN = 0
SYS_SESS_DIR = /tmp/extman/
SYS_APP_TYPE = ExtMan
SYS_TEMPLATE_NAME = default
SYS_DEFAULT_EXPIRE = 1y
SYS_GROUPMAIL_SENDER = postmaster@extmail.org
SYS_DEFAULT_SERVICES = webmail,smtpd,smtp,pop3,netdisk
SYS_BACKEND_TYPE = mysql
SYS_CRYPT_TYPE = md5crypt
SYS_MYSQL_USER = extmail
SYS_MYSQL_PASS = 123456
SYS_MYSQL_DB = extmail
SYS_MYSQL_HOST = localhost
SYS_MYSQL_SOCKET = /tmp/mysql.sock
SYS_MYSQL_TABLE = manager
SYS_MYSQL_ATTR_USERNAME = username
SYS_MYSQL_ATTR_PASSWD = password
SYS_LDAP_BASE = dc=extmail.org
SYS_LDAP_RDN = cn=Manager,dc=extmail.org
SYS_LDAP_PASS = secret
SYS_LDAP_HOST = localhost
SYS_LDAP_ATTR_USERNAME = mail
SYS_LDAP_ATTR_PASSWD = userPassword
[root@orcl tarbag]# mkdir /tmp/extman
[root@orcl tarbag]# chown vmail.vmail /www/extman/
[root@orcl tarbag]# chown vmail.vmail /tmp/extman/
2:配置extmail
[root@orcl tarbag]# tar -zxvf extmail-1.2.tar.gz -C /www/
[root@orcl tarbag]# mv /www/extmail-1.2/ /www/extmail
[root@orcl ~]# cp /www/extmail/webmail.cf.default /www/extmail/webmail.cf
[root@orcl ~]# grep -v '^#' /www/extmail/webmail.cf |grep -v '^$'
SYS_CONFIG = /www/extmail/
SYS_LANGDIR = /www/extmail/lang
SYS_TEMPLDIR = /www/extmail/html
SYS_HTTP_CACHE = 0
SYS_SMTP_HOST = 127.0.0.1
SYS_SMTP_PORT = 25
SYS_LOG_FILE = /var/log/extmail.log
SYS_SESS_TIMEOUT = 0
SYS_SESS_COOKIE_ONLY = 1
SYS_USER_PSIZE = 10
SYS_USER_SCREEN = auto
SYS_USER_LANG = en_US
SYS_APP_TYPE = WebMail
SYS_USER_TEMPLATE = default
SYS_USER_CHARSET = utf-8
SYS_AUTH_TYPE = mysql
SYS_MAILDIR_BASE = /email/mailbox
SYS_AUTH_SCHEMA = virtual
SYS_CRYPT_TYPE = md5crypt
SYS_MYSQL_USER = extmail
SYS_MYSQL_PASS = 123456
SYS_MYSQL_DB = extmail
SYS_MYSQL_HOST = localhost
SYS_MYSQL_SOCKET = /tmp/mysql.sock
SYS_MYSQL_TABLE = mailbox
SYS_MYSQL_ATTR_USERNAME = username
SYS_MYSQL_ATTR_DOMAIN = domain
SYS_MYSQL_ATTR_PASSWD = password
SYS_MYSQL_ATTR_CLEARPW = clearpwd
[root@orcl ~]# chown -R vmail.vmail /www/extmail/
3:导入数据库文件:
[root@orcl ~]# cd /www/extman/docs/
[root@orcl docs]# /usr/local/mysql/bin/mysql -u root -p < extmail.sql
Enter password:
[root@orcl docs]# /usr/local/mysql/bin/mysql -u root -p < init.sql
Enter password:
root@orcl docs]# /usr/local/mysql/bin/mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.1.36-log Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| aclocal |
| extmail |
| mysql |
| test |
+--------------------+
5 rows in set (0.04 sec)
mysql> use extmail;
Database changed
mysql> show tables;
+-------------------+
| Tables_in_extmail |
+-------------------+
| alias |
| domain |
| domain_manager |
| mailbox |
| manager |
+-------------------+
5 rows in set (0.01 sec)
mysql> grant all privileges on extmail.* to extmail@'localhost' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
4:配置slockd
[root@orcl ~]# cd /usr/local/src/tarbag/
[root@orcl tarbag]# tar -zxvf slockd-0.99.tar.gz -C /usr/local/
[root@orcl tarbag]# /usr/local/slockd/slockd-init start
Starting spam locker daemon: slockd
[root@orcl tarbag]# echo '/usr/local/slockd/slockd-init start' >> /etc/rc.local
[root@orcl tarbag]# cd /var/run/
[root@orcl run]# mkdir extmail
[root@orcl run]# /www/extman/daemon/cmdserver -v -d
loaded ok
[root@orcl run]# echo '/www/extman/daemon/cmdserver -v -d' >> /etc/rc.local
八:配置apache
[root@orcl ~]# grep 'vmail' /usr/local/apache2.2.16/conf/httpd.conf
User vmail
Group vmail
<VirtualHost *:80>
ServerName mail.yang.com
DocumentRoot /www/extmail/html
ScriptAlias /extmail/cgi /www/extmail/cgi
Alias /extmail /www/extmail/html
ScriptAlias /extman/cgi /www/extman/cgi
Alias /extman /www/extman/html
<Directory /www>
Authtype basic
Options execcgi
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
[root@orcl ~]# /usr/local/apache2.2.16/bin/apachectl -t
Syntax OK
[root@orcl ~]# /usr/local/apache2.2.16/bin/apachectl -k restart
九:测试和排错, extman默认管理帐号为:root@extmail.org 密码为:extmail*123*
1:安装GD,若未安装,则会出现验证码无法正常显示
[root@orcl ~]# cd /usr/local/src/tarbag/
[root@orcl tarbag]# tar -zxvf GD-2.35.tar.gz -C ../software/
[root@orcl tarbag]# cd ../software/GD-2.35/
[root@orcl GD-2.35]# perl Makefile.PL
[root@orcl GD-2.35]# make && make install
2:出现下图中的情况,需要重新安装前面卸载掉的db4和db4-devel
[root@orcl ~]# yum -y install db4 db4-devel
3:出现下图中的情况,需要安装UNix-syslog
[root@orcl ~]# cd /usr/local/src/tarbag/
[root@orcl tarbag]# gzip -d Unix-Syslog-1.1.tar.gz
[root@orcl tarbag]# tar -xvf Unix-Syslog-1.1.tar -C ../software/
[root@orcl tarbag]# cd ../software/Unix-Syslog-1.1/
[root@orcl Unix-Syslog-1.1]# ls
Artistic Changes Makefile.PL MANIFEST META.yml README Syslog.pm Syslog.xs test.pl
[root@orcl Unix-Syslog-1.1]# perl Makefile.PL
Checking if your kit is complete...
Looks good
Writing Makefile for Unix::Syslog
[root@orcl Unix-Syslog-1.1]# make && make install
4:新建邮件域,登陆出错
安装perl-DBD-MySQL后重新登陆
[root@orcl ~]# yum -y install perl-DBD-MySQL
5: 发信测试
[root@orcl ~]# tail -f /var/log/maillog
Sep 5 16:05:31 orcl extmail[12523]: user=<admin@yang.com>, client=192.168.227.1, module=login, status=loginok
Sep 5 16:06:29 orcl postfix/smtpd[12555]: connect from localhost.localdomain[127.0.0.1]
Sep 5 16:06:29 orcl postfix/smtpd[12555]: B842123EFB4: client=localhost.localdomain[127.0.0.1]
Sep 5 16:06:29 orcl postfix/cleanup[12560]: B842123EFB4: message-id=<20110905080629.B842123EFB4@mail.yang.com>
Sep 5 16:06:29 orcl postfix/smtpd[12555]: disconnect from localhost.localdomain[127.0.0.1]
Sep 5 16:06:29 orcl postfix/qmgr[12286]: B842123EFB4: from=<admin@yang.com>, size=615, nrcpt=1 (queue active)
Sep 5 16:06:31 orcl postfix/smtp[12561]: B842123EFB4: to=<ylw6006@163.com>, relay=163mx03.mxmail.netease.com[123.125.50.140]:25, delay=2.2, delays=0.07/0/1.2/0.94, dsn=2.0.0, status=sent (250 Mail OK queued as mx47,XcCowGBps0bRgmROKP+GAw--.907S2 1315209938)
Sep 5 16:06:32 orcl postfix/qmgr[12286]: B842123EFB4: removed
6:extman日志分析
[root@orcl ~]# cd /usr/local/src/tarbag/
[root@orcl tarbag]# wget http://oss.oetiker.ch/rrdtool/pub/rrdtool-1.4.5.tar.gz
[root@orcl tarbag]# tar -zxvf rrdtool-1.4.5.tar.gz -C ../software/
[root@orcl tarbag]# cd ../software/rrdtool-1.4.5/
[root@orcl rrdtool-1.4.5]# ./configure --prefix=/usr/local/rrdtool
[root@orcl rrdtool-1.4.5]# make && make install
[root@orcl ~]# ln -s /usr/local/rrdtool/lib/perl/5.8.8/i386-linux-thread-multi/auto/RRDs/RRDs.so /usr/lib/perl5/5.8.8/i386-linux-thread-multi/
[root@orcl ~]# ln -s /usr/local/rrdtool/lib/perl/5.8.8/RRDp.pm /usr/lib/perl5/5.8.8/
[root@orcl ~]# ln -s /usr/local/rrdtool/lib/perl/5.8.8/i386-linux-thread-multi/RRDs.pm /usr/lib/perl5/5.8.8/
[root@orcl ~]# cp -r /www/extman/addon/mailgraph_ext/ /usr/local/
[root@orcl ~]# /usr/local/mailgraph_ext/mailgraph-init start
Starting mail statistics grapher: mailgraph_ext
Can't locate File/Tail.pm in @INC (@INC contains: /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.8/i386-linux-thread-multi /usr/lib/perl5/5.8.8 .) at /usr/local/mailgraph_ext/mailgraph_ext.pl line 296.
BEGIN failed--compilation aborted at /usr/local/mailgraph_ext/mailgraph_ext.pl line 296.
Starting queue statistics grapher: qmonitor
[root@orcl ~]# cpan
cpan> install File::Tail
cpan>quit
[root@orcl ~]# /usr/local/mailgraph_ext/mailgraph-init start
Starting mail statistics grapher: mailgraph_ext
Starting queue statistics grapher: qmonitor
[root@orcl ~]# echo '/usr/local/mailgraph_ext/mailgraph-init start' >> /etc/rc.local
十:增加FCGI支持,主要是为了获得优异的web效能
1:安装mod_fastcgi模块
[root@orcl ~]# cd /usr/local/src/tarbag/
[root@orcl tarbag]# wget http://www.fastcgi.com/dist/mod_fastcgi-2.4.6.tar.gz
[root@orcl tarbag]# tar -zxvf mod_fastcgi-2.4.6.tar.gz -C ../software/
[root@orcl tarbag]# cd ../software/mod_fastcgi-2.4.6/
[root@orcl mod_fastcgi-2.4.6]# cp Makefile.AP2 Makefile
[root@orcl mod_fastcgi-2.4.6]# make top_dir=/usr/local/apache2.2.16/ install
[root@orcl mod_fastcgi-2.4.6]# ls /usr/local/apache2.2.16/modules/mod_fastcgi.so
/usr/local/apache2.2.16/modules/mod_fastcgi.so
2:安装perl-FCGI模块,使extmail支持fastcgi
[root@orcl ~]# rpm -ivh http://ftp.belnet.be/packages/dries.ulyssis.org/redhat/el5/en/i386/RPMS.dries/perl-FCGI-0.67-1.2.el5.rf.i386.rpm //32位系统
[root@orcl ~]# rpm -ivh http://ftp.belnet.be/packages/dries.ulyssis.org/redhat/el5/en/x86_64/RPMS.dries/perl-FCGI-0.67-1.2.el5.rf.x86_64.rpm //64位系统
3:配置apache,extmail支持fastcgi
[root@orcl ~]# egrep 'fast|9000' /usr/local/apache2.2.16/conf/httpd.conf
LoadModule fastcgi_module modules/mod_fastcgi.so
<Ifmodule mod_fastcgi.c>
FastCgiExternalServer /var/www/extsuite/extmail/dispatch.fcgi -host 127.0.0.1:8888
</Ifmodule>
[root@orcl ~]# vi /usr/local/apache2.2.16/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
ServerName mail.yang.com
DocumentRoot /www/extmail/html
ScriptAlias /extmail/cgi /www/extmail/dispatch.fcgi
Alias /extmail /www/extmail/html
ScriptAlias /extman/cgi /www/extmail/dispatch.fcgi
Alias /extman /www/extman/html
<Location "/extman/cgi">
SetHandler fastcgi-script
</Location>
<Directory /www>
Authtype basic
Options execcgi
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
[root@orcl ~]# egrep 'vmail|www|9000' /www/extmail/dispatch-init
PORT=9000
SU_UID=vmail
SU_GID=vmail
BASE=/www/extmail
4:启动fastcgi server
[root@orcl ~]# /www/extmail/dispatch-init start
Starting extmail FCGI server...
[root@orcl ~]# ps -ef |grep dispatch
vmail 23661 1 0 09:43 ? 00:00:00 dispatch.fcgi (master)
vmail 23662 23661 0 09:43 ? 00:00:00 dispatch.fcgi (idle)
vmail 23663 23661 0 09:43 ? 00:00:00 dispatch.fcgi (idle)
root 23680 12093 0 09:43 pts/3 00:00:00 grep dispatch
[root@orcl ~]# netstat -ntpl |grep :9000
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 23811/dispatch.fcgi
[root@orcl ~]# echo '/www/extmail/dispatch-init start' >> /etc/rc.local
5:重启apache
[root@orcl ~]# /usr/local/apache2.2.16/bin/apachectl -t
Syntax OK
[root@orcl ~]# /usr/local/apache2.2.16/bin/apachectl -k restart
备注:本文的安装过程非常繁琐,需要用到的软件也很多,因而在本文中没有提供下载地址的软件将会统一打包放在附件中,后期会重点研究下垃圾邮件过滤和邮件病毒的查杀;另外,本文参考了胡双峰同学写的博文,在此深表感谢,双峰同学博客地址:http://blog.csdn.net/deccmtd/
附件:http://down.51cto.com/data/2358866
©著作权归作者所有:来自51CTO博客作者ylw6006的原创作品,谢绝转载,否则将追究法律责任
休闲postfixfastcgiWorkSpace
共同学习,写下你的评论
评论加载中...
作者其他优质文章