到目前为止,extmail官方还没有出centos6的包,网上有些用rpm来安装centos6下extmail的缺少安装包,即使这样装了,还是有好多问题,下面在centos5上面装了一个extmail。安装之前,把selinux关闭掉,iptable暂时关闭,等extmail都配置好了,在开放需要开放的端口
一,extmail包含的软件包
操作系统 CentOS 5.5 CentOS和RHEL是一样的,而且升级免费
邮件传输代理(MTA) Postfix 邮件系统主程序
WebMail 系统 Extmail 支持多语言、全部模板化,功能基本齐全
Web 账户管理后台 Extman 支持无限域名、无限用户
邮件投递代理(MDA) maildrop 支持过滤和强大的功能
其它数据认证库 courier-authlib 负责courier-imap,maildrop 的认证
SMTP 认证库 cyrus-sasl 标准的SASL实现库,支持courier authlib
POP3 认证库 courier-imap Pop3 ,IMAP 认证功能
二,配置extmail源,新增加一个文件EMOS-Base.repo
[[email protected] ~]# cat /etc/yum.repos.d/EMOS-Base.repo# EMOS-Base.repo#
# Created by ExtMail Dev Team: http://www.extmail.org/
#
# $Id$
[EMOS-base]
name=EMOS-Base
baseurl=http://mirror.extmail.org/yum/emos/1.5/os/$basearch/
gpgcheck=0
priority=0
protect=0
[EMOS-update]
name=EMOS-Updates
baseurl=http://mirror.extmail.org/yum/emos/1.5/updates/$basearch/
gpgcheck=0
priority=0
protect=0
不用extmail源,extmail中的很多包是找不到的。添加好了后别忘了yum clean all
三,安装extmail相关软件包
安装前先把sendmail清理掉,centos5系统默认安装的是sendmail
rpm -e --nodeps sendmail
yum install nginx postfix mysql mysql-server courier-authlib courier-authlib-mysql courier-imap maildrop cyrus-saslcyrus-sasl-lib cyrus-sasl-plain cyrus-sasl-devel extsuite-webmail extsuite-webman spawn-fcgi fcgi-devel fcgi
Dependencies Resolved //部分数据包如下
===============================================================================================================================
Package Arch Version Repository Size
===============================================================================================================================
Installing:
courier-authlib i386 0.62.2-1 EMOS-base 136 k
courier-authlib-mysql i386 0.62.2-1 EMOS-base 13 k
courier-imap i386 4.5.0-3 EMOS-base 382 k
cyrus-sasl i386 2.1.22-8 EMOS-base 77 k
cyrus-sasl-devel i386 2.1.22-8 EMOS-base 350 k
cyrus-sasl-lib i386 2.1.22-8 EMOS-base 1.1 M
extsuite-webmail noarch 1.1.0-1hzq EMOS-base 720 k
extsuite-webman noarch 1.0.1-2hzq EMOS-base 605 k
maildrop i386 2.0.4-3qk EMOS-base 282 k
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
安装时如果报错以下错误
Error: Missing Dependency: cyrus-sasl-lib = 2.1.22-5.el5_4.3 is needed by package cyrus-sasl-md5-2.1.22-5.el5_4.3.i386 (installed)
解决方法如下:
rpm -e --nodeps cyrus-sasl
rpm -e --nodeps cyrus-sasl-md5
rpm -e --nodeps cyrus-sasl-lib
安装fcgiwrap,它是用来运行perl的cgi程序的,extmail是用perl写的,当时装nagios的时候,装过一次,nagios也是perl写的。
fcgiwrap下载地址 http://github.com/gnosek/fcgiwrap/tarball/master
[[email protected] download]# tar zxvf 你下载的版本.tar.gz[[email protected] download]# cd gnosek-fcgiwrap-1328862/
[[email protected] gnosek-fcgiwrap-1328862]# autoreconf -i
[[email protected] gnosek-fcgiwrap-1328862]# ./configure
[[email protected] gnosek-fcgiwrap-1328862]# make
gcc -std=gnu99 -Wall -Wextra -Werror -pedantic -O2 -g3 fcgiwrap.c -o fcgiwrap -lfcgi
[[email protected] gnosek-fcgiwrap-1328862]# cp fcgiwrap /usr/local/bin/
三,配置postfix
[[email protected] postfix]# cat /etc/postfix/main.cf |awk '{if($0 !~ /^$/ && $0 !~ /^#/) {print $0}}'queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
mail_owner = postfix
myhostname = localhost
mydomain = 51yip.com
myorigin = $mydomain
inet_interfaces = all
inet_protocols = all
mydestination = $myhostname, localhost.$mydomain, localhost,$mydomain
local_recipient_maps =
unknown_local_recipient_reject_code = 550
mynetworks = 192.168.0.0/24, 127.0.0.0/8
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
smtpd_banner = $myhostname ESMTP unknow
debug_peer_level = 2
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
ddd $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /etc/postfix
readme_directory = /usr/share/doc/postfix-2.6.2-documentation/readme
##################cyrus-sasl##################
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_sasl_security_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_sender_restrictions = permit_mynetworks,reject_sender_login_mismatch,reject_authenticated_sender_login_mismatch,reject_unauthenticated_sender_login_mismatch
smtpd_sender_login_maps = mysql:/etc/postfix/mysql_virtual_sender_maps.cf,mysql:/etc/postfix/mysql_virtual_alias_maps.cf
##################cyrus-sasl##################
message_size_limit = 15728640
mailbox_transport = lmtp:unix:/var/lib/imap/socket/lmtp
##################maildrop##################
//由于maildrop不支持一次接收多个收件人,所以要添加一下以下内容
maildrop_destination_recipient_limit = 1
##################maildrop##################
##################extman##################
//配置虚拟域和虚拟用户
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:
##################extman##################
配置extmail包的时候,好多地方要配置main.cf,上面我已经注明了,在这里参数就没有详细了,前段时间 在centos6下面搭过postfix里面有部分参数说明,请参考:postfix 安装配置详解
三,配置courier-authlib
1,修改mysql的连接文件authmysqlrc
[[email protected] postfix]# cat /etc/authlib/authmysqlrc |awk '{if($0 !~ /^$/ && $0 !~ /^#/) {print $0}}'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)'
2,修改authmysqlrc权限
[[email protected] postfix]# chown daemon.daemon /etc/authlib/authmysqlrc
[[email protected] postfix]# chmod 660 /etc/authlib/authmysqlrc
3,extmail加载数据库连接模块
vim /etc/authlib/authdaemonrc
//找到相应地方,改成如下内容
authmodulelist="authmysql"
authmodulelistorig="authmysql"
4,改变authdaemon权限
[[email protected] authlib]# chmod 755 /var/spool/authdaemon/
四,配置maildrop
在安装maildrop的时候,系统会自动创建vuser用户及vgroup用户组,专门用于邮件的存储
1,修改/etc/postfix/master.cf
maildrop unix - n n - - pipe //63行,改成这样flags=DRhu user=vuser argv=maildrop -w 90 -d ${user}@${nexthop} ${recipient} ${user} ${extension} {nexthop} //72行,改成这样
五,配置Extmail
cd /var/www/extsuite/extmail
cp webmail.cf.default webmail.cf
vim webmail.cf
更改成下面的内容
SYS_MYSQL_USER = extmail
SYS_MYSQL_PASS = extmail
SYS_MYSQL_DB = extmail
//nginx启动用户我会改vuser:vgroup,所以这里的目录权限也要改一下
chown -R vuser:vgroup /var/www/extsuite/extmail/cgi/
六,配置Extman
1,修改权限
//nginx启动用户我会改vuser:vgroup,所以这里的目录权限也要改一下
chown -R vuser:vgroup /var/www/extsuite/extman/cgi/
2,配置基本库目录
//链接基本库到Extmail
mkdir /tmp/extman
chown -R vuser:vgroup /tmp/extman
3,数据库初始化
/etc/init.d/mysqld start
vim /var/www/extsuite/extman/docs/init.sql
:1,$s/extmail.org/51yip.com/g //默认是extmail.org,在这里要换成自己的域名
//敢入数据库
[[email protected] docs]# mysql -u root -p < /var/www/extsuite/extman/docs/extmail.sql
Enter password:
[[email protected] docs]# mysql -u root -p < /var/www/extsuite/extman/docs/init.sql
Enter password:
4,copy虚拟域和虚拟用户的配置文件
cd /var/www/extsuite/extman/docs
[[email protected] docs]# cp mysql_virtual_alias_maps.cf mysql_virtual_sender_maps.cf
mysql_virtual_domains_maps.cf mysql_virtual_mailbox_maps.cf /etc/postfix/
如果出现下面的,就证明成功了,extmail的服务都启动后在测试
[[email protected] authlib]# authtest -s login [email protected] extmail
Authentication succeeded.
Authenticated: [email protected] (uid 1000, gid 1000)
Home Directory: /home/domains/51yip.com/postmaster
Maildir: /home/domains/51yip.com/postmaster/Maildir/
Quota: 104857600S
Encrypted Password: $1$phz1mRrj$3ok6BjeaoJYWDBsEPZb5C0
Cleartext Password: extmail
Options: (none)
如果报以下错误 Authentication FAILED: Input/output error,请检查authmysqlrc这个文件是不是配置正确,这个问题挡了我有2个多小时。
七, 配置Extman后台的图形化日志功能
启动mailgraph_ext
/usr/local/mailgraph_ext/mailgraph-init start
启动cmdserver(在后台显示系统信息)
/var/www/extsuite/extman/daemon/cmdserver -v -d
加入开机自启动:
echo "/usr/local/mailgraph_ext/mailgraph-init start" >> /etc/rc.local
echo "/var/www/extsuite/extman/daemon/cmdserver -v -d" >> /etc/rc.local
八,配置Courier-imap
vim /usr/lib/courier-imap/etc/imapd
IMAPDSTART=NO //把YES改成NO
vim /usr/lib/courier-imap/etc/imapd-ssl
IMAPDSSLSTART=NO //把YES改成NO
九,配置cyrus-sasl
[[email protected] extman]# cat /usr/lib/sasl2/smtpd.confpwcheck_method: authdaemond
log_level: 3
mech_list: PLAIN LOGIN
authdaemond_path:/var/spool/authdaemon/socket
十,启动postfix,courier-imap,courier-authlib
1,启动postfix
[[email protected] extman]# /etc/init.d/postfix start
Starting postfix: [确定]
2,启动courier-authlib
[[email protected] authlib]# /etc/init.d/courier-authlib start
Starting Courier authentication services: authdaemond //显示这样的内容说明安装成功了
3,启动courier-imap
[[email protected] extman]# /etc/init.d/courier-imap start
Starting Courier-IMAP server: pop3 pop3-ssl //显示这样的内容说明安装成功了
4,查看启动进程
[[email protected] extman]# netstat -tpnlActive Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:2208 0.0.0.0:* LISTEN 3425/./hpiod
tcp 0 0 0.0.0.0:740 0.0.0.0:* LISTEN 3102/rpc.statd
tcp 0 0 127.0.0.1:9001 0.0.0.0:* LISTEN 9028/fcgiwrap
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 4637/mysqld
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 3052/portmap
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 3448/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 3462/cupsd
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 10003/master
tcp 0 0 127.0.0.1:2207 0.0.0.0:* LISTEN 3430/python
tcp 0 0 :::995 :::* LISTEN 9296/couriertcpd
tcp 0 0 :::110 :::* LISTEN 9290/couriertcpd
tcp 0 0 :::22 :::* LISTEN 3448/sshd
tcp 0 0 :::25 :::* LISTEN 10003/master
十一,配置nginx
1,配置nginx.conf
[[email protected] nginx]# vim /etc/nginx/nginx.confuser vuser vgroup; //把启动用户改成vuser
2,配置nginx虚拟机
[[email protected] conf.d]# cat /etc/nginx/conf.d/extmail.conf //extmail的虚拟机server
{
listen 8080;
server_name 51yip.com;
index index.html index.htm index.php index.cgi;
root /var/www/extsuite/extmail/html/;
location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
{
rewrite ^/extmail/default/images/(.*) /default/images/$1 break;
expires 30d;
}
location ~ .*.(js|css)?$
{
rewrite ^/extmail/default/(.*) /default/$1 break;
expires 1h;
}
location /extmail/cgi/ {
root /var/www/extsuite/extmail/cgi;
fastcgi_pass 127.0.0.1:9001;
fastcgi_index index.cgi;
rewrite ^/extmail/cgi/(.*).cgi /$1.cgi break;
include fastcgi.conf;
}
log_format extmaillog '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
access_log /var/log/extmaillog.log extmaillog;
}
[[email protected] conf.d]# cat /etc/nginx/conf.d/extman.conf //extman虚拟机
server
{
listen 8081;
server_name 51yip.com;
index index.html index.htm index.php index.cgi;
root /var/www/extsuite/extman/html/;
location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
{
rewrite ^/extman/default/images/(.*) /default/images/$1 break;
expires 30d;
}
location ~ .*.(js|css)?$
{
rewrite ^/extman/default/(.*) /default/$1 break;
expires 1h;
}
location /extman/cgi/ {
root /var/www/extsuite/extman/cgi;
fastcgi_pass 127.0.0.1:9001;
fastcgi_index index.cgi;
rewrite ^/extman/cgi/(.*).cgi /$1.cgi break;
include fastcgi.conf;
}
log_format extmanlog '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
access_log /var/log/extmanlog.log extmanlog;
}
十二,启动fcgiwrap,nginx
extmail是用perl写的,nginx并不能运行perl的cgi程序,所以我们要加单独加
spawn-fcgi -f /usr/local/bin/fcgiwrap -a 127.0.0.1 -p 9001 -F 3 -P /var/run/fastcgi-c.pid
/etc/init.d/nginx start
到这儿,extmail就全部搭建好了,来看一下效果图:
extmail页面
url是http://你的域名:8080/,这里是不能登录的因为没有用户,我们要在extman添加用户后才可以在这里登录
extman管理界面
url是http://你的域名:8081/,登录的用户名是root@你的域名,密码是extmail*123*