本系列文章主要介紹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生效的配置
完畢,呵呵呵