postfix郵件伺服器搭建-安裝篇

来源:http://www.cnblogs.com/tssc/archive/2017/10/17/7683809.html
-Advertisement-
Play Games

本系列文章主要介紹linux下主流的開源郵件系統postfix的搭建過程,構建一個通過postfix虛擬用戶管理的完整的郵件系統 本文接著上文的環境,進行postfix郵件發信端和dovecot郵件收信端的部署,之後部署基於瀏覽器的extmail圖形管理端,使管理員可以通過網頁對郵件虛擬用戶進行管理 ...


本文接著上文的環境,進行postfix郵件發信端和dovecot郵件收信端的部署,之後部署基於瀏覽器的extmail圖形管理端,使管理員可以通過網頁對郵件虛擬用戶進行管理,對郵件伺服器進行管控

1.postfix郵件發信端部署

1.1.清理會引起衝突的軟體sendmail,如果是關閉相關軟體設計操作過多,不推薦

rpm -qa postfix sendmail
rpm -e --nodeps postfix sendmail

# 清除之前的郵件賬號信息

userdel postfix
groupdel postdrop
cat /etc/passwd|grep post*
cat /etc/gshadow|grep post*

1.2.創建postfix郵件用戶和組

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

cat /etc/passwd|grep post*
cat /etc/gshadow|grep post*

# 新建虛擬用戶郵箱目錄,並將其許可權賦予postfix用戶:

mkdir -p /var/mailbox
chown -R  postfix /var/mailbox

1.3.源碼編譯安裝postfix-3.2.3

cd /server/tools
wget ftp://ftp.cuhk.edu.hk/pub/packages/mail-server/postfix/official/postfix-3.2.3.tar.gz
tar -zxf postfix-3.2.3.tar.gz
cd postfix-3.2.3

# 配置參數

make makefiles \
'CCARGS=-DHAS_MYSQL -I/usr/include/mysql -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl  -DUSE_TLS -I/usr/include/openssl' \
'AUXLIBS=-L/usr/lib64/mysql -lmysqlclient -lz -lm -L/usr/lib64/sasl2 -lsasl2 -lssl -lcrypto'

# 編譯安裝

make
make install

# 執行完之後會進入設置相關目錄的交互界面,基本按照預設配置即可。

install_root: [/] 
tempdir: [/server/tools/postfix-3.2.3] 
config_directory: [/etc/postfix] 
command_directory: [/usr/sbin] 
daemon_directory: [/usr/libexec/postfix] 
data_directory: [/var/lib/postfix] 
html_directory: [no] /usr/local/postfix/html
mail_owner: [postfix] 
mailq_path: [/usr/bin/mailq] 
manpage_directory: [/usr/local/man] 
newaliases_path: [/usr/bin/newaliases] 
queue_directory: [/var/spool/postfix] 
readme_directory: [no] /usr/local/postfix/readme
sendmail_path: [/usr/sbin/sendmail] 
setgid_group: [postdrop] 
shlib_directory: [no] /usr/local/postfix/share-library
meta_directory: [/etc/postfix] 

1.4.更新別名數據文件/etc/aliases.db,這個步驟如果忽略,會造成postfix效率極低

/usr/bin/newaliases
ll /etc/aliases.db

# 註意:

1).安裝過程如果報錯,需要刪除目錄重新安裝
2).本文采用yum安裝Mysql和sasl2,如果使用源碼安裝這兩個軟體,需要修改編譯時CCARGS和AUXLIBS選項。

使用源碼安裝的mysql和cyrus-sasl,使用以下編譯參數:

make makefiles \
'CCARGS=-DHAS_MYSQL -I/usr/local/mysql/include -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/local/sasl2/include/sasl -DUSE_TLS -I/usr/include/openssl' \
'AUXLIBS=-L/usr/local/mysql/lib -lmysqlclient -lz -lrt -lm -L/usr/local/sasl2/lib -lsasl2 -lssl -lcrypto'

3).在執行make install的時有如下的提示:
/usr/libexec/ld-elf.so.1: Shared object "libmysqlclient.so.12" not found
是因為mysql的lib庫沒找到,需要告訴postfix應該到哪裡去找libmysqlclient.so.12。
使用ldconfig可以解決,例如:

echo /usr/local/mysql/lib/mysql >> /etc/ld.so.conf
ldconfig

4).make install的交互配置最好使用預設,如果修改根目錄則目錄結構會亂掉
5).如果/etc/aliases文件不存在,可以用如下命令創建:

echo postfix: root >> /etc/aliases

1.5.修改相關目錄的許可權否則,postfix無法正常運行(必須使用以下順序授權)

cd /server/tools
chown -R postfix.postfix /var/lib/postfix/
chown -R postfix.postfix /var/spool/postfix/private
chown -R postfix.postfix /var/spool/postfix/public
chown -R root /var/spool/postfix/pid/
chgrp  -R postdrop /var/spool/postfix/public
chgrp  -R postdrop /var/spool/postfix/maildrop/
chown root /var/spool/postfix

# 查看修改完的結果:

ll /var/lib/postfix/ -d
ll /var/lib/postfix/
ll /var/spool/postfix/ -d
ll /var/spool/postfix/

# 查看postfix相關程式文件

ll /usr/sbin/post*
ll /usr/libexec/postfix/
ll /var/spool/postfix/
ll /var/spool/postfix/private/ 
ll /var/spool/postfix/incoming/

1.6.修改配置文件,啟動postfix

vim /etc/postfix/main.cf

# 修改並確認以下配置,改成自己對應的就好

myhostname = mail.zuiyoujie.com
mydomain = zuiyoujie.com
myorigin = $mydomain
inet_interfaces = 127.0.0.1, (外網地址)(或著寫all)
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 127.0.0.0/8

# 參數說明:

myhostname    指定運行postfix郵件系統的主機的主機名(用 FQDN 的方式來寫),預設情況下,其值被設定為本地機器名;
mydomain          指定您的功能變數名稱,預設情況下,postfix將myhostname的第一部分刪除而作為mydomain的值;
myorigin             指明發件人所在的功能變數名稱;郵件標頭上面的 mail from 的那個地址
inet_interfaces   指定系統監聽的網路介面;
mydestination    指定接收郵件時收件人的功能變數名稱,即您的postfix系統要接收到哪個功能變數名稱的郵件;
mynetworks       指定你所在的網路的網路地址,postfix系統根據其值來區別用戶是遠程的還是本地的,如果是本地網路用戶則允許其訪問;

# 註意:

1)在postfix的配置文件中,參數行和註釋行是不能處在同一行中的;
2)任何一個參數的值都不需要加引號,否則,引號將會被當作參數值的一部分來使用;
3)每修改參數及其值後執行 postfix reload 即可令其生效;但若修改了inet_interfaces,則需重新啟動postfix;
4)如果一個參數的值有多個,可以將它們放在不同的行中,只需要在其後的每個行前多置一個空格即可;postfix會把第一個字元為空格或tab的文本行視為上一行的延續;

# 為postfix提供SysV服務管理腳本/etc/rc.d/init.d/postfix

vim /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
# main-config: /etc/postfix/main.cf
# master-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 daemons.
start() {
    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 daemons.
stop() {
    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
}
restart() {
    stop
    start
}
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 $?
}
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 $?
View Code

# 添加為系統服務,並設置開機自啟動

chmod 755  /etc/init.d/postfix
chkconfig --add postfix
chkconfig postfix on
chkconfig --list postfix

# postfix啟動管理腳本測試

service postfix start
service postfix stop

# postfix常用的管理命令

/usr/sbin/postfix start
/usr/sbin/postfix reload
/usr/sbin/postfix check

1.7.測試postfix是否可以正常發送郵件

yum install telnet -y
telnet 127.0.0.1 25

# 實例如下:

[root@mail tools]# telnet 127.0.0.1 25
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220 Welcome to our mail.zuiyoujie.com ESMTP!
helo mail.zuiyoujie.com   
250 mail.zuiyoujie.com
mail from:[email protected]
250 2.1.0 Ok
rcpt to:[email protected]
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
from: root testmail <[email protected]>
to:[email protected]
subject:first test mail  
This is a test mail from root.
.
250 2.0.0 Ok: queued as 329F5180712
quit
221 2.0.0 Bye
Connection closed by foreign host.
[root@mail tools]# mailq
-Queue ID-  --Size-- ----Arrival Time---- -Sender/Recipient-------
329F5180712*     433 Mon Oct 16 17:46:55  [email protected]
                                         [email protected]

-- 0 Kbytes in 1 Request.

# 使用以下命令可以查看郵件內容

postcat -q [Queue ID]

# 實例如下:

[root@mail ~]# postcat -q 329F5180712
*** ENVELOPE RECORDS deferred/3/329F5180712 ***
message_size:             362             690               1               0             362               0
message_arrival_time: Mon Oct 16 18:39:02 2017
create_time: Mon Oct 16 18:39:22 2017
named_attribute: log_ident=329F5180712
named_attribute: rewrite_context=local
sender: [email protected]
named_attribute: log_client_name=localhost
named_attribute: log_client_address=127.0.0.1
named_attribute: log_client_port=35432
named_attribute: log_message_origin=localhost[127.0.0.1]
named_attribute: log_helo_name=mail.zuiyoujie.com
named_attribute: log_protocol_name=SMTP
named_attribute: client_name=localhost
named_attribute: reverse_client_name=localhost
named_attribute: client_address=127.0.0.1
named_attribute: client_port=35432
named_attribute: server_address=127.0.0.1
named_attribute: server_port=25
named_attribute: helo_name=mail.zuiyoujie.com
named_attribute: protocol_name=SMTP
named_attribute: client_address_type=2
named_attribute: dsn_orig_rcpt=rfc822;[email protected]
original_recipient: [email protected]
recipient: [email protected]
*** MESSAGE CONTENTS deferred/3/329F5180712 ***
Received: from mail.zuiyoujie.com (localhost [127.0.0.1])
        by mail.zuiyoujie.com (Postfix) with SMTP id 329F5180712
        for <[email protected]>; Mon, 16 Oct 2017 18:39:02 +0800 (CST)
from: root testmail <[email protected]>
to:[email protected]
Message-Id: <20171016103922[email protected]>
Date: Mon, 16 Oct 2017 18:39:02 +0800 (CST)
*** HEADER EXTRACTED deferred/3/329F5180712 ***
*** MESSAGE FILE END deferred/3/329F5180712 ***

# 可以看出郵件伺服器已經可以發送郵件,不過由於接收郵件的服務沒有配好郵件還收不到,如果想看收發效果,可以將收件人改為自己的qq郵箱等進行測試。

# 接下來進行配置,啟用smtp用戶認證,使用courier-authlib通過資料庫對虛擬用戶進行管理

2.安裝配置Courier authentication library 

# courier-authlib是Courier組件中的認證庫,它是courier組件中一個獨立的子項目,用於為Courier的其它組件提供認證服務,是由一位美籍俄羅斯人的傑作。其認證功能通常包括驗正登錄時的帳號和密碼、獲取一個帳號相關的家目錄或郵件目錄等信息、改變帳號的密碼等。而其認證的實現方式也包括基於PAM對/etc/passwd和/etc/shadow進行認證,基於GDBM或DB進行認證,基於LDAP/MySQL/PostgreSQL進行認證等。因此,courier-authlib也常用來與courier之外的其它郵件組件(如postfix)整合為其提供認證服務。

cd /server/tools
wget http://jaist.dl.sourceforge.net/project/courier/authlib/0.66.1/courier-authlib-0.66.1.tar.bz2
tar -xf courier-authlib-0.66.1.tar.bz2 
cd courier-authlib-0.66.1

# 配置參數

./configure \
--prefix=/usr/local/courier-authlib \
--sysconfdir=/etc \
--with-redhat \
--with-mailuser=postfix \
--with-mailgroup=postfix \
--with-authmysql=yes \
--with-authmysqlrc=/etc/authmysqlrc \
--with-authdaemonrc=/etc/authdaemonrc \
--with-mysql-libs=/usr/lib64/mysql \
--with-mysql-includes=/usr/include/mysql \
--without-authpam \
--without-authpgsql \
--without-authvchkpw \
--without-authshadow

# 編譯安裝

make
make install

# 創建認證配置文件

chmod 755 -R /usr/local/courier-authlib/var/spool/authdaemon
cp /etc/authmysqlrc.dist  /etc/authmysqlrc
cp /etc/authdaemonrc.dist  /etc/authdaemonrc
ll /etc/authmysqlrc
ll /etc/authdaemonrc

# 編輯/etc/authdaemonrc文件,確保使用mysql認證模塊

vim /etc/authdaemonrc

# 修改並確認以下配置

authmodulelist="authpwd authmysql"
authmodulelistorig="authpwd authmysql"
daemons=10

# 編輯/etc/authmysqlrc文件,讓courier能夠正確的讀取MySQL中的認證信息

vim /etc/authmysqlrc

# 修改並確認以下配置

MYSQL_SERVER       localhost
MYSQL_USERNAME     extmail                    # 資料庫用戶名
MYSQL_PASSWORD     extmail                    # 資料庫密碼
MYSQL_SOCKET       /var/lib/mysql/mysql.sock
MYSQL_PORT         3306                       # mysql監聽的埠
MYSQL_DATABASE     extmail    
MYSQL_USER_TABLE   mailbox
MYSQL_CRYPT_PWFIELD  password                 # 92行,crypt改為password
DEFAULT_DOMAIN       mail.zuiyoujie.com       # 105行,預設郵件域
MYSQL_UID_FIELD      '2525'
MYSQL_GID_FIELD      '2525'
MYSQL_LOGIN_FIELD    username
MYSQL_HOME_FIELD     concat('/var/mailbox/',homedir)    # 133行,home修改
MYSQL_NAME_FIELD     name
MYSQL_MAILDIR_FIELD  concat('/var/mailbox/',maildir)    # 150行,maildir修改

# 將courier-authlib配置為系統服務

cp courier-authlib.sysvinit /etc/rc.d/init.d/courier-authlib
chmod 755 /etc/init.d/courier-authlib
chkconfig --add courier-authlib
chkconfig --list courier-authlib

# 將courier-authlib 的庫目錄添加到庫搜索文件中

echo "/usr/local/courier-authlib/lib/courier-authlib" >> /etc/ld.so.conf.d/courier-authlib.conf
ldconfig -v

# 啟動 courier-authlib 服務

service courier-authlib start

# 由於是socket的方式,所以沒有埠,可以驗證進程是否啟動

ps -ef | grep courier
pstree | grep authdaemond
ll /usr/local/courier-authlib/var/spool/authdaemon/socket 

# 查看postfix是否支持cyrus-sasl認證功能

cd /server/tools/
/usr/sbin/postconf -a

# 出現以下內容表示可以使用sasl認證

[root@mail tools]# /usr/sbin/postconf -a
cyrus
dovecot

# 設置postfix使用的sasl配置文件smtpd,讓sasl知道該怎麼從MySQL中讀取認證信息,該文件需要手工創建,sasl密碼驗證機製為authdaemond

# 新建smtp認證文件,添加以下4行內容:

vim /etc/sasl2/smtpd.conf
pwcheck_method: authdaemond
log_level: 3
mech_list:PLAIN LOGIN
authdaemond_path:/usr/local/courier-authlib/var/spool/authdaemon/socket

# 關於sasl2的認證文件smtpd.conf的位置,可以有以下3個,需要註意

/etc/sasl2/smtpd.conf
/usr/lib64/sasl2/smtpd.conf
/etc/postfix/sasl2/smtpd.conf

# 配置postfix支持sasl郵箱安全認證

vim /etc/postfix/main.cf

# 添加以下內容

###### CYRUS-SASL ######
broken_sasl_auth_clients = yes
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_path = /etc/sasl2
smtpd_sasl_security_options = noanonymous
smtpd_banner = Welcome to our $myhostname ESMTP!
smtpd_sender_restrictions = permit_mynetworks,reject_sender_login_mismatch,reject_non_fqdn_sender,reject_non_fqdn_recipient,reject_invalid_hostname,reject_authenticated_sender_login_mismatch,reject_unauthenticated_sender_login_mismatch,check_sender_access hash:/etc/postfix/access
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_invalid_hostname,reject_non_fqdn_hostname,reject_non_fqdn_sender,reject_non_fqdn_recipient,reject_unknown_sender_domain,reject_unknown_recipient_domain,reject_unauth_pipelining,reject_unauth_destination
smtpd_sender_login_maps = mysql:/etc/postfix/mysql_virtual_sender_maps.cf,mysql:/etc/postfix/mysql_virtual_alias_maps.cf
/usr/sbin/postfix check
/usr/sbin/postfix reload

3.安裝配置dovecot

yum install dovecot dovecot-mysql 

# 修改dovecot主配置文件

vim /etc/dovecot/dovecot.conf 
protocols = imap pop3 lmtp        # 啟用
listen = *

# 修改auth認證配置文件

vim /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = no
auth_mechanisms = plain login
!include auth-system.conf.ext

# 修改10-mail.conf配置文件

vim /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:/var/mailbox/%d/%n/Maildir

# 配置資料庫認證相關文件

cd /etc/dovecot/conf.d/
cp auth-sql.conf.ext auth-sql.conf
vim /etc/dovecot/conf.d/auth-sql.conf

# 第9行和第21行改為以下內容(去掉passdb和userdb的ext尾碼)

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

# 手工創建dovecot-sql.conf文件

vim /etc/dovecot/dovecot-sql.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'

# 啟動dovecot郵件接收端

chkconfig dovecot on
chkconfig --list dovecot
service dovecot start

4.安裝extmail

cd /server/tools
tar -xf extmail-1.2.tar.gz 
mkdir -p /var/www/extsuite
mv extmail-1.2 /var/www/extsuite/extmail
chown -R postfix.postfix /var/www/extsuite/extmail
ll /var/www/extsuite/extmail

# 修改配置文件

cd /var/www/extsuite/extmail/
cp webmail.cf.default  webmail.cf
vim /var/www/extsuite/extmail/webmail.cf
SYS_USER_LANG = zh_CN                  # 77行,語言選項
SYS_MESSAGE_SIZE_LIMIT = 52428800      # 105行,用戶可以發送的郵件大小預設5M
SYS_MIN_PASS_LEN = 8                   # 107行,最短密碼長度        
SYS_MAILDIR_BASE = /var/mailbox        # 127行,前文所設置的用戶郵件的存放目錄
SYS_MYSQL_USER = extmail               # 140行,連接資料庫伺服器所使用用戶名
SYS_MYSQL_PASS = extmail               # 141行,密碼和郵件伺服器用到的資料庫
SYS_MYSQL_HOST = localhost             # 143行,資料庫伺服器主機名
SYS_MYSQL_SOCKET = /var/lib/mysql/mysql.sock
SYS_MYSQL_TABLE = mailbox            
# 147行,以下配置用來指定驗證用戶登錄所用到的表,以及用戶名、功能變數名稱和用戶密碼分別對應的表中列的名稱,預設即可
SYS_MYSQL_ATTR_USERNAME = username
SYS_MYSQL_ATTR_DOMAIN = domain
SYS_MYSQL_ATTR_PASSWD = password
# 198行,指定之前安裝的authdaemo socket文件的位置
SYS_AUTHLIB_SOCKET = /usr/local/courier-authlib/var/spool/authdaemon/socket

# 創建extmail臨時目錄

mkdir -p /tmp/extmail/upload
chown -R postfix.postfix /tmp/extmail/
ll /tmp
ll /tmp/extmail/

5.安裝extman

cd /server/tools/
tar -xf extman-1.1.tar.gz 
mv extman-1.1 /var/www/extsuite/extman
chown -R postfix.postfix /var/www/extsuite/extman
ll /var/www/extsuite/extman

# 修改配置文件

cd /var/www/extsuite/extman/
cp webman.cf.default  webman.cf
vim /var/www/extsuite/extman/webman.cf
SYS_MAILDIR_BASE = /var/mailbox        # 12行,設置的用戶郵件的存放目錄
SYS_SESS_DIR = /tmp/extman/
# 此兩處後面設定的ID號需更改為前而創建的postfix用戶和postfix組的id號,本文使用的
SYS_DEFAULT_UID = 2525                 # 98行
SYS_DEFAULT_GID = 2525                 # 101行
SYS_MYSQL_USER = extmail               # 127行
SYS_MYSQL_PASS = extmail               # 128行
SYS_MYSQL_SOCKET = /var/lib/mysql/mysql.sock    # 132行
# 132行,指定驗證管理員登錄所用到的表,及相關參數,預設即可
SYS_MYSQL_TABLE = manager
SYS_MYSQL_ATTR_USERNAME = username
SYS_MYSQL_ATTR_PASSWD = password

# 創建extman臨時目錄,用於session等數據文件

mkdir /tmp/extman
chown -R postfix.postfix /tmp/extman/
ll /tmp

# 修改cgi目錄的屬主,便於網頁訪問

chown -R postfix.postfix /var/www/extsuite/extmail/cgi/
chown -R postfix.postfix /var/www/extsuite/extman/cgi/
ll /var/www/extsuite/extmail/cgi/
ll /var/www/extsuite/extman/cgi/

# 複製5個虛擬用戶資料庫配置文件到postfix目錄

cd /var/www/extsuite/extman/docs/
cp mysql_virtual_* /etc/postfix/
ll /etc/postfix/mysql_virtual_*

# 初始化extmail資料庫(空密碼)

mysql -u root -p < /var/www/extsuite/extman/docs/extmail.sql
mysql -u root -p < /var/www/extsuite/extman/docs/init.sql

# 據庫授權

mysql -uroot -p
grant all privileges on extmail.* to extmail@localhost identified by 'extmail';
grant all privileges on extmail.* to extmail@127.0.0.1 identified by 'extmail';         
flush privileges;
delete from mysql.user where user=' ';
delete from mysql.user where host='mail.zuiyoujie.com';
select user,host from mysql.user;

# 編輯/etc/postfix/main.cf,讓postfix支持虛擬域和虛擬用戶

vim /etc/postfix/main.cf
####### Virtual Mailbox Settings #######
virtual_uid_maps = static:2525
virtual_gid_maps = static:2525
virtual_transport = virtual
message_size_limit = 60336000
virtual_mailbox_base = /var/mailbox
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_mailbox_limit = mysql:/etc/postfix/mysql_virtual_limit_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_alias_domains =
smtpd_client_connection_count_limit = 50
smtpd_client_connection_rate_limit = 50

# 重新載入配置文件

/usr/sbin/postfix check
/usr/sbin/postfix reload

6.配置Mailgraph_ext,使用Extman的圖形日誌

# 配置啟動圖形工具

cp -r /var/www/extsuite/extman/addon/mailgraph_ext/ /usr/local/mailgraph_ext/
/usr/local/mailgraph_ext/mailgraph-init start
/var/www/extsuite/extman/daemon/cmdserver -daemon

# 配置開機自啟動

echo "/usr/local/mailgraph_ext/mailgraph-init start" >> /etc/rc.d/rc.local
echo "/var/www/extsuite/extman/daemon/cmdserver -v -d" >> /etc/rc.d/rc.local

7.配置Apache,使用瀏覽器進行虛擬用戶管理

vim /etc/httpd/conf/httpd.conf

# 修改並確認以下配置

LoadModule suexec_module modules/mod_suexec.so    # 198行,將suexec插件註釋掉,否則配置比較麻煩
User postfix                                 # 242行,修改http運行用戶postfix
Group postfix                                    # 243行,修改http運行組為postfix
ServerName mail.zuiyoujie.com                     # 276行,修改監聽功能變數名稱
# DocumentRoot "/var/www/html"                    # 292行,將之註釋掉,啟用虛擬主機

# 配置虛擬主機

vim /etc/httpd/conf.d/extmail.conf
<VirtualHost *:80>
   ServerName mail.zuiyoujie.com
   DocumentRoot /var/www/extsuite/extmail/html/
   ScriptAlias /extmail/cgi /var/www/extsuite/extmail/cgi
   Alias /extmail /var/www/extsuite/extmail/html
   ScriptAlias /extman/cgi /var/www/extsuite/extman/cgi
   Alias /extman /var/www/extsuite/extman/html
</VirtualHost>

# 啟動Apache

service httpd start
chkconfig httpd on
chkconfig --list httpd

# 接下來就可以登錄http://mail.zuiyoujie.com,選擇管理即可登入extman進行後臺管理了

# 預設的管理員用戶密碼

[email protected]  
extmail*123*

至此postfix郵箱伺服器的收發件,用戶安全認證就已經配置完成,可以集中管理郵件虛擬用戶

8.常用郵件日誌分析

# 動態跟蹤日誌變化

tail -f /var/log/maillog

# 取指定類型的日誌

egrep '(reject|warning|error|fatal|panic):' /var/log/maillog

# 查看postfix成功接收到郵件:(交貨到郵件目錄)  

cat /var/log/maillog |grep "delivered to maildir" 
cat /var/log/maillog |grep "delivered to maildir" | egrep -o "(\w+)([@]{1}\w+[.]{1,})(\w+)" 

# 取指定日期,指定類型日誌:

cat /var/log/maillog | grep "^Oct\ 17" | egrep "reject|warning|error|fatal|panic" | less

# 取指定日期,指定類型日誌:  

cat /var/log/maillog | grep "^Oct\ 17" | egrep "reject|warning|error|fatal|panic" | less

9.postfix中的命令行工具

mailq 對郵件隊列文件進行列表。表中的每一個條目包含有以下信息:隊列文件ID、郵件的大小、到達的時間、發件人、收件人和投遞延遲的原因(如果投遞有延遲的話)。該命令主要是與showq後臺程式通信來獲取隊列文件的相關信息。該命令無參數。
newaliases 該工具進行別名資料庫的初始化。如果沒有指定資料庫的類型,則使用系統預設的資料庫類型(在linux下為hash)。該命令可以不帶參數執行。
postcat 列印郵件隊列文件的內容。後面接要顯示的隊列文件名,可以帶一個-v的參數進行冗餘顯示。
postmap 建立postfix查詢資料庫。在linux下可以直接跟上原始文件而不帶任何參數來建立該資料庫。
postconf -d 列印配置參數的預設值。
postconf -m 列出所有支持的查詢表類型。
postconf -n 查看postfix生效的配置

完畢,呵呵呵


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • char、varchar、nchar、nvarchar、text的區別 1.有var首碼的,表示是實際存儲空間是變長的,varchar,nvarchar 所謂定長就是長度固定的,當輸入的數據長度沒有達到指定的長度時將自動以英文空格在其後面填充,使長度達到相應的長度,當你輸入的字元大於指定的數時,它會 ...
  • PreparedStatement 1、 2、 3、 4、 並沒有select ?,? from book的形式,都是值為多少的形式 ...
  • 1.正則中所有的匹配模式,都應該理解為"匹配了某字元或字元串後,緊跟著再匹配"。這個概念很重要。 2.中括弧首部使用脫字元時,表示的是緊跟著匹配不含給定字元的字元,而不是允許不匹配給定的字元。 它們大多數時候是等價的,但在匹配行尾時,意義不同,例如:Aa[^bcd]$ 所匹配的行允許是Aaa$或Aa ...
  • 本文目錄:1. nginx的反向代理功能 1.1 正向代理和反向代理 1.2 配置簡單的反代實驗 1.3 使用upstream模塊實現分組反向代理 1.4 ngx_http_proxy_module模塊 1.4.1 指令及其意義 1.4.2 proxy_pass 1.4.3 proxy_set_he ...
  • 一.環境:: ubuntu 16.04 二.安裝過程: 2.1 去微信官網獲取最新的windows64位版本的微信開發工具 https://servicewechat.com/wxa-dev-logic/download_redirect?type=x64&from=mpwiki 2.2 安裝win ...
  • 1》Nginx概述: 很多人對apache非常熟悉,Nginx與Apache類似,屬於WEB容器,同時也是一款高性能的HTTP和反向代理軟體,它們之間最大的差別是Apache的處理速 度很慢,而且占用很多記憶體資源,而Nginx卻恰恰相反,在功能實現上,Apache的所有模塊都是支持動靜態編譯,而Ng ...
  • 一、keil 5安裝park文件的方法 1.安裝keil 5後,會彈出如下的park文件安裝界面,分別顯示了安裝的park文件、實例、設備以及開發板。點擊Parks->Check For Update會自動更新最新的Park文件。 此外也可以點擊keil中的Park Installer快捷按鈕進入p ...
  • 一、聲明: 本文采用操作系統版本: Centos 7 Linux系統 版本源:CentOS-7-x86_64-DVD-1708.iso 官網下載地址:http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1708 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...