在centos 5.0下用源码编译安装extmail
centos 5.0 + postfix + cyrus-sasl + courier-authlib + courier-imap + extmail + spamassassin + amavisd + clamav
这篇安装文档是在何老大的安装文档基础上,并参考了网上的其他文章,在我自己的实际安装过程中记录下来的。在centos5下用何老大的安装
包会出现一些问题,所以就冒着被拍砖的危险写了这篇文章,水平有限,只是给初学者作为参考,少走弯路。
安装之前:
在安装之前,请先阅读何老大的安装文档,明析安装思路和各软件之间的协作关系。
http://www.extmail.org/docs/extmail_solution_linux/
准备工作:
install centos(可以通过grub+http的方式从mirror.be10.com等镜像站点安装,速度飞快!!!) //只安装httpd exim等
vi /etc/selinux/config
selinux=disabled
service iptables stop
chkconfig --del iptables
vi /etc/yum.repos.d/CentOS-Base.repo配置镜像站点为
http://mirror.be10.com(最近一段时间又好用了)
yum install perl-*
yum install gcc-*
yum install compat-*
yum install lib*
请下载下述安装过程中的最新软件包
安装perl及必要的包(最好用perl -MCPAN -e shell来安装),如下:
rpm -ivh RPMS/perl-Digest-SHA1-2.07-5.i386.rpm
rpm -ivh RPMS/perl-Digest-HMAC-1.01-1hzq.i386.rpm
rpm -ivh RPMS/perl-Net-IP-1.24-1hzq.i386.rpm
rpm --nodeps -ivh RPMS/perl-Net-DNS-0.59-1hzq.i386.rpm
rpm -ivh RPMS/perl-Time-HiRes-1.72-1hzq.i386.rpm
rpm -ivh RPMS/perl-HTML-Tagset-3.03-30.noarch.rpm
rpm -ivh RPMS/perl-HTML-Parser-3.35-6.i386.rpm
rpm -ivh RPMS/spamassassin-3.0.6-1.el4.i386.rpm
rpm -ivh RPMS/perl-IO-Stringy-2.110-1hzq.i386.rpm
rpm -ivh RPMS/perl-IO-Multiplex-1.08-1hzq.i386.rpm
rpm -ivh RPMS/perl-Net_SSLeay.pm-1.30-1hzq.i386.rpm
rpm -ivh RPMS/perl-IO-Socket-SSL-0.97-1hzq.i386.rpm
rpm -ivh RPMS/perl-Net-Server-0.93-1hzq.i386.rpm
rpm -ivh RPMS/perl-Unix-Syslog-0.100-1hzq.i386.rpm
rpm -ivh RPMS/perl-TimeDate-1.16-1hzq.i386.rpm
rpm -ivh RPMS/perl-MailTools-1.67-1hzq.i386.rpm
rpm -ivh --force RPMS/perl-MIME-Base64-3.05-1hzq.i386.rpm
rpm -ivh RPMS/perl-Convert-BinHex-1.119-1hzq.i386.rpm
rpm -ivh RPMS/perl-MIME-Tools-5.418-1hzq.i386.rpm
rpm -ivh RPMS/perl-BerkeleyDB-0.26-1hzq.i386.rpm
rpm -ivh RPMS/perl-Convert-TNEF-0.17-1hzq.i386.rpm
rpm -ivh RPMS/perl-Convert-UUlib-1.051-1hzq.i386.rpm
rpm -ivh RPMS/perl-Compress-Zlib-1.41-1hzq.i386.rpm
rpm -ivh RPMS/perl-Archive-Zip-1.16-1hzq.i386.rpm
rpm -ivh RPMS/perl-IO-Zlib-1.04-1hzq.i386.rpm
rpm -ivh RPMS/perl-Archive-Tar-1.26-1hzq.i386.rpm
rpm -ivh RPMS/arc-5.21o-1hzq.i386.rpm RPMS/zoo-2.10-9hzq.i386.rpm RPMS/unarj-2.65-49hzq.i386.rpm
1. install mysql
# groupadd mysql
# useradd -g mysql -s /bin/false -c 'Mysql user' mysql
# tar xzvf mysql-5.0.37.tar.gz
# cd mysql-5.0.37
# yum install ncurses-*
# ./configure --prefix=/usr/local/mysql --with-unix-socket-path=/var/lib/mysql/mysql.sock
# make CC=gcc
# make install
# cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf
# /usr/local/mysql/bin/mysql_install_db --user=mysql
# chown -R mysql.mysql /usr/local/mysql
# cp /usr/local/mysql/share/mysql/mysql.server /etc/rc.d/init.d/mysqld
# chkconfig --add mysqld
# chkconfig mysqld on
# service mysqld restart
# vi /etc/ld.so.conf
/usr/local/mysql/lib/mysql //增加该行,否则postfix编译不过去
# ldconfig
2. install courier-authlib
# tar jxvf courier-authlib-0.59.tar.bz2
# cd courier-authlib-0.59
# yum install gdbm-*
# ./configure --prefix=/usr/local/courier-authlib --without-stdheaderdir --without-authuserdb --without-authpam
--without-authldap --without-authpwd --without-authshadow --without-authvchkpw --without-authpgsql --without-authcustom
--with-authmysql --with-mysql-libs=/usr/local/mysql/lib/mysql --with-mysql-includes=/usr/local/mysql/include/mysql
--with-redhat
# make
# make install
# make install-configure
# vi /etc/ld.so.conf
/usr/local/courier-authlib/lib/courier-authlib //增加该行
# ldconfig
# vi /usr/local/courier-authlib/etc/authlib/authmysqlrc (内容最好从HZQBBC老大写的安装文档中复制)
MYSQL_SERVER localhost
MYSQL_USERNAME extmail
MYSQL_PASSWORD extmail
MYSQL_SOCKET /var/lib/mysql/mysql.sock
MYSQL_PORT 3306
MYSQL_OPT 0
MYSQL_DATABASE extmail
MYSQL_USER_TABLE mailbox
MYSQL_CRYPT_PWFIELD password
MYSQL_UID_FIELD uidnumber
MYSQL_GID_FIELD gidnumber
MYSQL_LOGIN_FIELD username
MYSQL_HOME_FIELD homedir
MYSQL_NAME_FIELD name
MYSQL_MAILDIR_FIELD maildir
MYSQL_QUOTA_FIELD quota
MYSQL_SELECT_CLAUSE SELECT username,password,"",uidnumber,gidnumber,\
CONCAT('/home/domains/',homedir), \
CONCAT('/home/domains/',maildir), \
quota, \
name \
FROM mailbox \
WHERE username = '$(local_part)@$(domain)'
# vi /etc/rc.d/rc.local
/usr/local/courier-authlib/sbin/authdaemond start //增加该行
# /usr/local/courier-authlib/sbin/authdaemond start
# chown -R daemon.daemon /usr/local/courier-authlib/var/spool/authdaemon/socket
# chmod 700 /usr/local/courier-authlib/var/spool/authdaemon/
3. install cyrus-sasl
# tar xzvf cyrus-sasl-2.1.12.tar.gz
# cd cyrus-sasl-2.1.12
# rpm -e --nodeps cyrus-sasl-2.1.10-4 cyrus-sasl-plain-2.1.10-4 cyrus-sasl-md5-2.1.10-4 cyrus-sasl-devel-2.1.10-4
# rm -rf /usr/lib/sasl
# rm -rf /usr/lib/sasl2
# yum install openssl-*
# ./configure --enable-plain --enable-cram --enable-digest --enable-login --enable-sql --disable-anon --disable-ntlm
--disable-gssapi --disable-krb4 --disable-otp --disable-srp --disable-srp-setpass
--with-authdaemond=/usr/local/courier-authlib/var/spool/authdaemon/socket --with-mysql=/usr/local/mysql
--with-mysql-includes=/usr/local/mysql/include/mysql --with-mysql-libs=/usr/local/mysql/lib/mysql
# make CC=gcc
# make install
# ln -s /usr/local/lib/sasl2 /usr/lib/sasl2
# vi /etc/ld.so.conf
/usr/local/lib //增加该行
# ldconfig
# vi /usr/local/lib/sasl2/smtpd.conf
pwcheck_method: authdaemond
log_level: 3
mech_list: PLAIN LOGIN
authdaemond_path:/usr/local/courier-authlib/var/spool/authdaemon/socket
4. install postfix
# yum install db*-devel*
# tar xzvf postfix-2.5-20070423.tar.gz
# cd postfix-2.5-20070423
# make tidy
# groupadd postfix -g 54321 //如果原来系统中有该用户则不需要再建
# groupadd postdrop
# useradd -s /bin/fase -u 54321 -g postfix -G postdrop postfix
# make makefiles 'CCARGS=-DHAS_MYSQL -I/usr/local/mysql/include/mysql -DUSE_CYRUS_SASL -DUSE_SASL_AUTH
-I/usr/local/include/sasl' 'AUXLIBS=-L/usr/local/mysql/lib/mysql -lmysqlclient -lm -lz -L/usr/local/lib -lsasl2'
# make
# make install //提示时只更改/tmp
# mv /etc/aliases /etc/aliases.old
# ln -s /etc/postfix/aliases /etc/aliases
# echo 'root:admin@example.com'>>/etc/postfix/aliases
# /usr/bin/newaliases
# postconf -n > /etc/postfix/main2.cf
# mv /etc/postfix/main.cf /etc/postfix/main.cf.old
# mv /etc/postfix/main2.cf /etc/postfix/main.cf
# vi /etc/postfix/main.cf
# hostname
mynetworks = 127.0.0.1
myhostname = mail.extmail.org
mydestination = $mynetworks $myhostname
# banner
mail_name = Postfix - by extmail.org
smtpd_banner = $myhostname ESMTP $mail_name
# response immediately
smtpd_error_sleep_time = 0s
unknown_local_recipient_reject_code = 450
# extmail config here
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_transport = maildrop:
5. install maildrop
# tar jxvf maildrop-2.0.4.tar.bz2
# cd maildrop-2.0.4
# yum install pcre-*
# ln -s /usr/local/courier-authlib/bin/courierauthconfig /usr/bin/courierauthconfig
# groupadd -g 1000 vgroup
# useradd -g 1000 -u 1000 -s /bin/false vuser
# ./configure --enable-sendmail=/usr/sbin/sendmail --enable-trusted-users='root vuser' --enable-syslog=1
--enable-maildirquota --enable-maildrop-uid=1000 --enable-maildrop-uid=1000 --with-trashquota --with-dirsync
# make
# make install
# maildrop -v //检查信息,如果有courier-authlib则表示安装成功
# vi /etc/maildroprc
# test if $HOME/.mailfilter exist and readable
`test -r "$HOME/.mailfilter" && exit 1 || exit 0`
if ( $RETURNCODE == 1 )
{
include "$HOME/.mailfilter"
}
#*spam2junk
if (/^X-Spam-Flag:.*YES/)
{
`test -f "$HOME/Maildir/.Junk" && exit 1 || exit 0`
if ( $RETURNCODE == 0 )
{
`maildirmake -f Junk "$HOME/Maildir"`
}
to "$HOME/Maildir/.Junk/"
}
#default to $HOME/Maildir/
to "$HOME/Maildir/"
6. install courier-imap
# tar jxvf courier-imap-4.1.3.tar.bz2
# cd courier-imap-4.1.3
# ./configure --prefix=/usr/local/courier-imap --with-redhat --enable-unicode --disable-root-check --with-trashquota
--without-ipv6 COURIERAUTHCONFIG='/usr/local/courier-authlib/bin/courierauthconfig'
# make
# make install
# cp /usr/local/courier-imap/etc/imapd.dist /usr/local/courier-imap/etc/imapd
# cp /usr/local/courier-imap/etc/imapd-ssl.dist /usr/local/courier-imap/etc/imapd-ssl
# cp /usr/local/courier-imap/etc/pop3d.dist /usr/local/courier-imap/etc/pop3d
# cp /usr/local/courier-imap/etc/pop3d-ssl.dist /usr/local/courier-imap/etc/pop3d-ssl
# vi /usr/local/courier-imap/etc/pop3d
POP3DSTART=yes
# vi /usr/local/courier-imap/etc/imapd
IMAPDSTART=yes
# cp courier-imap.sysvinit /etc/rc.d/init.d/imapd
# chmod 755 /etc/rc.d/init.d/imapd
# chkconfig --add imapd
# chkconfig imapd on
7. install httpd
# yum install httpd-* //包括httpd-devel
8. install amavisd
# 安装必要的perl包
# wget
http://dag.wieers.com/rpm/packag ... 1.2.el5.rf.i386.rpm
# rpm -ivh perl-Unix-Syslog-0.100-1.2.el5.rf.i386.rpm
# groupadd clamav
# useradd -g clamav -s /bin/false -c "Clam AntiVirus" clamav
# mkdir /var/amavis
# mkdir /var/amavis/tmp /var/amavis/var /var/amavis/db /var/amavis/home
# chown -R clamav.clamav /var/amavis
# chmod -R 750 /var/amavis
# cp amavisd /usr/local/sbin/
# chown root /usr/local/sbin/amavisd
# chmod 755 /usr/local/sbin/amavisd
# cp amavisd.conf /etc/
# chown root.clamav /etc/amavisd.conf
# chmod 640 /etc/amavisd.conf
# vi /etc/amavisd.conf
$max_servers = 10; # num of pre-forked children (2..15 is common), -m
$daemon_user = 'clamav'; # (no default; customary: vscan or amavis), -u
$daemon_group = 'clamav'; # (no default; customary: vscan or amavis), -g
$MYHOME = '/var/amavis';
$TEMPBASE = "$MYHOME/tmp";
$db_home = "$MYHOME/db";
增加对clamav杀毒软件的支持,打开clamav
$max_servers = 10;
$sa_spam_subject_tag = '[SPAM] ';
$mydomain = 'mail.extmail.org';
$myhostname = 'mail.extmail.org';
@local_domains_maps = qw(.);
$sa_tag2_level_deflt = 5.0;
$sa_kill_level_deflt = 5.0;
$final_virus_destiny = D_DISCARD;
$final_banned_destiny = D_BOUNCE;
$final_spam_destiny = D_PASS;
$final_bad_header_destiny = D_PASS;
$sa_spam_modifies_subj = 0; # don't modify subject
$remove_existing_x_scanned_headers= 1; # remove existing headers
$remove_existing_spam_headers = 1;
# cp amavisd_init.sh /etc/rc.d/init.d/amavisd
# chkconfig --add amavisd
# chkconfig amavisd on
# service amavisd restart
9. install spamassassin
# perl -MCPAN -e 'install Mail::SpamAssassin'
# vi /etc/mail/spamassassin/local.cf
report_safe 1
use_bayes 0
auto_learn 0
bayes_auto_expire 1
skip_rbl_checks 1
use_razor2 0
use_dcc 0
use_pyzor 0
dns_available no
# cd /etc/mail/spamassassin/
# wget -N -P /usr/share/spamassassin
www.ccert.edu.cn/spam/sa/Chinese_rules.cf
# crontab -e
0 0 1 * * wget -N -P /usr/share/spamassassin
www.ccert.edu.cn/spam/sa/Chinese_rules.cf; /etc/init.d/amavisd restart
10. install clamav
# ./configure --sysconfdir=/etc
# make
# make install
# vi /etc/clamd.conf 设置一些选项
# Example
LocalSocket /var/run/clamav/clamd.sock
#TCPSocket 3310
# touch /var/log/freshclam.log
# chmod 600 /var/log/freshclam.log
# chown clamav.clamav /var/log/freshclam.log
# freshclam -d 加入自启动,更新 也可以通过crontab -e
0 4 * * * /usr/local/bin/freshclam --quiet
# 保证 /var/spool/vscan 目录的属性为 rwx------ amavis.root
# clamd 直接运行或加入自启动
12. install extmail and extman
# mkdir /var/www/extsuite
# cp -r src/extmail-1.0.2 /var/www/extsuite/extmail
# cd /var/www/extsuite/extmail
# cp webmail.cf.default webmail.cf
# vi /var/www/extsuite/extmail/webmail.cf //注意密码的加密方式
:1, $ s#/var/www/cgi-bin#/var/www/extsuite#g
SYS_USER_LANG = zh_CN
SYS_USER_CHARSET = gb2312
SYS_MFILTER_ON = 1
SYS_NETDISK_ON = 1
SYS_MYSQL_USER = extmail
SYS_MYSQL_PASS = extmail
SYS_MYSQL_DB = extmail
SYS_G_ABOOK_TYPE = file
SYS_G_ABOOK_FILE_CHARSET = gb2312
SYS_SESS_DIR = /tmp/extman
# chown -R vuser.vgroup /var/www/extsuite/extmail/cgi/
# cp -r src/extman-0.2.2 /var/www/extsuite/extman/
# vi /var/www/extsuite/extman/webman.cf //注意密码的加密方式
:1, $ s#/var/www/cgi-bin#/var/www/extsuite#g
SYS_CHARSET = gb2312
SYS_LANG = zh_CN
SYS_SESS_DIR = /tmp/extman
# chown -R vuser.vgroup /var/www/extsuite/extman/cgi/
# cp /var/www/extsuite/extman/docs/mysql_* /etc/postfix/
# mysql -u root -p < /var/www/extsuite/extman/docs/extmail.sql
# mysql -u root -p < /var/www/extsuite/extman/docs/init.sql
# cd /var/www/extsuite/extman/libs/Ext
# ./buildpkg.sh build /var/www/extsuite/extmail/libs/Ext
# mkdir /tmp/extman
# chown -R vuser.vgroup /tmp/extman
# cd /var/www/extsuite/extman/tools
# ./maildirmake.pl /home/domains/extmail.org/test/Maildir
# chown -R vuser:vgroup /home/domains/extmail.org
//最后检查一下mysql.sock的路径是否在/var/lib/mysql/mysql.sock
12. 对上述安装的文件进行配置
# vi /etc/postfix/master.cf
maildrop unix - n n - - pipe
#flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}
flags=DRhu user=vuser argv=maildrop -w 90 -d ${user}@${nexthop} ${recipient} ${user} ${extension} {nexthop}
# vi /etc/postfix/main.cf
maildrop_destination_recipient_limit = 1 //增加该行
# vi /etc/httpd/conf/httpd.conf
#AddDefaultCharset UTF-8 //将该行注释掉
# vi /etc/httpd/conf/httpd.conf //在最后一行加上以下两行
NameVirtualHost *:80
Include conf/vhost_*.conf
# vi /etc/httpd/conf/vhost_extmail.conf
# VirtualHost for ExtMail Solution
<VirtualHost *:80>
ServerName mail.extmail.org
DocumentRoot /var/www/extsuite/extmail/html/
ScriptAlias /extmail/cgi/ /var/www/extsuite/extmail/cgi/
Alias /extmail/ /var/www/extsuite/extmail/html/
ScriptAlias /extman/cgi/ /var/www/extsuite/extman/cgi/
Alias /extman/ /var/www/extsuite/extman/html/
# Suexec config
SuexecUserGroup vuser vgroup
</VirtualHost>
13. install mailgraph_ext
# rpm -ivh RPMS/rrdtool-1.2.12-1hzq.i386.rpm RPMS/perl-rrdtool-1.2.12-1hzq.i386.rpm
# cp -r /var/www/extsuite/extman/addon/mailgraph_ext/ /usr/local/mailgraph_ext/
# perl -MCPAN -e 'install File::Tail'
# /usr/local/mailgraph_ext/mailgraph-init start
# /usr/local/mailgraph_ext/qmonitor-init start
# echo "/usr/local/mailgraph_ext/mailgraph-init start" >> /etc/rc.d/rc.local
# echo "/usr/local/mailgraph_ext/qmonitor-init start" >> /etc/rc.d/rc.local
14. 继续配置
# /etc/postfix/main.cf //for sasl
# smtpd related config
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_non_fqdn_hostname,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unauth_destination,
reject_unauth_pipelining,
reject_invalid_hostname,
# SMTP AUTH config here
broken_sasl_auth_clients = yes
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous
# vi /etc/postfix/aliases
virusalert: root
spam.police: root
postfix:
test@extmail.org
# /usr/bin/newaliases
# vi /etc/postfix/master.cf //for amavisd
127.0.0.1:10025 inet n - n - - smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks=127.0.0.0/8
-o strict_rfc821_envelopes=yes
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
-o receive_override_options=
# vi /etc/postfix/main.cf //for amavisd
# Content-Filter
content_filter = smtp:[127.0.0.1]:10024
receive_override_options = no_address_mappings
15. install mod_fastcgi
# perl -MCPAN -e 'install FCGI'
# tar xzvf mod_fastcgi-2.4.2.tar.gz
# cd mod_fastcgi-2.4.2
# wget
http://cnzxh.net/blog/files/6_1136774582_apache_2.2.patch
# patch -p1 < 6_1136774582_apache_2.2.patch
# cp Makefile.AP2 Makefile
# make top_dir=/usr/lib/httpd install //也可以直接编辑Makefile文件设置
# vi /etc/httpd/conf/vhost_extmail.conf
LoadModule fastcgi_module modules/mod_fastcgi.so //此四行为增加到文件之后
<Ifmodule mod_fastcgi.c>
FastCgiExternalServer /usr/bin/dispatch.fcgi -host 127.0.0.1:8888
</Ifmodule>
ScriptAlias /extmail/cgi/ /var/www/extsuite/extmail/cgi/ //删除
Alias /extmail/cgi/ /usr/bin/dispatch.fcgi/ //删除的一行改为此四行
<Location "/extmail/cgi">
SetHandler fastcgi-script
</Location>
# vi /var/www/extsuite/extmail/dispatch-init
BASE=/var/www/extsuite/extmail //更改
# echo "/var/www/extsuite/extmail/dispatch-init start" >> /etc/rc.d/rc.local
# reboot
16. 启动
# iptables --flush
# service mysqld restart
# /usr/local/courier-authlib/sbin/authdaemond start
# service imapd start
# freshclam d
# clamd
# service amavisd start
# postfix start
# /usr/local/mailgraph_ext/mailgraph-init start
# /usr/local/mailgraph_ext/qmonitor-init start
# /var/www/extsuite/extmail/dispatch-init start
# service httpd start
extmail:
http://mail.extmail.org/extmail/
user: postmaster
pass: extmail
extman:
http://mail.extmail.org/extman/
superuser:
root@extmail.org
password: extmail*123*
//注:整个安装过程中,请注意mysql.sock的位置在/var/lib/mysql/mysql.sock
//修改mysql中root,extmail密码