Postfix-2.11+Dovecot-2.0.9+MySQL+Cy

petterchx發表於2021-09-09


系統:

CentOS 6.5

IP:192.168.100.100

域名:mail.test.com

----------------------------------------------------------------------------------------

——安裝前的準備工作

1)關閉Selinux

[root@node1 ~]# vi /etc/selinux/config

SELINUX=disabled

2)安裝程式依賴包

[root@node1 ~]# yum install db4-devel ntpdate 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 -y

3)同步時間 [可選項]

[root@node1 ~]# ntpdate ntp.sjtu.edu.cn

4)安裝Unix-Syslog補丁

[root@node1 soft]# wget

[root@node1 soft]# tar fzvx Unix-Syslog-1.1.tar.gz

[root@node1 soft]# cd Unix-Syslog-1.1

[root@node1 Unix-Syslog-1.1]# perl Makefile.PL

[root@node1 Unix-Syslog-1.1]# make && make install

注意:不安裝此補丁的話使用extmail會報如下錯誤:

Unix::Syslog not found, please install it first! (in cleanup) Undefined subroutine &Ext::Logger::do_closelog called at /var/www/extsuite/extmail/libs/Ext/Logger.pm line 86.

5)在shell下面執行如下命令:

[root@node1 ~]# perl -e shell -MCPAN

CPAN is the world-wide archive of perl resources. It consists of about

300 sites that all replicate the same contents around the globe. Many

countries have at least one CPAN site already. The resources found on

CPAN are easily accessible with the CPAN.pm module. If you want to use

CPAN.pm, lots of things have to be configured. Fortunately, most of

them can be determined automatically. If you prefer the automatic

configuration, answer 'yes' below.

If you prefer to enter a dialog instead, you can answer 'no' to this

question and I'll let you configure in small steps one thing after the

other. (Note: you can revisit this dialog anytime later by typing 'o

conf init' at the cpan prompt.)

Would you like me to configure as much as possible automatically? [yes] yes

.....

.....

.....

cpan shell -- CPAN exploration and modules installation (v1.9402)

Enter 'h' for help.

cpan[1]> install CGI

......

.....

...

..

.

Checking if your kit is complete...

Looks good

Warning: prerequisite FCGI 0.67 not found.

Warning: prerequisite Test::More 0.98 not found. We have 0.92.

Writing Makefile for CGI

Could not read '/root/.cpan/build/CGI.pm-3.65-nKc3sL/META.yml'. Falling back to other methods to determine prerequisites

---- Unsatisfied dependencies detected during ----

----        MARKSTOS/CGI.pm-3.65.tar.gz       ----

    Test::More [requires]

    FCGI [requires]

Shall I follow them and prepend them to the queue

of modules we are processing right now? [yes] yes

......

.....

....

...

..

.

Warning (usually harmless): 'YAML' not installed, will not store persistent state

cpan[2]> quit

Terminal does not support GetHistory.

Lockfile removed.

注意:不執行上面的命令使用extmail會報如下類似錯誤:

Can't locate CGI.pm in @INC (@INC contains: /var/www/extsuite/extmail/libs /usr/local/lib/perl5 /usr/local/share/perl5 /usr/lib/perl5/vendor_perl

/usr/share/perl5/vendor_perl /usr/lib/perl5 /usr/share/perl5) at /var/www/extsuite/extmail/libs/Ext/CGI.pm line 20. BEGIN failed--compilation aborted at

/var/www/extsuite/extmail/libs/Ext/CGI.pm line 20. Compilation failed in require at /var/www/extsuite/extmail/libs/Ext/App.pm line 23. BEGIN failed--compilation

aborted at /var/www/extsuite/extmail/libs/Ext/App.pm line 23. Compilation failed in require at /var/www/extsuite/extmail/libs/Ext/App/Login.pm line 16. BEGIN failed--

compilation aborted at /var/www/extsuite/extmail/libs/Ext/App/Login.pm line 16. Compilation failed in require at /var/www/extsuite/extmail/cgi/index.cgi line 20.

6)重啟伺服器

[root@node1 ~]# reboot

——安裝postfix

1)解除安裝系統自帶的postfix軟體和使用者組

[root@node1 ~]# yum remove postfix -y

[root@node1 ~]# userdel postfix

[root@node1 ~]# groupdel postdrop

2)新增postfix使用者和組

[root@node1 ~]# groupadd -g 2525 postfix

[root@node1 ~]# useradd -g postfix -u 2525 -s /sbin/nologin -M postfix

[root@node1 ~]# groupadd -g 2526 postdrop

[root@node1 ~]# useradd -g postdrop -u 2526 -s /sbin/nologin -M postdrop

3)下載postfix

[root@node1 ~]# mkdir /tmp/soft

[root@node1 ~]# cd /tmp/soft

[root@node1 soft]# wget ftp://ftp.cuhk.edu.hk/pub/packages/mail-server/postfix/official/postfix-2.11.0.tar.gz

3)解壓並安裝postfix

[root@node1 soft]# tar xfv postfix-2.11.0.tar.gz

[root@node1 soft]# cd postfix-2.11.0

[root@node1 postfix-2.11.0]# 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'

[root@node1 postfix-2.11.0]# make && make install

4)配置相應許可權

[root@node1 postfix-2.11.0]# chown -R postfix:postdrop /var/spool/postfix

[root@node1 postfix-2.11.0]# chown -R postfix:postdrop /var/lib/postfix/

[root@node1 postfix-2.11.0]# chown root /var/spool/postfix

[root@node1 postfix-2.11.0]# chown -R root /var/spool/postfix/pid

5)配置postfix

[root@node1 postfix-2.12-20140406]# vi /etc/postfix/main.cf

#設定主機名

myhostname = mail.test.com

#指定域名

mydomain = test.com

#指明發件人所在的域名

myorigin = $mydomain

#指定postfix系統監聽的網路介面

inet_interfaces = all

#指定postfix接收郵件時收件人的域名 [使用虛擬域需要禁用]

mydestination = $myhostname, localhost.$mydomain, localhost,$mydomain

#指定信任網段型別

mynetworks_style = host

#指定信任的客戶端

mynetworks = 192.168.40.0/24, 127.0.0.0/8

#指定允許中轉郵件的域名

relay_domains = $mydestination

#設定郵件的別名

alias_maps = hash:/etc/aliases

4)新增Postfix啟動指令碼 [指令碼內容省略,太長]

[root@node1 postfix-2.12-20140406]# vi /etc/init.d/postfix

5)新增執行許可權

[root@node1 postfix-2.12-20140406]# chmod +x /etc/init.d/postfix

6)設定開啟啟動

[root@node1 postfix-2.12-20140406]# chkconfig --add postfix

[root@node1 postfix-2.12-20140406]# chkconfig postfix on

[root@node1 postfix-2.12-20140406]# service postfix restart

[root@node1 postfix-2.12-20140406]# netstat -antup |grep 25

tcp        0      0 0.0.0.0:25              0.0.0.0:*              LISTEN      1917/master

——安裝Dovecot

1)安裝Dovecot

[root@node1 ~]# yum install -y  dovecot dovecot-devel dovecot-mysql

2)配置Dovecot

[root@node1 soft]# cd /etc/dovecot/

[root@node1 dovecot]# vi dovecot.conf

protocols = imap pop3

!include conf.d/*.conf

listen = *

base_dir = /var/run/dovecot/

[root@node1 dovecot]# cd conf.d/

[root@node1 conf.d]# vi 10-auth.conf

disable_plaintext_auth = no

[root@node1 conf.d]# vi 10-mail.conf

mail_location = maildir:~/Maildir

mail_location = maildir:/var/mailbox/%d/%n/Maildir

mail_privileged_group = mail

[root@node1 conf.d]# vi 10-ssl.conf

ssl = no

[root@node1 conf.d]# vi 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@node1 conf.d]# cp auth-sql.conf.ext auth-sql.conf

[root@node1 conf.d]# vi auth-sql.conf

passdb {

  driver = sql

  args = /etc/dovecot/dovecot-sql.conf

}

userdb {

  driver = sql

  args = /etc/dovecot/dovecot-sql.conf

}

3)編輯dovecot透過mysql認證的檔案

[

root@node1 conf.d]# vi /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'

——安裝courier-authlib

1)下載安裝courier-authlib

[root@node1 soft]# wget

2)解壓並編譯安裝

[root@node1 soft]# tar fvx courier-authlib-0.66.1.tar.bz2

[root@node1 soft]# cd courier-authlib-0.66.1

[root@node1 courier-authlib-0.66.1]# ./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@node1 courier-authlib-0.66.1]# make && make install

3)配置courier-authlib

[root@node1 courier-authlib-0.66.1]# chmod 755 /usr/local/courier-authlib/var/spool/authdaemon

[root@node1 courier-authlib-0.66.1]# cp /etc/authdaemonrc.dist  /etc/authdaemonrc

[root@node1 courier-authlib-0.66.1]# cp /etc/authmysqlrc.dist  /etc/authmysqlrc

[root@node1 courier-authlib-0.66.1]# vi /etc/authdaemonrc

authmodulelist="authmysql"

authmodulelistorig="authmysql"

[root@node1 courier-authlib-0.66.1]# vi /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)

4)設定courier-authlib開機啟動

[root@node1 courier-authlib-0.66.1]# cp courier-authlib.sysvinit /etc/init.d/courier-authlib

[root@node1 courier-authlib-0.66.1]# chmod +x /etc/init.d/courier-authlib

[root@node1 courier-authlib-0.66.1]# chkconfig --add courier-authlib

[root@node1 courier-authlib-0.66.1]# chkconfig courier-authlib on

[root@node1 courier-authlib-0.66.1]# echo "/usr/local/courier-authlib/lib/courier-authlib" >> /etc/ld.so.conf.d/courier-authlib.conf

[root@node1 courier-authlib-0.66.1]# ldconfig

[root@node1 courier-authlib-0.66.1]# service courier-authlib start

Starting Courier authentication services: authdaemond

5)設定smtpd認證

[root@node1 courier-authlib-0.66.1]# vi /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

6)配置postfix支援SMTP

[root@node1 dovecot]# vi /etc/postfix/main.cf

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

7)配置postfix支援虛擬使用者

[root@node1 courier-authlib-0.66.1]# vi /etc/postfix/main.cf

virtual_mailbox_base = /var/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_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

1)建立相關目錄並解壓extmail

[root@node1 soft]# mkdir -p /var/www/extsuite

[root@node1 soft]# tar fzvx extmail-1.2.tar.gz -C /var/www/extsuite/

[root@node1 soft]# cp /var/www/extsuite/extmail-1.2 /var/www/extsuite/extmail

[root@node1 soft]# cd /var/www/extsuite/extmail

2)修改Extmail的主配置檔案

[root@node1 extmail]# cp webmail.cf.default webmail.cf

[root@node1 extmail]# vi 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

3)建立extmail的臨時檔案目錄及session目錄

[root@node1 extman]# mkdir -p /tmp/extmail/upload

[root@node1 extman]# chown postfix.postfix -R /tmp/extmail/

——安裝Extman

1)解壓extmail

[root@node1 soft]# tar fzvx extman-1.1.tar.gz -C /var/www/extsuite/

[root@node1 soft]# cd /var/www/extsuite/extmail

[root@node1 extsuite]# mv extman-1.1 extman

[root@node1 extsuite]# cd extman

2)修改Extman的主配置檔案

[root@node1 extman]# cp webman.cf.default webman.cf

[root@node1 extman]# vi webman.cf

SYS_MAILDIR_BASE = /var/mailbox

SYS_DEFAULT_UID = 2525

SYS_DEFAULT_GID = 2525

SYS_MYSQL_USER = extmail

SYS_MYSQL_PASS = extmail

SYS_MYSQL_DB = extmail

SYS_MYSQL_HOST = localhost

SYS_MYSQL_SOCKET = /var/lib/mysql/mysql.sock

3)修改cgi目錄的屬主

[root@node1 extman]# chown -R postfix.postfix /var/www/extsuite/extman/cgi/

[root@node1 extman]# chown -R postfix.postfix /var/www/extsuite/extmail/cgi/

4)匯入Extman的資料庫

[root@node1 extman]# cd docs/

[root@node1 docs]# vi extmail.sql

將檔案裡面所有的TYPE=MyISAM改為ENGINE=MyISAM、命令如下:

:% s/TYPE/ENGINE/g

[root@node1 docs]# mysql -u root < extmail.sql

[root@node1 docs]# mysql -u root < init.sql

5)授予使用者extmail訪問extmail資料庫的許可權

[root@node1 soft]# mysql -u root

MariaDB [(none)]> GRANT all privileges on extmail.* TO extmail@localhost IDENTIFIED BY 'extmail';

Query OK, 0 rows affected (0.52 sec)

MariaDB [(none)]> GRANT all privileges on extmail.* TO extmail@127.0.0.1 IDENTIFIED BY 'extmail';

Query OK, 0 rows affected (0.05 sec)

MariaDB [(none)]> quit

Bye

6)為Extman建立臨時目錄並給予許可權

[root@node1 docs]# mkdir /tmp/extman

[root@node1 docs]# chown postfix.postfix -R /tmp/extman/

——重啟postfix、dovecot、saslauthd、nginx

[root@node1 docs]# service postfix restart

[root@node1 docs]# service dovecot restart

[root@node1 docs]# service saslauthd restart

——測試虛擬使用者實現結果

1)測試Postfix 支援虛擬使用者

[root@node1 docs]# /usr/local/courier-authlib/sbin/authtest -s login postmaster@extmail.org extmail

Authentication succeeded.         //  表示成功

      Authenticated: postmaster@extmail.org   (uid 1000, gid 1000)

     Home Directory: /mailbox/extmail.org/postmaster

             Maildir: /mailbox/extmail.org/postmaster/Maildir/

                Quota: (none)

Encrypted Password: $1$phz1mRrj$3ok6BjeaoJYWDBsEPZb5C0

Cleartext Password: extmail

             Options: (none)

2)測試虛擬使用者SMPT發信認證

[root@node1 docs]# printf   "postmaster@extmail.org" | openssl base64

cG9zdG1hc3RlckBleHRtYWlsLm9yZw==

[root@node1 docs]# printf   "extmail" | openssl base64

ZXh0bWFpbA==

[root@node1 docs]#

[root@node1 docs]# telnet localhost 25

Trying 127.0.0.1...

Connected to localhost.localdomain (127.0.0.1).

Escape character is '^]'.

220 mail.benet.com ESMTP Postfix

auth login

334 VXNlcm5hbWU6

cG9zdG1hc3RlckBleHRtYWlsLm9yZw==

334 UGFzc3dvcmQ6

ZXh0bWFpbA==

235 2.0.0 Authentication successful       //  表示成功

quit

221 2.0.0 Bye

Connection closed by foreign host.

——啟動extmail和extman的相關程式

1)修改dispatch-initSU_UID和SU_GID

[root@node1 docs]# vi /var/www/extsuite/extmail/dispatch-init

SU_UID=postfix

SU_GID=postfix

2)啟動dispatch-init並新增到/etc/rc.local [不啟動dispatch-init]

[root@node1 docs]# /var/www/extsuite/extmail/dispatch-init start

[root@node1 docs]# echo "/var/www/extsuite/extmail/dispatch-init start" >> /etc/rc.local

注意:不啟動dispatch-init 連線extmail時候會報502錯誤。

3)啟動cmdserver並新增到/etc/rc.local

[root@node1 docs]# /data/www/extman/daemon/cmdserver -v -d

[root@node1 docs]# echo "/var/www/extsuite/extman/daemon/cmdserver -v -d " >> /etc/rc.local

注意:不啟動cmdserver的話,extmail登入管理後臺,系統資訊裡會報Connection refused錯誤

如果出現如下錯誤:Undefined subroutine &Ext::Utils::sort2name called at /var/www/extsuite/extmail/libs/Ext/App/Folders.pm line 387.

解決辦法:

[root@node1 Ext]# cd /var/www/extsuite/extmail/libs/Ext

[root@node1 Ext]# cp Utils.pm /var/www/extsuite/extman/libs/

[root@node1 Ext]# cd /var/www/extsuite/extman/libs/Ext

[root@node1 Ext]# mv Utils.pm ManUtils.pm

[root@node1 Ext]# /var/www/extsuite/extmail/dispatch-init stop

[root@node1 Ext]# /var/www/extsuite/extmail/dispatch-init start

——Extmail虛擬主機配置 [這裡用的是nginx]

1)配置extmail虛擬主機

[root@node1 ~]# vi /usr/local/nginx/conf/conf.d/extmail.conf

server {

   listen       8080;

   server_name  mail.test.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  /usr/local/nginx/logs/extmail_access.log;

}

2)建立fcgi.conf

[root@node1 ~]# vi /usr/local/nginx/conf/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;

3)重啟nginx

[root@node1 ~]# service nginx restart

——Extmail測試

待續...

©著作權歸作者所有:來自51CTO部落格作者dong540855184的原創作品,如需轉載,請註明出處,否則將追究法律責任

Postfix-2.12+DovecotPostfix


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4606/viewspace-2820658/,如需轉載,請註明出處,否則將追究法律責任。