CentOS7下搭建postfix郵箱服務器並實現extmail的web訪問
1. 准備工作
關閉selinux
-
[root@localhost ~] # setenforce 0
-
[root@localhost ~] # getenforce
-
Permissive
-
[root@localhost ~] #
關閉firewalld防火牆,並清空iptables規則:
-
[
-
[
-
[
-
[
-
Chain INPUT (policy ACCEPT 38 packets, 7291 bytes)
-
pkts bytes target prot opt in out source destination
-
-
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
-
pkts bytes target prot opt in out source destination
-
-
Chain OUTPUT (policy ACCEPT 12 packets, 1208 bytes)
-
pkts bytes target prot opt in out source destination
-
[root@localhost ~]#
由於CentOS7默認安裝的是MariaDB,所以要添加MySQL的yum源,有些編譯需要的devel包只有epel擴展源有,所以我們需要把epel源也一並添加。因為是通過wget命令從下載地址中下載,但是最小化安裝的CentOS7不自帶wget命令,還需要先安裝這個命令:
-
yum install -y wget
-
wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
-
rpm -ivh mysql-community- release-el7-5.noarch.rpm
-
wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
-
rpm -ivh epel- release-latest-7.noarch.rpm
2. 安裝postfix
首先需要安裝編譯環境及其他所需要的包,免得一會編譯過程中老報缺少包的錯誤,因為需要安裝的包有點多,所以這個過程有點慢:
yum install nginx vim gcc gcc-c++ openssl openssl-devel db4-devel ntpdate mysql mysql-devel mysql-server bzip2 php-mysql cyrus-sasl-md5 perl-GD perl-DBD-MySQL perl-GD perl-CPAN perl-CGI perl-CGI-Session cyrus-sasl-lib cyrus-sasl-plain cyrus-sasl cyrus-sasl-devel libtool-ltdl-devel telnet mail libicu-devel -y
安裝完以上所需的包后,開始編譯安裝postfix:
1.首先卸載系統自帶的postfix,並刪除postfix用戶,重新指定uid、gid創建新用戶postfix,postdrop,嫌一條條命令去執行有點麻煩就寫成腳本文件去執行:
-
yum remove postfix -y
-
userdel postfix
-
groupdel postdrop
-
groupadd -g 2525 postfix
-
useradd -g postfix -u 2525 -s /sbin/nologin -M postfix
-
groupadd -g 2526 postdrop
-
useradd -g postdrop -u 2526 -s /sbin/nologin -M postdrop
2.下載源碼包並解壓編譯(如果下載地址失效就到官網去找下載連接):
-
cd /usr/local/src/
-
wget http: //cdn.postfix.johnriley.me/mirrors/postfix-release/official/postfix-3.0.11.tar.gz
-
tar -zxvf postfix -3.0.11.tar.gz
-
cd postfix-3.0.11
-
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 && make install
-
echo $?
在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. See PACKAGE_README for instructions.
-
install_root: [/]
-
-
Please specify a directory for scratch files while installing Postfix. You
-
must have write permission in this directory.
-
tempdir: [/usr/ local/src/postfix-3.0.11] /tmp/extmail // 就只更改這一項為tmp目錄,其他的全部默認
-
-
Please specify the final destination directory for installed Postfix
-
configuration files.
-
config_directory: [/etc/postfix]
-
-
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]
-
-
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]
-
-
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]
-
-
Please specify the final 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 final destination directory for the Postfix on-line
-
manual pages. You can no longer specify "no" here.
-
manpage_directory: [/usr/ local/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]
-
-
Please specify the final 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]
-
-
Please specify the final destination directory for Postfix shared-library
-
files.
-
shlib_directory: [ no]
3.更改目錄的屬主和屬組:
-
chown - R postfix:postdrop /var/spool/postfix
-
chown - R postfix:postdrop /var/lib/postfix/
-
chown root / var/spool/postfix
-
chown - R root /var/spool/postfix/pid
4.修改postfix的配置文件:
-
[root@localhost ~] # vim /etc/postfix/main.cf
-
myhostname = mail.everyoo.com //設置主機名
-
mydomain = everyoo.com //指定域名
-
myorigin = $mydomain //指明發件人所在的域名
-
inet_interfaces = //all指定postfix系統監聽的網絡接口
-
mydestination = $myhostname, localhost.$mydomain, localhost,$mydomain //指定postfix接收郵件時收件人的域名 [使用虛擬域需要禁用]
-
mynetworks_style = host //指定信任網段類型
-
mynetworks = 192.168.77.1/24, 127.0.0.0/8 //指定信任的客戶端
-
relay_domains = $mydestination //指定允許中轉郵件的域名
-
alias_maps = hash:/etc/aliases //設置郵件的別名
5.然后需要在/etc/init.d/目錄下提供一個腳本來管理postfix的啟動與停止:
[root@localhost /var/www/extsuite/extman]# vim /etc/init.d/postfix
把下面的內容放在/etc/init.d/postfix里面:
-
-
#
-
# postfix Postfix Mail Transfer Agent
-
#
-
# chkconfig: 2345 80 30
-
# description: Postfix is a Mail Transport Agent, which is the program \
-
# that moves mail from one machine to another.
-
# processname: master
-
# pidfile: /var/spool/postfix/pid/master.pid
-
# config: /etc/postfix/main.cf
-
# config: /etc/postfix/master.cf
-
-
# Source function library.
-
. /etc/rc.d/init.d/ functions
-
-
# Source networking configuration.
-
. /etc/sysconfig/network
-
-
# Check that networking is up.
-
[ $NETWORKING = "no" ] && exit 3
-
-
[ -x /usr/sbin/postfix ] || exit 4
-
[ -d /etc/postfix ] || exit 5
-
[ -d /var/spool/postfix ] || exit 6
-
-
RETVAL=0
-
prog= "postfix"
-
-
start() {
-
# Start daemons.
-
echo -n $"Starting postfix: "
-
/usr/bin/newaliases >/dev/null 2>&1
-
/usr/sbin/postfix start 2>/dev/null 1>&2 && success || failure $ "$prog start"
-
RETVAL=$?
-
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/postfix
-
echo
-
return $RETVAL
-
}
-
-
stop() {
-
# Stop daemons.
-
echo -n $"Shutting down postfix: "
-
/usr/sbin/postfix stop 2>/dev/null 1>&2 && success || failure $ "$prog stop"
-
RETVAL=$?
-
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/postfix
-
echo
-
return $RETVAL
-
}
-
-
reload() {
-
echo -n $"Reloading postfix: "
-
/usr/sbin/postfix reload 2>/dev/null 1>&2 && success || failure $ "$prog reload"
-
RETVAL=$?
-
echo
-
return $RETVAL
-
}
-
-
abort() {
-
/usr/sbin/postfix abort 2>/dev/null 1>&2 && success || failure $ "$prog abort"
-
return $?
-
}
-
-
flush() {
-
/usr/sbin/postfix flush 2>/dev/null 1>&2 && success || failure $ "$prog flush"
-
return $?
-
}
-
-
check() {
-
/usr/sbin/postfix check 2>/dev/null 1>&2 && success || failure $ "$prog check"
-
return $?
-
}
-
-
restart() {
-
stop
-
start
-
}
-
-
# See how we were called.
-
case "$1" in
-
start)
-
start
-
;;
-
stop)
-
stop
-
;;
-
restart)
-
stop
-
start
-
;;
-
reload)
-
reload
-
;;
-
abort)
-
abort
-
;;
-
flush)
-
flush
-
;;
-
check)
-
check
-
;;
-
status)
-
status master
-
;;
-
condrestart)
-
[ -f /var/lock/subsys/postfix ] && restart || :
-
;;
-
*)
-
echo $"Usage: $0 {start|stop|restart|reload|abort|flush|check|status|condrestart}"
-
exit 1
-
esac
-
-
exit $?
為腳本添加執行權限,並將服務添加到開機啟動項中:
-
[root@localhost / var/www/extsuite/extman]# chmod +x /etc/init.d/postfix
-
[root@localhost / var/www/extsuite/extman]# chkconfig --add postfix
-
[root@localhost / var/www/extsuite/extman]# chkconfig postfix on
-
[root@localhost / var/www/extsuite/extman]# chown postfix.postfix -R /var/lib/postfix/
-
[root@localhost / var/www/extsuite/extman]# chown postfix.postfix /var/spool/ -R
3. 安裝dovecot
yum安裝:
[root@localhost ~]# yum install -y dovecot dovecot-mysql
配置dovecot:
-
[root@localhost ~] # cd /etc/dovecot/
-
[root@localhost dovecot] # vim dovecot.conf //直接在配置文件最后添加即可
-
protocols = imap pop3
-
!include conf.d/*.conf
-
listen = *
-
base_dir = /var/run/dovecot/
-
[root@localhost dovecot] # cd conf.d/
-
[root@localhost conf.d] # vim 10-auth.conf
-
disable_plaintext_auth = no
-
[root@localhost conf.d] # vim 10-mail.conf
-
mail_location = maildir:~ /Maildir
-
mail_location = maildir:/var/mailbox/%d/%n/Maildir
-
mail_privileged_group = mail
-
[root@localhost conf.d] # vim 10-ssl.conf
-
ssl = no
-
[root@localhost conf.d] # vim 10-logging.conf
-
log_path = /var/log/dovecot.log
-
info_log_path = /var/log/dovecot.info
-
log_timestamp = "%Y-%m-%d %H:%M:%S "
-
[root@localhost conf.d] # cp auth-sql.conf.ext auth-sql.conf
-
[root@localhost conf.d] # vim auth-sql.conf
-
passdb {
-
driver = sql
-
-
# Path for SQL configuration file, see example-config/dovecot-sql.conf.ext
-
args = /etc/dovecot/dovecot-sql.conf.ext
-
}
-
-
userdb {
-
driver = sql
-
args = /etc/dovecot/dovecot-sql.conf.ext
-
}
編輯dovecot通過mysql認證的配置文件:
-
[root@localhost conf.d]
-
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'
4. 安裝courier-authlib
下載解壓並編譯:
-
[root@localhost ~] # cd /usr/local/src/
-
[root@localhost /usr/ local/src]# wget https://sourceforge.net/projects/courier/files/authlib/0.66.2/courier-authlib-0.66.2.tar.bz2
-
[root@localhost /usr/ local/src]# tar -jxvf courier-authlib-0.66.2.tar.bz2
-
[root@localhost /usr/ local/src]# cd courier-authlib-0.66.2
-
[root@localhost /usr/ local/src/courier-authlib-0.66.2]# ./configure --prefix=/usr/local/courier-authlib --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
-
[root@localhost /usr/ local/src/courier-authlib-0.66.2]# make && makeinstall
編譯過程中發生了一個錯誤:
configure: error: The Courier Unicode Library 1.2 appears not to be installed. You may need to install a separate development subpackage, in addition to the main package
這是因為Courier Unicode Library沒有安裝,我們下載courier-unicode-1.2並編譯安裝:
-
[root@localhost ~] # wget https://sourceforge.net/projects/courier/files/courier-unicode/1.2/courier-unicode-1.2.tar.bz2
-
[root@localhost ~] # tar jxvf courier-unicode-1.2.tar.bz2
-
[root@localhost ~] # cd courier-unicode-1.2
-
[root@localhost courier-unicode- 1.2]# ./configure
-
[root@localhost courier-unicode- 1.2]# make && make install
完成Courier Unicode Library的安裝后,倒回去再次編譯courier-authlib就沒問題了
配置courier-authlib:
-
[
-
[
-
[
-
[
-
authmodulelist= "authmysql"
-
authmodulelistorig= "authmysql"
-
[
-
MYSQL_SERVER localhost
-
MYSQL_USERNAME extmail
-
MYSQL_PASSWORD extmail
-
MYSQL_SOCKET / var/lib/mysql/mysql.sock
-
MYSQL_PORT 3306
-
MYSQL_DATABASE extmail
-
MYSQL_USER_TABLE mailbox
-
MYSQL_CRYPT_PWFIELD password
-
DEFAULT_DOMAIN test.com
-
MYSQL_UID_FIELD '2525'
-
MYSQL_GID_FIELD '2525'
-
MYSQL_LOGIN_FIELD username
-
MYSQL_HOME_FIELD concat('/var/mailbox/',homedir)
-
MYSQL_NAME_FIELD name
-
MYSQL_MAILDIR_FIELD concat('/var/mailbox/',maildir)
courier-authlib添加服務啟動腳本及其他:
-
[root@localhost courier-authlib- 0.66.2]# cp courier-authlib.sysvinit /etc/init.d/courier-authlib
-
[root@localhost courier-authlib- 0.66.2]# chmod +x /etc/init.d/courier-authlib
-
[root@localhost courier-authlib- 0.66.2]# chkconfig --add courier-authlib
-
[root@localhost courier-authlib- 0.66.2]# chkconfig courier-authlib on
-
[root@localhost courier-authlib- 0.66.2]# echo "/usr/local/courier-authlib/lib/courier-authlib" >> /etc/ld.so.conf.d/courier-authlib.conf
-
[root@localhost courier-authlib- 0.66.1]# ldconfig
-
[root@localhost courier-authlib- 0.66.1]# service courier-authlib start
-
Starting Courier authentication services: authdaemond
smtp以及虛擬用戶相關的設置:
-
[
-
pwcheck_method: authdaemond
-
log_level: 3
-
mech_list: PLAIN LOGIN
-
authdaemond_path:/usr/local/courier-authlib/var/spool/authdaemon/socket
-
[
-
-
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_mailbox_base = / var/mailbox
-
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf //這里的配置文件需在后面extman
-
里復制過來
-
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
-
virtual_alias_domains =
-
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
-
virtual_uid_maps = static:2525
-
virtual_gid_maps = static:2525
-
virtual_transport = virtual
安裝extmail
下載extmail和extman:
-
[root@localhost ~] # cd /usr/local/src/
-
[root@localhost /usr/ local/src]# wget http://7xivyw.com1.z0.glb.clouddn.com/extmail-1.2.tar.gz
-
[root@localhost /usr/ local/src]# wget http://7xivyw.com1.z0.glb.clouddn.com/extman-1.1.tar.gz
創建站點目錄並解壓、重命名extmail包:
-
[root@localhost /usr/ local/src]# mkdir -p /var/www/extsuite
-
[root@localhost /usr/ local/src]# tar -zxvf extmail-1.2.tar.gz -C /var/www/extsuite/
-
[root@localhost /usr/ local/src]# mv /var/www/extsuite/extmail-1.2/ /var/www/extsuite/extmail
更改extmail的配置文件:
-
[
-
[
-
[
-
SYS_SESS_DIR = /tmp/extmail
-
SYS_UPLOAD_TMPDIR = /tmp/extmail/upload
-
SYS_USER_LANG = zh_CN
-
SYS_MIN_PASS_LEN = 8
-
SYS_MAILDIR_BASE = / var/mailbox
-
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_AUTHLIB_SOCKET = /usr/ local/courier-authlib/var/spool/authdaemon/socket
建立臨時文件目錄與session目錄,並更改權限:
-
[root@localhost extmail] # mkdir -p /tmp/extmail/upload
-
[root@localhost extmail] # chown -R postfix.postfix /tmp/extmail/
安裝extman
回到extman的下載目錄下,解壓extman包:
-
[root@localhost ~] # cd /usr/local/src/
-
[root@localhost /usr/ local/src]# tar -zxvf extman-1.1.tar.gz -C /var/www/extsuite/
-
[root@localhost /usr/ local/src]# cd /var/www/extsuite/
-
[root@localhost /var/www/extsuite] # mv extman-1.1/ extman
拷貝extman的配置文件:
-
[ root@localhost /var/www/extsuite]# cd extman/
-
[ root@localhost /var/www/extsuite/extman]# cp webman.cf.default webman.cf
更改cgi目錄的屬主屬組:
-
[root@localhost / var/www/extsuite/extman]# chown -R postfix.postfix /var/www/extsuite/extman/cgi/
-
[root@localhost / var/www/extsuite/extman]# chown -R postfix.postfix /var/www/extsuite/extmail/cgi/
導入數據庫:
由於數據庫不能識別TYPE=MyISAM,所以這里直接導入會出錯,需要先編輯extmail.sql數據庫文件,將文件中的TYPE=MyISAM更改為ENGINE=MyISAM,共有五處修改:
-
[root@localhost /var/www/extsuite/extman] # vim docs/extmail.sql
-
:% s/TYPE/ENGINE/g
我這里導入數據的時候發生了一個錯誤,提示找不到mysql.sock文件:
-
[root@localhost / var/www/extsuite/extman]# mysql -uroot < docs/extmail.sql
-
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
-
[root@localhost /var/www/extsuite/extman]# ls /var/lib/mysql/mysql.sock
-
ls: 無法訪問/var/lib/mysql/mysql.sock: 沒有那個文件或目錄
解決:然后我去查看了一下/etc/my.cnf文件,發現沒問題,socket參數指向的也是 /var/lib/mysql/mysql.sock 這個路徑,於是我就重啟了mysql服務,然后再嘗試就沒有報找不到mysql.sock文件的錯誤了,但是報了另一個錯誤:
-
[root@localhost /var/www/extsuite/extman]
-
ERROR 1364 (HY000) at line 31: Field 'ssl_cipher' doesn't have a default value
-
[root@localhost /var/www/extsuite/extman]
這錯誤的意思是:字段 'ssl密碼' 沒有默認值
於是又得去查看一下/etc/my.cnf文件,然后把sql_mode參數給注釋掉:
接着重啟mysql服務后,繼續導入數據,這次就沒問題了:
-
[root@localhost / var/www/extsuite/extman]# !service
-
service mysqld restart
-
Redirecting to /bin/systemctl restart mysqld.service
-
[root@localhost / var/www/extsuite/extman]# mysql -uroot < docs/extmail.sql
-
[root@localhost / var/www/extsuite/extman]# mysql -uroot < docs/init.sql
導入數據成功后再次修改/etc/my.cnf文件,把剛剛注釋的那行給去掉注釋,不去掉的話,mysql服務可能會出現不能啟動的問題:
數據導入成功后,登錄mysql,創建一個mysql數據庫用戶extmail並授予權限:
-
[
-
mysql> GRANT ALL ON extmail.* to extmail@ '%' identified by 'extmail'; //我這里是直接授予全部權限在任意的IP地址上了,實際情況根據需求而定
-
Query OK, 0 rows affected (0.00 sec)
-
-
mysql> FLUSH PRIVILEGES;
-
Query OK, 0 rows affected (0.00 sec)
-
-
mysql>
復制之前提到的配置文件:
-
[root@localhost ~] # cd /var/www/extsuite/extman/docs/
-
[root@localhost /var/www/extsuite/extman/docs] # cp mysql_virtual_* /etc/postfix/
為extman創建臨時目錄:
-
[root@localhost / var/www/extsuite/extman/docs]# mkdir /tmp/extman
-
[root@localhost / var/www/extsuite/extman/docs]# chown -R postfix.postfix /tmp/extman/
啟動postfix、dovecot、saslauthd服務,並查看進程是否正常:
-
[root@localhost /var/www/extsuite/extman] # service postfix start
-
Starting postfix (via systemctl): [ 確定 ]
-
[root@localhost /var/www/extsuite/extman] # ps aux |grep postfix
-
root 63586 0.0 0.1 95392 2160 ? Ss 01:29 0:00 /usr/libexec/postfix/master -w
-
postfix 63587 0.0 0.2 95448 3808 ? S 01:29 0:00 pickup -l -t unix -u
-
postfix 63588 0.0 0.2 95496 3816 ? S 01:29 0:00 qmgr -l -t unix -u
-
root 63592 0.0 0.0 112680 976 pts/0 S+ 01:33 0:00 grep --color=auto postfix
-
[root@localhost /var/www/extsuite/extman] # ss -tnluo | grep :25
-
tcp LISTEN 0 100 *:25 *:*
-
[root@localhost /var/www/extsuite/extman] # service dovecot start
-
Redirecting to /bin/systemctl start dovecot.service
-
[root@localhost /var/www/extsuite/extman] # ps aux |grep dovecot
-
root 63834 0.3 0.0 15652 1484 ? Ss 02:15 0:00 /usr/sbin/dovecot -F
-
dovecot 63837 0.0 0.0 9320 1012 ? S 02:15 0:00 dovecot/anvil
-
root 63838 0.0 0.0 9448 1164 ? S 02:15 0:00 dovecot/log
-
root 63840 0.0 0.1 12464 2196 ? S 02:15 0:00 dovecot/config
-
root 63842 0.0 0.0 112680 972 pts/0 S+ 02:15 0:00 grep --color=auto dovecot
-
[root@localhost /var/www/extsuite/extman] # systemctl start saslauthd
-
[root@localhost /var/www/extsuite/extman] # ps aux |grep saslauthd
-
root 63131 0.0 0.0 69648 916 ? Ss 01:19 0:00 /usr/sbin/saslauthd -m /run/saslauthd -a pam
-
root 63132 0.0 0.0 69648 676 ? S 01:19 0:00 /usr/sbin/saslauthd -m /run/saslauthd -a pam
-
root 63133 0.0 0.0 69648 676 ? S 01:19 0:00 /usr/sbin/saslauthd -m /run/saslauthd -a pam
-
root 63134 0.0 0.0 69648 676 ? S 01:19 0:00 /usr/sbin/saslauthd -m /run/saslauthd -a pam
-
root 63135 0.0 0.0 69648 676 ? S 01:19 0:00 /usr/sbin/saslauthd -m /run/saslauthd -a pam
-
root 63144 0.0 0.0 112680 972 pts/0 S+ 01:20 0:00 grep --color=auto saslauthd
-
[root@localhost /var/www/extsuite/extman] # ps aux |grep courier-authlib
-
root 61661 0.0 0.0 4316 444 ? S 00:07 0: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 61662 0.0 0.0 35512 1796 ? S 00:07 0:00 /usr/local/courier-authlib/libexec/courier-authlib/authdaemond
-
root 61663 0.0 0.0 35512 468 ? S 00:07 0:00 /usr/local/courier-authlib/libexec/courier-authlib/authdaemond
-
root 61664 0.0 0.0 35512 468 ? S 00:07 0:00 /usr/local/courier-authlib/libexec/courier-authlib/authdaemond
-
root 61665 0.0 0.0 35512 468 ? S 00:07 0:00 /usr/local/courier-authlib/libexec/courier-authlib/authdaemond
-
root 61666 0.0 0.0 35512 468 ? S 00:07 0:00 /usr/local/courier-authlib/libexec/courier-authlib/authdaemond
-
root 61667 0.0 0.0 35512 468 ? S 00:07 0:00 /usr/local/courier-authlib/libexec/courier-authlib/authdaemond
-
root 63660 0.0 0.0 112680 980 pts/0 S+ 02:00 0:00 grep --color=auto courier-authlib
7. 測試
測試虛擬用戶:
-
[root@localhost courier-authlib- 0.66.2]# /usr/local/courier-authlib/sbin/authtest -s login postmaster@extmail.org extmail
-
Authentication succeeded. //顯示這個表示成功,測試時使用的是postmaster@extmail.org,因為我們導入的數據庫init.sql里面自帶了這個。
-
Authenticated: postmaster@extmail.org (uid 2525, gid 2525)
-
Home Directory: /var/mailbox/extmail.org/postmaster //這里需要注意/var/mailbox這個目錄現在我們還沒有創建,后面web訪問的時候如果沒有會報錯,所以提前創建。
-
Maildir: /var/mailbox/extmail.org/postmaster/Maildir/
-
Quota: (none)
-
Encrypted Password: $1$phz1mRrj$3ok6BjeaoJYWDBsEPZb5C0
-
Cleartext Password: extmail
-
Options: (none)
-
[root@localhost courier-authlib- 0.66.2]# mkdir /var/mailbox
-
[root@localhost courier-authlib- 0.66.2]# chown -R postfix.postfix /var/mailbox/
測試smtp發信:
-
[ root@localhost ~]# printf "postmaster@extmail.org" | openssl base64
-
cG9zdG1hc3RlckBleHRtYWlsLm9yZw==
-
[ root@localhost ~]# printf "extmail" | openssl base64
-
ZXh0bWFpbA==
-
[ root@localhost ~]# telnet localhost 25
-
Trying :: 1...
-
telnet: connect to address :: 1: Connection refused
-
Trying 127.0.0.1...
-
Connected to localhost.
-
Escape character is '^]'.
-
220 mail.daen.com ESMTP Postfix
-
auth login
-
334 VXNlcm5hbWU6
-
cG9zdG1hc3RlckBleHRtYWlsLm9yZw==
-
334 UGFzc3dvcmQ6
-
ZXh0bWFpbA==
-
235 2.7.0 Authentication successful //成功
-
quit
-
221 2.0.0 Bye
-
Connection closed by foreign host.
8. 啟動nginx實現web訪問
nginx本身並不能解析cgi,extmail自帶了解析cgi的程序,但是有些地方需要修改下:
-
[root@localhost ~] # vim /var/www/extsuite/extmail/dispatch-init
-
SU_UID=postfix
-
SU_GID=postfix
啟動dispatch-init:
-
[root@localhost ~] # /var/www/extsuite/extmail/dispatch-init start
-
Starting extmail FCGI server...
-
[root@localhost ~] # /var/www/extsuite/extman/daemon/cmdserver -v -d
-
loaded ok
添加nginx虛擬主機:
vim /etc/nginx/conf.d/extmail.conf
文件內容如下:
-
server {
-
listen 8080;
-
server_name mail.everyoo.com;
-
index index.html index.htm index.php index.cgi;
-
root / var/www/extsuite/extmail/html/;
-
location /extmail/cgi/ {
-
fastcgi_pass 127.0.0.1:8888;
-
fastcgi_index index.cgi;
-
fastcgi_param SCRIPT_FILENAME / var/www/extsuite/extmail/cgi/$fastcgi_script_name;
-
include fcgi.conf;
-
}
-
location /extmail/ {
-
alias /var/www/extsuite/extmail/html/;
-
}
-
location /extman/cgi/ {
-
fastcgi_pass 127.0.0.1:8888;
-
fastcgi_index index.cgi;
-
fastcgi_param SCRIPT_FILENAME / var/www/extsuite/extman/cgi/$fastcgi_script_name;
-
include fcgi.conf;
-
}
-
location /extman/ {
-
alias /var/www/extsuite/extman/html/;
-
}
-
access_log / var/log/extmail_access.log;
-
}
創建fcgi.conf文件:
vim /etc/nginx/fcgi.conf
文件內容如下:
-
fastcgi_param GATEWAY_INTERFACE CGI/ 1.1;
-
fastcgi_param SERVER_SOFTWARE nginx;
-
fastcgi_param QUERY_STRING $query_string;
-
fastcgi_param REQUEST_METHOD $request_method;
-
fastcgi_param CONTENT_TYPE $content_type;
-
fastcgi_param CONTENT_LENGTH $content_length;
-
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
-
fastcgi_param REQUEST_URI $request_uri;
-
fastcgi_param DOCUMENT_ROOT $document_root;
-
fastcgi_param SERVER_PROTOCOL $server_protocol;
-
fastcgi_param REMOTE_ADDR $remote_addr;
-
fastcgi_param REMOTE_PORT $remote_port;
-
fastcgi_param SERVER_ADDR $server_addr;
-
fastcgi_param SERVER_PORT $server_port;
-
fastcgi_param SERVER_NAME $server_name;
安裝Unix::Syslog:
-
[root@localhost ~] # cd /usr/local/src/
-
[root@localhost /usr/ local/src]# wget http://www.cpan.org/authors/id/M/MH/MHARNISCH/Unix-Syslog-1.1.tar.gz
-
[root@localhost /usr/ local/src]# tar zxvf Unix-Syslog-1.1.tar.gz
-
[root@localhost /usr/ local/src]# cd Unix-Syslog-1.1
-
[root@localhost /usr/ local/src/Unix-Syslog-1.1]# perl Makefile.PL
-
[root@localhost /usr/ local/src/Unix-Syslog-1.1]# make && make install
啟動nginx,並檢查進程和監聽端口是否正常:
-
[root@localhost ~] # service nginx start
-
Redirecting to /bin/systemctl start nginx.service
-
[root@localhost ~] # ps aux |grep nginx
-
root 72338 0.0 0.1 122892 2296 ? Ss 03:22 0:00 nginx: master process /usr/sbin/nginx
-
nginx 72339 0.0 0.1 123336 3192 ? S 03:22 0:00 nginx: worker process
-
nginx 72340 0.0 0.1 123336 3192 ? S 03:22 0:00 nginx: worker process
-
nginx 72341 0.0 0.1 123336 3192 ? S 03:22 0:00 nginx: worker process
-
nginx 72342 0.0 0.1 123336 3192 ? S 03:22 0:00 nginx: worker process
-
root 72344 0.0 0.0 112680 976 pts/0 S+ 03:22 0:00 grep --color=auto nginx
-
[root@localhost ~] # netstat -lntp
-
Active Internet connections (only servers)
-
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
-
tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN 63834/dovecot
-
tcp 0 0 0.0.0.0:143 0.0.0.0:* LISTEN 63834/dovecot
-
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 72338/nginx: master
-
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 72338/nginx: master
-
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1482/sshd
-
tcp 0 0 127.0.0.1:8888 0.0.0.0:* LISTEN 64100/dispatch.fcgi
-
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 64328/master
-
tcp6 0 0 :::3306 :::* LISTEN 62442/mysqld
-
tcp6 0 0 :::80 :::* LISTEN 72338/nginx: master
-
tcp6 0 0 :::22 :::* LISTEN 1482/sshd
-
[root@localhost ~] #
然后到windows上訪問你服務器IP的8080端口:
extman的登錄賬戶為root@extmail.org密碼為extmail*123*,首次使用需要先添加域,添加之后再修改域,改為可自由注冊,再注冊用戶就可以登錄發郵件了:
本文轉自 ZeroOne01 51CTO博客,原文鏈接:http://blog.51cto.com/zero01/2064693,如需轉載請自行聯系原作者