筆記內容:CentOS7下搭建postfix郵箱服務器並實現extmail的web訪問
筆記日期:2017-11-20php
閒來無事想着嘗試使用postfix搭建一個郵箱服務器,我是邊搭建邊寫這個筆記,搭建過程當中遇到坑也會一併記錄,使用的系統版本以下:html
[root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core)
本示例基於LNMP環境。mysql
關閉selinuxlinux
[root@localhost ~]# setenforce 0 [root@localhost ~]# getenforce Permissive [root@localhost ~]#
關閉firewalld防火牆,並清空iptables規則:nginx
[root@localhost ~]# systemctl stop firewalld [root@localhost ~]# iptables -F [root@localhost ~]# iptables -X [root@localhost ~]# iptables -nvL 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命令,還須要先安裝這個命令:c++
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
首先須要安裝編譯環境及其餘所須要的包,省得一會編譯過程當中老報缺乏包的錯誤,由於須要安裝的包有點多,因此這個過程有點慢:web
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:sql
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.下載源碼包並解壓編譯(若是下載地址失效就到官網去找下載鏈接):vim
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裏面:
#!/bin/bash # # 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
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]# vim /etc/dovecot-mysql.conf 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'
下載解壓並編譯:
[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:
[root@localhost courier-authlib-0.66.2]# chmod 755 /usr/local/courier-authlib/var/spool/authdaemon [root@localhost courier-authlib-0.66.2]# cp /etc/authdaemonrc.dist /etc/authdaemonrc [root@localhost courier-authlib-0.66.2]# cp /etc/authmysqlrc.dist /etc/authmysqlrc [root@localhost courier-authlib-0.66.2]# vim /etc/authdaemonrc //配置文件裏的驗證方法比較多,咱們這裏只使用authmysql authmodulelist="authmysql" authmodulelistorig="authmysql" [root@localhost courier-authlib-0.66.2]# vim /etc/authmysqlrc //直接添加到配置文件尾部,而後去上面將響應系統默認的注視掉,或者刪除便可 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以及虛擬用戶相關的設置:
[root@localhost ~]# vim /usr/lib64/sasl2/smtpd.conf //文件不存在,要本身建立 pwcheck_method: authdaemond log_level: 3 mech_list: PLAIN LOGIN authdaemond_path:/usr/local/courier-authlib/var/spool/authdaemon/socket [root@localhost ~]# vim /etc/postfix/main.cf ##postfix支持SMTP## 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 ##postfix支持虛擬用戶## 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和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的配置文件:
[root@localhost ~]# cd /var/www/extsuite/extmail [root@localhost extmail]# cp webmail.cf.default webmail.cf [root@localhost extmail]# vim webmail.cf 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包:
[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]# mysql -uroot < docs/extmail.sql 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並授予權限:
[root@localhost /var/www/extsuite/extman]# mysql -uroot 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
測試虛擬用戶:
[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.
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*,首次使用須要先添加域,添加以後再修改域,改成可自由註冊,再註冊用戶就能夠登陸發郵件了: