操做系統:CentOS7.2
yum源:阿里base源+阿里epel源
postfix:3.2.4 編譯安裝
dovecot:2.2.10-8 yum安裝
courier-unicode:2.0
courier-authlib:0.68.0
extmail:1.2
extman:1.1
perl-Unix-Syslog:1.1-17 yum安裝
Time-HiRes:1.9746 編譯安裝
File-Tail:1.3 編譯安裝
nginx:1.12.2-1 yum安裝
阿里雲ECS默認不是開放25號端口的,因此須要提交工單申請開通25號端口
php
yum remove -y postfix
userdel -r postfix
groupdel postdrop
rm -rf /var/spool/postfix/
rm -rf /var/lib/postfix/
最小化安裝系統上須要安裝的一些基礎包
yum install -y vim lrzsz wget dos2unix psmisc tcpdump net-tools iftop
yum install -y bash-completion && source /etc/profile.d/bash_completion.sh
yum install -y tree lsof screen telnet
yum install -y gcc gcc-c++ perl-CPAN perl-GD perl-DB_File perl-DBD-MySQL perl-ExtUtils-MakeMaker rrdtool-perl libicu-devel perl-Crypt-PasswdMD5 perl-CGI perl-CGI-Session gdbm-devel libtool-ltdl-devel bzip2
安裝及配置虛擬域須要用到的數據庫
yum install -y mariadb-server mariadb-devel
mkdir /data/mysql
chown mysql:mysql /data/mysql
vim /etc/my.cnf
grep -v ^# /etc/my.cnf | tr -s [[:space:]]
[mysqld]
datadir=/data/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
skip_name_resolve
innodb_file_per_table
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
!includedir /etc/my.cnf.d
編譯安裝postfix
mkdir /data/package
cd /data/package
wget http://cdn.postfix.johnriley.me/mirrors/postfix-release/official/postfix-3.2.4.tar.gz
tar xf postfix-3.2.4.tar.gz
cd postfix-3.2.4/
useradd -u 2525 -M -s /sbin/nologin postfix
useradd -u 2526 -M -s /sbin/nologin postdrop
yum install -y cyrus-sasl cyrus-sasl-devel cyrus-sasl-md5 cyrus-sasl-plain
make makefiles 'CCARGS=-DHAS_MYSQL -I/usr/include/mysql -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl -DUSE_TLS' 'AUXLIBS=-L/usr/lib64/mysql -lmysqlclient -lz -lrt -lm -L/usr/lib64/sasl2 -lsasl2 -lssl -lcrypto
make -j4
make install
配置postfix
newaliases
cp /etc/postfix/main.cf{,.bak}
vim /etc/postfix/main.cf
grep -v ^# /etc/postfix/main.cf | tr -s [[:space:]]
compatibility_level = 2
queue_directory = /data/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
mail_owner = postfix
inet_interfaces = all
unknown_local_recipient_reject_code = 550
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
home_mailbox = Maildir/
mail_spool_directory = /var/spool/mail
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
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/local/man
sample_directory = /etc/postfix
readme_directory = no
inet_protocols = ipv4
meta_directory = /etc/postfix
shlib_directory = no
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain =
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
broken_sasl_auth_clients=yes
smtpd_client_restrictions = permit_sasl_authenticated
smtpd_sasl_security_options = noanonymous
virtual_transport = virtual
virtual_uid_maps = static:2525
virtual_gid_maps = static:2525
virtual_mailbox_base = /data/mailbox
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
因修改過postfix工做目錄,須要建立並受權其屬主爲postfix
mkdir /data/mailbox
chown postfix /data/mailbox
yum安裝cyrus認證框架
yum install -y cyrus-sasl cyrus-sasl-devel cyrus-sasl-md5 cyrus-sasl-plain
安裝及配置dovecot
yum install -y dovecot.x86_64 dovecot-mysql.x86_64
cp /etc/dovecot/dovecot.conf{,.bak}
vim /etc/dovecot/dovecot.conf
grep -v ^[[:space:]]# /etc/dovecot/dovecot.conf | tr -s [[:space:]]
protocols = imap pop3
listen =
base_dir = /data/dovecot/
!include conf.d/.conf
!include_try local.conf
mv /var/run/dovecot/ /data/
cp /etc/dovecot/conf.d/10-auth.conf{,.bak}
vim /etc/dovecot/conf.d/10-auth.conf
grep -v ^[[:space:]]# /etc/dovecot/conf.d/10-auth.conf | tr -s [[:space:]]
disable_plaintext_auth = no
auth_mechanisms = plain
!include auth-sql.conf.ext
cp /etc/dovecot/conf.d/10-mail.conf{,.bak}
vim /etc/dovecot/conf.d/10-mail.conf
grep -v ^[[:space:]]# /etc/dovecot/conf.d/10-mail.conf | tr -s [[:space:]]
mail_location = maildir:/data/mailbox/%d/%n/Maildir
namespace inbox {
inbox = yes
}
mbox_write_locks = fcntl
cp /etc/dovecot/conf.d/10-ssl.conf{,.bak}
vim /etc/dovecot/conf.d/10-ssl.conf
grep -v ^[[:space:]]# /etc/dovecot/conf.d/10-ssl.conf | tr -s [[:space:]]
ssl = no
手動添加dovecot鏈接mysql的認證配置文件
vim /etc/dovecot/dovecot-sql.conf.ext
cat /etc/dovecot/dovecot-sql.conf.ext
driver = mysql
connect = host=localhost dbname=extmail user=extmail password=extmail
default_pass_scheme = CRYPT
password_query = SELECT username AS user,password AS password FROM mailbox WHERE username = '%u'
user_query = SELECT maildir, uidnumber AS uid, gidnumber AS gid FROM mailbox WHERE username = '%u'
編譯安裝courier-unicode和courier-authlib
wget https://jaist.dl.sourceforge.net/project/courier/courier-unicode/2.0/courier-unicode-2.0.tar.bz2
wget https://jaist.dl.sourceforge.net/project/courier/authlib/0.68.0/courier-authlib-0.68.0.tar.bz2
tar xf courier-unicode-2.0.tar.bz2
tar xf courier-authlib-0.68.0.tar.bz2
cd courier-unicode-2.0
./configure
make -j4 && make install
cd ../courier-authlib-0.68.0/
./configure \
--sysconfdir=/etc \
--without-authpam \
--without-authshadow \
--without-authvchkpw \
--without-authpgsql \
--with-authmysql \
--with-mysql-libs=/usr/lib64/mysql \
--with-mysql-includes=/usr/include/mysql \
--with-redhat \
--with-authmysqlrc=/etc/authmysqlrc \
--with-authdaemonrc=/etc/authdaemonrc \
--with-mailuser=postfix
make -j4 && make install
配置courier-authlib
echo "/usr/local/lib/courier-authlib/" > /etc/ld.so.conf.d/courier-authlib.conf
ldconfig
cp courier-authlib.sysvinit /etc/init.d/courier-authlib
chmod +x /etc/init.d/courier-authlib
cp /etc/authdaemonrc.dist /etc/authdaemonrc
cp /etc/authmysqlrc.dist /etc/authmysqlrc
vim /etc/authdaemonrc
grep -v ^# /etc/authdaemonrc | tr -s [[:space:]]
authmodulelist="authmysql"
authmodulelistorig="authmysql"
daemons=4
authdaemonvar=/usr/local/var/spool/authdaemon
DEBUG_LOGIN=0
DEFAULTOPTIONS=""
LOGGEROPTS=""html
vim /etc/authmysqlrc
grep -v ^# /etc/authmysqlrc | tr -s [[:space:]]
MYSQL_SERVER localhost
MYSQL_USERNAME extmail
MYSQL_PASSWORD extmail
MYSQL_SOCKET /var/lib/mysql/mysql.sock
MYSQL_OPT 0
MYSQL_DATABASE extmail
MYSQL_USER_TABLE mailbox
MYSQL_CRYPT_PWFIELD password
MYSQL_UID_FIELD 2525
MYSQL_GID_FIELD 2525
MYSQL_LOGIN_FIELD username
MYSQL_HOME_FIELD concat('/data/mailbox',homedir)
MYSQL_NAME_FIELD name
MYSQL_MAILDIR_FIELD concat('/data/mailbox',maildir)
修改SASL認證爲authdaemond
vim /etc/sasl2/smtpd.conf
cat /etc/sasl2/smtpd.conf
pwcheck_method: authdaemond
log_level: 3
mech_list: PLAIN LOGIN
authdaemond_path:/usr/local/var/spool/authdaemon/socket
安裝並配置extman及extmail
wget http://7xivyw.com1.z0.glb.clouddn.com/extman-1.1.tar.gz
wget http://7xivyw.com1.z0.glb.clouddn.com/extmail-1.2.tar.gz
tar xf extman-1.1.tar.gz
tar xf extmail-1.2.tar.gz
mkdir /data/extsuite
mv extman-1.1 /data/extsuite/extman
mv extmail-1.2 /data/extsuite/extmail
cd /data/extsuite/
修改/data/extsuite目錄下全部配置文件中的/var/www字符爲/data
sed -i s@/var/www@/data@g find /data/extsuite -type f
修改extan和extmail的cgi目錄的屬主改組爲postfix
chown -R postfix:postfix /data/extsuite/{extman,extmail}/cgi
爲postfix提供extman官方給出的mysql虛擬域配置文件
cp -v /data/extsuite/extman/docs/mysqlvirtual* /etc/postfix/
‘/data/extsuite/extman/docs/mysql_virtual_alias_maps.cf’ -> ‘/etc/postfix/mysql_virtual_alias_maps.cf’
‘/data/extsuite/extman/docs/mysql_virtual_domains_maps.cf’ -> ‘/etc/postfix/mysql_virtual_domains_maps.cf’
‘/data/extsuite/extman/docs/mysql_virtual_limit_maps.cf’ -> ‘/etc/postfix/mysql_virtual_limit_maps.cf’
‘/data/extsuite/extman/docs/mysql_virtual_mailbox_maps.cf’ -> ‘/etc/postfix/mysql_virtual_mailbox_maps.cf’
‘/data/extsuite/extman/docs/mysql_virtual_sender_maps.cf’ -> ‘/etc/postfix/mysql_virtual_sender_maps.cf’
cp -r /data/extsuite/extman/addon/mailgraph_ext/ /usr/local/mailgraph_ext
vim /etc/postfix/mysql_virtual_alias_maps.cf
vim /etc/postfix/mysql_virtual_domains_maps.cf
vim /etc/postfix/mysql_virtual_limit_maps.cf
vim /etc/postfix/mysql_virtual_mailbox_maps.cf
vim /etc/postfix/mysql_virtual_sender_maps.cf
修改extmail官方給出的mysql數據庫示例腳本再導入數據庫
sed -i s/TYPE=MyISAM/ENGINE=InnoDB/g extman/docs/extmail.sql
sed -i s/extmail.org/hehegame.com/g extman/docs/init.sql
mysql -uroot -ppassword < extman/docs/extmail.sql
mysql -uroot -ppassword < extman/docs/init.sql
vim extman/webman.cf
grep -v ^# extman/webman.cf | tr -s [[:space:]]
SYS_CONFIG = /data/extsuite/extman/
SYS_LANGDIR = /data/extsuite/extman/lang
SYS_TEMPLDIR = /data/extsuite/extman/html
SYS_MAILDIR_BASE = /data/mailbox
SYS_SHOW_WARN = 0
SYS_SESS_DIR = /data/tmp/extman/
SYS_CAPTCHA_ON = 0
SYS_CAPTCHA_KEY = r3s9b6a7
SYS_CAPTCHA_LEN = 6
SYS_PURGE_DATA = 0
SYS_PSIZE = 20
SYS_LANG = zh_CN
SYS_APP_TYPE = ExtMan
SYS_TEMPLATE_NAME = default
SYS_DEFAULT_EXPIRE = 3y
SYS_GROUPMAIL_SENDER = postmaster@hehegames.com
SYS_DEFAULT_SERVICES = webmail,smtpd,smtp,pop3,netdisk
SYS_ISP_MODE = no
SYS_DOMAIN_HASHDIR = yes
SYS_DOMAIN_HASHDIR_DEPTH = 2x2
SYS_USER_HASHDIR = yes
SYS_USER_HASHDIR_DEPTH = 2x2
SYS_MIN_UID = 500
SYS_MIN_GID = 100
SYS_DEFAULT_UID = 2525
SYS_DEFAULT_GID = 2525
SYS_QUOTA_MULTIPLIER = 1048576
SYS_QUOTA_TYPE = courier
SYS_DEFAULT_MAXQUOTA = 2147483648
SYS_DEFAULT_MAXALIAS = 100
SYS_DEFAULT_MAXUSERS = 500
SYS_DEFAULT_MAXNDQUOTA = 2147483648
SYS_USER_DEFAULT_QUOTA = 2147483648
SYS_USER_DEFAULT_NDQUOTA = 2147483648
SYS_USER_DEFAULT_EXPIRE = 3y
SYS_BACKEND_TYPE = mysql
SYS_CRYPT_TYPE = md5crypt
SYS_MYSQL_USER = extman
SYS_MYSQL_PASS = extman
SYS_MYSQL_DB = extmail
SYS_MYSQL_HOST = localhost
SYS_MYSQL_SOCKET = /var/lib/mysql/mysql.sock
SYS_MYSQL_TABLE = manager
SYS_MYSQL_ATTR_USERNAME = username
SYS_MYSQL_ATTR_PASSWD = password
SYS_RRD_DATADIR = /var/lib
SYS_RRD_TMPDIR = /data/tmp/viewlog
SYS_RRD_QUEUE_ON = yes
SYS_CMDSERVER_SOCK = /tmp/cmdserver.sock
SYS_CMDSERVER_MAXCONN = 5
SYS_CMDSERVER_PID = /var/run/cmdserver.pid
SYS_CMDSERVER_LOG = /var/log/cmdserver.log
SYS_CMDSERVER_AUTHCODE = your_auth_code_here
SYS_IGNORE_SERVER_LIST = web
建立extman和extmail所須要的目錄並受權屬主爲postfix
mkdir -pv /data/tmp/{extman,extmail,viewlog}
mkdir: created directory ‘/data/tmp’
mkdir: created directory ‘/data/tmp/extman’
mkdir: created directory ‘/data/tmp/extmail’
mkdir: created directory ‘/data/tmp/viewlog’
chown postfix /data/tmp/{extman,extmail,viewlog}
cp extmail/webmail.cf.default extmail/webmail.cf
vim extmail/webmail.cf
grep -v ^# extmail/webmail.cf | tr -s [[:space:]]
SYS_CONFIG = /data/extsuite/extmail/
SYS_LANGDIR = /data/extsuite/extmail/lang
SYS_TEMPLDIR = /data/extsuite/extmail/html
SYS_HTTP_CACHE = 0
SYS_SMTP_HOST = localhost
SYS_SMTP_PORT = 25
SYS_SMTP_TIMEOUT = 5
SYS_SPAM_REPORT_ON = 0
SYS_SPAM_REPORT_TYPE = dspam
SYS_SHOW_WARN = 0
SYS_IP_SECURITY_ON = 1
SYS_PERMIT_NOQUOTA = 1
SYS_SESS_DIR = /data/tmp/extmail
SYS_UPLOAD_TMPDIR = /data/tmp/extmail
SYS_LOG_ON = 1
SYS_LOG_TYPE = syslog
SYS_LOG_FILE = /var/log/extmail.log
SYS_SESS_TIMEOUT = 1
SYS_SESS_COOKIE_ONLY = 1
SYS_USER_PSIZE = 10
SYS_USER_SCREEN = auto
SYS_USER_LANG = zh_CN
SYS_APP_TYPE = WebMail
SYS_USER_TEMPLATE = default
SYS_USER_CHARSET = utf-8
SYS_USER_TRYLOCAL = 1
SYS_USER_TIMEZONE = +0800
SYS_USER_CCSENT = 1
SYS_USER_SHOW_HTML = 1
SYS_USER_COMPOSE_HTML = 1
SYS_USER_CONV_LINK =1
SYS_USER_ADDR2ABOOK = 1
SYS_MESSAGE_SIZE_LIMIT = 52428800
SYS_MIN_PASS_LEN = 6
SYS_MFILTER_ON = 1
SYS_NETDISK_ON = 1
SYS_SHOW_SIGNUP = 0
SYS_DEBUG_ON = 1
SYS_AUTH_TYPE = mysql
SYS_MAILDIR_BASE = /data/mailbox
SYS_AUTH_SCHEMA = virtual
SYS_CRYPT_TYPE = md5crypt
SYS_MYSQL_USER = extmail
SYS_MYSQL_PASS = extmail
SYS_MYSQL_DB = extmail
SYS_MYSQL_HOST = localhost
SYS_MYSQL_SOCKET = /var/lib/mysql/mysql.sock
SYS_MYSQL_TABLE = mailbox
SYS_MYSQL_ATTR_USERNAME = username
SYS_MYSQL_ATTR_DOMAIN = domain
SYS_MYSQL_ATTR_PASSWD = password
SYS_MYSQL_ATTR_QUOTA = quota
SYS_MYSQL_ATTR_NDQUOTA = netdiskquota
SYS_MYSQL_ATTR_HOME = homedir
SYS_MYSQL_ATTR_MAILDIR = maildir
SYS_MYSQL_ATTR_DISABLEWEBMAIL = disablewebmail
SYS_MYSQL_ATTR_DISABLENETDISK = disablenetdisk
SYS_MYSQL_ATTR_DISABLEPWDCHANGE = disablepwdchange
SYS_MYSQL_ATTR_ACTIVE = active
SYS_MYSQL_ATTR_PWD_QUESTION = question
SYS_MYSQL_ATTR_PWD_ANSWER = answer
SYS_AUTHLIB_SOCKET = /usr/local/var/spool/authdaemon/socket
SYS_G_ABOOK_TYPE = file
SYS_G_ABOOK_FILE_PATH = /data/extsuite/extmail/globabook.cf
SYS_G_ABOOK_FILE_LOCK = 1
SYS_G_ABOOK_FILE_CONVERT = 0
SYS_G_ABOOK_FILE_CHARSET = utf-8
修改extman官方提供的perl-cgi程序腳本的SU_UID和SU_GID都爲postfix
vim extmail/dispatch-init
grep ^SU extmail/dispatch-init
SU_UID=postfix
SU_GID=postfix
爲避免登陸extman以後 再登陸extmail以後提示sort文件名報錯作出以下修改
mv /data/extsuite/extman/libs/Ext/Utils.pm{,.bak}
cp /data/extsuite/extmail/libs/Ext/Utils.pm /data/extsuite/extman/libs/Ext/
修改extman默認記錄的用戶名爲空
vim /data/extsuite/extman/html/default/index.html
input name=username value='' class=login_input
yum安裝perl syslog所需組件
yum install -y perl-Unix-Syslog
編譯安裝Time-HiRes和/File-Tail這兩個perl組件,不然extman後臺的圖形分析日誌看不到,(必定要注意安裝的前後順序)
wget http://search.cpan.org/CPAN/authors/id/J/JH/JHI/Time-HiRes-1.9746.tar.gz
wget http://search.cpan.org/CPAN/authors/id/M/MG/MGRABNAR/File-Tail-1.3.tar.gz
tar xf Time-HiRes-1.9746.tar.gz
tar xf File-Tail-1.3.tar.gz
cd Time-HiRes-1.9746/
perl Makefile.PL
make -j4
mv blib/arch/auto/Time/HiRes/HiRes.so{,.old}
gcc -shared -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -Wl,-z,relro HiRes.o -o blib/arch/auto/Time/HiRes/HiRes.so -lrt
make test
make install
cd ../File-Tail-1.3/
perl Makefile.PL
make -j4
make test
make install
yum安裝nginx並提供虛擬主機配置文件
yum install -y nginx
sed -i '38,57s/^/#/' /etc/nginx/nginx.conf
vim /etc/nginx/conf.d/mail-server.conf
cat /etc/nginx/conf.d/mail-server.conf
server {
listen 80;
server_name mail.hehegame.com;
index index.html index.htm index.cgi index.php;
root /data/extsuite/extmail/html;
location /extmail/cgi/ {
fastcgi_pass 127.0.0.1:8888;
fastcgi_index index.cgi;
fastcgi_param SCRIPT_FILENAME /data/extsuite/extmail/cgi/$fastcgi_script_name;
include fastcgi.conf;
}
location /extmail {
alias /data/extsuite/extmail/html;
}
location /extman/cgi/ {
fastcgi_pass 127.0.0.1:8888;
fastcgi_index index.cgi;
fastcgi_param SCRIPT_FILENAME /data/extsuite/extman/cgi/$fastcgi_script_name;
include fastcgi.conf;
}
location /extman {
alias /data/extsuite/extman/html;
}
error_log /var/log/nginx/mail-server.log;
}
提供整個郵件系統全部組件的啓動和中止腳本
mkdir /data/scripts
vim /data/scripts/mailserver_ctl.sh
cat /data/scripts/mailserver_ctl.sh
#!/bin/bash
#Author:chaojun
#Contact QQ:183530300
#Version:1.0
#Company:Hehehuyu
#Create time:2017-12-12 20:36:49
#Description:All mail service control script
case $1 in
stop)
systemctl stop nginx
postfix stop
systemctl stop dovecot
systemctl stop saslauthd
/etc/init.d/courier-authlib stop
/data/extsuite/extmail/dispatch-init stop
/usr/local/mailgraph_ext/mailgraph-init stop
;;
start)
/usr/local/mailgraph_ext/mailgraph-init start
/data/extsuite/extmail/dispatch-init start
/etc/init.d/courier-authlib start
systemctl start saslauthd
systemctl start dovecot
postfix start
systemctl start nginx
;;
*)
echo "Usage:$0 [start|stop]"
esac
Extmail+Extman架設好之後,打開extman顯示 No such file or directory是沒有啓動cmdserve腳本所致使的
extmail配置完成後界面以下
extman配置完成後界面以下
mysql