我們來一步一步來構建MailServer,支持虛擬用戶、虛擬域,支持Webmail,支持Mysql。這個實驗化了兩天的時間完成的,其中各種崎嶇,認真的照着做,問題不大。不過新手還是不要做這個了,需要整合的東西太多。
原理見:http://laoguang.blog.51cto.com/6013350/1054674
我用的是redhat5.8,mail主機:IP:172.16.1.10,FQDN:mail.laoguang.me.,域laoguang.me ,SElinux已經關閉(切記這個新手最容易忘記這個,遇到錯先查看它),iptables也已經關閉。
o.環境準備
0.1 安裝開發庫
yum -y groupinstall "Development Libraries" "Development Tools" \
"Legacy Software Development" "X Software Development"
0.2 安裝post編譯需要的一些庫(rpm安裝即可)
yum -y install tcl tcl-devel libart_lgpl libart_lgpl-devel libtool-ltdl \
libtool-ltdl-devel expect
0.3 如果安裝sendmail請關閉它,並禁止開機啓動,否則會衝突的
service sendmail stop
chkconfig sendmail off
一,構建DNS服務器
爲什麼要構建DNS服務器呢?因爲當用戶發信的時候,比如發信給[email protected]時,postfix會查詢163.com的MX記錄,獲得MX的A記錄,然後把郵件發送給這個主機,同樣當我們給自己給自己發送郵件的時候,如果是發送的地址類似 [email protected]時postfix也會去查詢MX記錄,如果你發送的是[email protected]時,則不需要解析MX記錄。
1.1 安裝bind (我就yum安裝了,很輕鬆),由於redhat5.8帶了兩個版本的bind,於是我先卸載了低版本的bind,bind-libs,bind-utils,再安裝高版本的bind97.
rpm -e bind bind-libs bind-utils
yum -y install bind97 bind97-libs bind-utils
1.2 配置bind配置文件 /etc/named.conf(由於不是本文的重點所以簡單寫一下過程)
mv /etvc/named.conf /etc/named.conf.bak
vim /etc/named.conf ##內容如下
options {
directory "/var/named";
};
zone "." IN {
type hint;
file "named.ca";
};
zone "laoguang.me" IN {
type master;
file "laoguang.me.zone";
};
zone "1.16.172.in-addr.arpa" IN {
type master;
file "172.16.1.zone";
};
1.3 建立區域文件 /var/named/laoguang.me /var/named/172.16.1.zone
vim /var/named/laoguang.me
$TTL 86400
@ IN SOA ns admin (
10
2H
5M
7D
3H )
IN NS ns
IN MX 10 mail
ns IN A 172.16.1.10
mail IN A 172.16.1.10
vim /var/named/172.16.1.zone
$TTL 86400
@ IN SOA ns admin (
10
2H
5M
7D
3H )
IN NS ns
ns IN A 172.16.1.10
10 IN PTR ns.laoguang.me.
10 IN PTR mail.laoguang.me.
chown :named /etc/named.conf /var/named/laoguang.me.zone /var/named/172.16.1.zone
1.4 啓動named 並驗證是否能正確解析,並更改本機dns記錄
service named start
dig -t MX laoguang.me @127.0.0.1 ##如果能看到A記錄代表成功了
vim /etc/resolv.conf
nameserver:172.16.1.10
二.安裝配置Mysql
2.1 下載mysql
wget http://cdn.mysql.com/Downloads/MySQL-5.5/mysql-5.5.28-linux2.6-i686.tar.gz
2.2 解壓mysql
tar xvf mysql-5.5.28-linux2.6-i686.tar.gz -C /usr/local/
2.3 製作軟連接
cd /usr/local ;
ln -sv mysql-5.5.28-linux2.6-i686 mysql
2.4 爲mysql準備運行用戶與數據目錄
groupadd –r mysql
useradd -g mysql -r -s /sbin/nologin -M -d /mydata/data mysql
mkdir -pv /data/mysql
chown mysql:mysql /data/mysql
2.5 初始化mysql
cd /usr/local/mysql
chown -R root:mysql .
./scripts/mysql_install_db --datadir=/data/mysql --user=mysql
ls /data/mysql 查看是否生成了系統數據庫
cp support-files/my-huge.cnf /etc/my.cnf ##提供配置文件
##修改配置文件/etc/my.cnf添加一行
datadir = /data/mysql
cp support-files/mysql.server /etc/init.d/mysqld ##提供mysql腳本
##添加開機啓動
chkconfig –add mysqld
chkconfig mysqld on
##啓動mysqld
service mysqld restart
2.6 把mysql的命令添加到path中,並更新man記錄
echo "export PATH=$PATH:/usr/local/mysql/bin" > /etc/profile.d/mysql.sh
vim /etc/man.config ##文件MANPATH區位置添加如下
MANPATH /usr/local/mysql/man
2.7 把mysql庫文件頭文件導入到系統
echo "/usr/local/mysql/lib" > /etc/ld.so.conf.d/mysql.conf
ln -sv /usr/local/mysql/include /usr/include/mysql
ldconfig -v ##重新加載庫文件到緩存
到此mysql整理完畢了!!
三.編譯安裝配置postfix
3.1爲postfix準備用戶用戶組,併爲其MDA準備用戶與組
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
3.2讓postfix支持sasl與ssl需要cyrus 與openssl支持,查看是否安裝了
rpm -qa | grep sasl
rpm -q openssl
cyrus-sasl-plain-2.1.22-5.el5_4.3
cyrus-sasl-lib-2.1.22-5.el5_4.3
cyrus-sasl-devel-2.1.22-5.el5_4.3
cyrus-sasl-2.1.22-5.el5_4.3
openssl-0.9.8e-22.el5
如果有以上包就繼續,沒有的話請安裝,版本可以不一致。
3.3 下載安裝postfix
wget ftp://ftp.porcupine.org/mirrors/postfix-release/official/postfix-2.9.4.tar.gz
tar xvf postfix-2.9.4.tar.gz
cd postfix-2.9.4
make makefiles 'CCARGS=-DHAS_MYSQL -I/usr/local/mysql/include -DUSE_SASL_AUTH \
-DUSE_CYRUS_SASL -I/usr/include/sasl -DUSE_TLS' 'AUXLIBS=-L/usr/local/mysql/lib \
-lmysqlclient -lz -lm -L/usr/lib/sasl2 -lsasl2 -lssl -lcrypto'
##前半段指定頭文件所在路徑 後半段指定庫文件所在路徑##
make && make install
##把第二個選項[postfix的臨時目錄]改爲如下所示,其它的都默認,回車完畢
tempdir: [/root/postfix-2.9.1] /tmp/postfix
##安裝完畢後運行,根據提示運行
newaliases
3.4 修改配置文件/etc/postfix/main.cf
mv /etc/postfix/main.cf /etc/postfix/main.cf.org
# vim /etc/postfix/main.cf
##修改以下幾項爲您需要的配置
myhostname = mail.laoguang.me ##主機名
mydomain = laoguang.me ##域名
myorigin = $mydomain ##如果用戶發郵件沒有指定@域名,postfix發送時自動給補上
inet_interfaces = localhost,$myhostname ##postfix監聽的端口
mydestination = $myhostname, localhost, $mydomain ##這個指的是postfix負責接收的區域
mynetworks = 172.16.0.0/16, 127.0.0.0/8 ##這個表示凡是這麼來的客戶端postfix才負責中繼
說明:
1、在postfix的配置文件中,參數行和註釋行是不能處在同一行中的;
2、任何一個參數的值都不需要加引號,否則,引號將會被當作參數值的一部分來使用;
3、每修改參數及其值後執行 postfix reload 即可令其生效;但若修改了inet_interfaces,則需重新啓動postfix;
4、如果一個參數的值有多個,可以將它們放在不同的行中,只需要在其後的每個行前多置一個空格即可;postfix會把第一個字符爲空格或tab的文本行視爲上一行的延續;
3.5啓動postfix,並測試
postfix start ##啓動postfix查看是否報錯,相應的關閉則爲stop
netstat -tlnp | grep 25 ##查看是否監聽了25端口
tcp 0 0 172.16.1.10:25 0.0.0.0:* LISTEN 15086/master
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 15086/master
##這塊我得囉嗦一下,sendmail把所有功能集合到一個程序中,導致其很複雜,並且不夠安全,postfix作者採用模塊化的設計思路,把各個功能剝離開來,形成一個個模塊化程序,通過一個叫master的程序負責調用控制它們,所以比sendmail更安全,並且穩定。
添加一個用戶測試:
useradd redhat
echo "admin" | passwd --stdin redhat
發信給redhat查看是否能收到,爲了驗證前面說的理論,我們用telnet來發送郵件
telnet 172.16.1.10 25
Trying 172.16.1.10...
Connected to mail.laoguang.me (172.16.1.10).
Escape character is '^]'.
220 mail.laoguang.me ESMTP Postfix
helo mail.laoguang.me ##詢問smtpd是否在線
250 mail.laoguang.me ##對方給了相應
mail from:root ##告訴smtpd誰發來的信
250 2.1.0 Ok ##smtpd給了回覆
rcpt to:redhat ##告訴smtpd郵件是發給誰的,不加@主機名,smtpd會自動給補加$myorigin
250 2.1.5 Ok ##給了響應
data ##告訴smtpd下面是內容
354 End data with <CR><LF>.<CR><LF> ##服務器提示以 "." 結束內容
Subject hello linux ##指定郵件主題,可以省略
hello linux ,hell GNU ##隨意寫的內容
. ##結束
250 2.0.0 Ok: queued as E28CA167E3B ##smtpd提示發送序列號
su到redhat查看郵件是否收到了
su – redhat
[redhat@mail ~]$ mail
Mail version 8.1 6/6/93. Type ? for help.
"/var/spool/mail/redhat": 1 message 1 new
>N 1 [email protected] Tue Nov 6 06:09 14/498
&
從中看到郵件redhat收到了,但是你不覺得這個很恐怖嗎,因爲每個連上主機的人都可以冒名的發郵件,這個可不得了,所以認證是非常必要的了,這到後面再說。
3.6 如果一切正常,那麼讓postfix開機啓動,可以找個腳本,也可以直接 把命令寫到/etc/rc.d/rc.local ,腳本由於太佔版面了,所以還是採用第二種吧,其實第一種效果更不錯,還能實現服務重啓,如果有需要,就去網上找吧,或者把rpm安裝後生成的腳本複製過來即可使用。
echo "/usr/sbin/postfix start " >> /etc/rc.d/rc.local
四.爲postfix提供別名支持
4.1 vim /etc/postfix/main.cf
##取消alias_maps的註釋
alias_maps = hash:/etc/aliases
##再添加一個賬戶,測試別名機制是否有效
useradd hadoop
echo "admin" | passwd --stdin hadoop
##修改/etc/aliases 最後添加
redhat: hadoop ##第一個字段爲初始目標,第二個地址爲最終地址
newaliase ##將剛修改的文件編成hash編碼,也可以運行postaliase hash:/etc/aliases
##發信給redhat查看日誌是否轉發,並su到hadoop用戶查看是否收到郵件
echo "hi,redhat" | mail -s "redhat" redhat
tail /var/log/maillog ##查看是否轉發
su – hadoop
mail
五.postfix實現對客戶端訪問的基本控制
通過這幾個參數來控制:
smtpd_client_restrictions ##這個是限制客戶端來源ip
smtpd_data_restrictions ##這個是限制發送data 來源
smtpd_end_of_data_restrictions ##這個是限制那個 '.' 發送來源的
smtpd_etrn_restrictions ##這個是限制信件來源的即 mail from:
smtpd_helo_restrictions ##這個是限制發送helo IP來源
smtpd_recipient_restrictions ##這個是限制給誰中繼的
smtpd_sender_restrictions ##這個是限制發送者地址的即mail from
自定義訪問表的條件通常使用check_client_access, check_helo_access, check_sender_access, check_recipient_access進行,它們後面通常跟上type:mapname格式的訪問表類型和名稱。
下面我們來實現這個情況:禁止來自 [email protected],和來自 @microsoft域的的郵件發送到本機
5.1 編輯/etc/postfix/sender.deny (這個名字可以自己起)
[email protected] REJECT
microsoft.com REJECT
5.2 編碼成hash編碼
postmap hash:/etc/postfix/sender.deny
5.3 更改主配置文件,根據此文件限制
在主配置文件中查找smtpd_sender_restrictions如果沒有就找合適文件添加
smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/sender.deny
5.4 測試設置是否生效
[root@mail ~]# telnet 172.16.1.10 25
Trying 172.16.1.10...
Connected to mail.laoguang.me (172.16.1.10).
Escape character is '^]'.
220 mail.laoguang.me ESMTP Postfix
helo mail.laoguang.me
250 mail.laoguang.me
mail from:[email protected]
250 2.1.0 Ok
rcpt to:[email protected]
554 5.7.1 <oracle@163.com>: Sender address rejected: Access denied
由此可知已經生效了.
六.安裝dovecot用測試收信發信
6.1 安裝dovecot
爲了簡便咱們yum安裝吧
yum -y install dovecot
6.2 編輯dovecot配置文件 /etc/dovecont.conf
protocols = imap pop3 ##取消這個註釋,啓用對imap pop3的監聽
6.3 啓動dovecot
service dovecot start
6.4 驗證pop3收信
6.4.1通過telnet驗證
telnet 172.16.1.10 110
Trying 172.16.1.10...
Connected to mail.laoguang.me (172.16.1.10).
Escape character is '^]'.
+OK Dovecot ready.
USER redhat
+OK
PASS admin
+OK Logged in.
LIST
+OK 1 messages:
1 387
6.4.2通過OE驗證
新建立賬戶
下一步直到完成。
下面給自己發一封郵件測試能否收到:
接受郵件查看是否收到了 ##由於上面設置別名的時候把發往redhat的信全部轉發給了Hadoop,通過日誌查看到的,所以取消別名重新測試。##如果收不到請確認你的dns指向你剛纔建立的dns服務器地址,這就是我們建立dns服務器的作用。
由此可知,一切正常。
七.爲postfix開啓Cyrus-sasl認證功能
7.1 查看postfix是否支持sasl認證
postconf -a ##如果顯示以下代表支持cyrus
cyrus
dovecot
7.2 修改/etc/postfix/main.cf,修改mynetworks,並在配置文件中加入sasl的支持
mynetworks = 127.0.0.0/8
######################CYRUS-SASL############################
broken_sasl_auth_clients = yes
######下面這個代表給mynetworks與通過sasl認證的用戶中繼。其它的拒絕
smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,
reject_invalid_hostname,reject_non_fqdn_hostname,reject_unknown_sender_domain,
reject_non_fqdn_sender,reject_non_fqdn_recipient,reject_unknown_recipient_domain,
reject_unauth_pipelining,reject_unauth_destination
smtpd_sasl_auth_enable = yes ##啓用sasl
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous ##不允許匿名
######################CYRUS-END##########################
7.3 修改/etc/sysconfig/saslauthd驗證方法
MECH=shadow ##基於pam驗證配置比較複雜,我們以shadow爲例
7.4 建立/usr/lib/sasl2/smtpd.conf 添加以下內容
pwcheck_method: saslauthd ##用sasl認證程序檢查密碼
mech_list: PLAIN LOGIN
7.5 重新加載postfix,啓動cyrus-sasl
postfix reload
service saslauthd start
7.6檢測認證修改是否成功
7.6.1 命令測試 ##這個只能保證cyrus-sasl可以正常驗證了,不能保證與postfix結合正確
testsaslauthd -u redhat -p admin
0: OK "Success."
7.6.2 telnet測試cyrus-sasl是否與postfix結合正確
[root@mail ~]# telnet 172.16.1.10 25
Trying 172.16.1.10...
Connected to mail.laoguang.me (172.16.1.10).
Escape character is '^]'.
220 mail.laoguang.me ESMTP Postfix
auth login ##手動輸入,意思是我要驗證
334 VXNlcm5hbWU6 ##對方的響應,不過是base64編碼的
cmVkaGF0 ##這個是賬號redhat通過base64編碼的 echo -n "redhat" | openssl base64
334 UGFzc3dvcmQ6 ##同樣還是響應
YWRtaW4= ##密碼 base64編碼的見樓上
235 2.7.0 Authentication successful ##這個代表我們驗證通過了
##下面測試通過認證後能否中繼郵件
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>
.
250 2.0.0 Ok: queued as D07A1167EBC
由此看見服務器是給中繼的。
##下面測試不通過認證能否中繼
telnet 172.16.1.10 25
Trying 172.16.1.10...
Connected to mail.laoguang.me (172.16.1.10).
Escape character is '^]'.
220 mail.laoguang.me ESMTP Postfix
mail from:[email protected]
250 2.1.0 Ok
rcpt to:[email protected]
554 5.7.1 <jerry@qq.com>: Relay access denied
##提示不允許中繼,看來設置都是正確的。
八,Dovecot基於ssl實現pop3s,imaps
由於用戶登錄驗證都是基於明文的,所以對用戶來說加密顯得非常必要,下面我們來實現dovecot基於ssl實現加密驗證與傳輸,過程是很是簡單。
8.1 爲mailserver提供私鑰與證書,生成過程見http://laoguang.blog.51cto.com/6013350/1035608,我們把生成的密鑰證書放到/etc/dovecot目錄下分別爲dovecot.key,dovecot.cert
8.2 修改dovecot配置文件/etc/dovecot.conf
protocols = imaps pop3s
ssl_cert_file = /etc/dovecot/dovecot.cert
ssl_key_file = /etc/dovecot/dovecot.key
8.3 重啓dovecot 查看監聽端口
service dovecot restart
netstat –tnlp | grep dovecot ##查看監聽的是否爲995與993
8.4 更改oe測試
直接收發信提示連接服務器失敗,因爲我們關閉了pop3與imap,下面設置OE爲pop3s
再收發郵件測試,一切OK,你可以開個抓包工具測試是否能抓到有用的數據。
九.安裝Courier authentication library
由於sasl直接調用mysql驗證實現起來非常困難,而調用Courier authlib庫,讓它去調用mysql實現起來很是easy
9.1 下載Courier authlib ,解壓
wget http://ncu.dl.sourceforge.net/project/courier/authlib/0.64.0/courier-authlib-0.64.0.tar.bz2
tar xvf courier-authlib-0.64.0.tar.bz2
cd courier-authlib-0.64.0
9.2 編譯安裝Couier-autlib
./configure \
--prefix=/usr/local/courier-authlib \
--sysconfdir=/etc \
--without-authpam \
--without-authshadow \
--without-authvchkpw \
--without-authpgsql \
--with-authmysql \
--with-mysql-libs=/usr/local/mysql/lib \
--with-mysql-includes=/usr/local/mysql/include \
--with-redhat \
--with-authmysqlrc=/etc/authmysqlrc \
--with-authdaemonrc=/etc/authdaemonrc \
--with-mailuser=postfix \
--with-mailgroup=postfix \
--with-ltdl-lib=/usr/lib \
--with-ltdl-include=/usr/include
#####如果報如此錯 --with-authmyql specified bu no mysqlclient.so 先把mysql的rpm卸載掉 rpm -e -nodeps msyql ,courier-authlib安裝完畢後在把mysql安裝上去##切記Courier-authlib安裝成功夠把msyql再安裝回去,配置文件保留原來的,記得備份
make && make install
9.3 提供配置文件,把生成的實例配置文件改名爲配置文件
cp /etc/authdaemonrc.dist /etc/authdaemonrc
cp /etc/authmysqlrc.dist /etc/authmysqlrc
##修改配置文件/etc/authdaemonrc
authmodulelist="authmysql"
authmodulelistorig="authmysql"
daemons=5 ##修改爲合適值
##修改配置文件/etc/authmysqlrc下面內容
MYSQL_SERVER localhost
MYSQL_PORT 3306 ##指定你的mysql監聽的端口,這裏使用默認的3306
MYSQL_USERNAME extmail ##這時爲後文要用的數據庫的所有者的用戶名
MYSQL_PASSWORD extmail ##數據庫密碼
MYSQL_SOCKET /tmp/mysql.sock ##mysql的套接字,我安裝的mysql是/tmp/mysql.sock
MYSQL_DATABASE extmail ##數據庫的名字
MYSQL_USER_TABLE mailbox ##記錄用戶信息的表名
MYSQL_CRYPT_PWFIELD password ##知道指定用戶密碼的列是psssword列
MYSQL_UID_FIELD '2525' ##填寫postfix的uid
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) ##虛擬用戶郵箱所在列名
##一些賬號密碼等一定與後面建立時的一致,由於建立這些表比較複雜,我們選澤了extmail提供的模板
## 將來初始化extmail時生成表名,賬號密碼都與上面填寫相同。
建立/var/mailbox並更改屬主數組爲postfix
mkdir /var/mailbox
chown postfix:postfix
9.4 提供腳本
cp courier-authlib.sysvinit /etc/init.d/authlibd
chmod +x /etc/init.d/authlibd
chkconfig --add authlibd
chkconfig authlibd on
9.5 啓動authlib
service authlibd start
authlib安裝完畢
十.整合sasl與courier-authlib,以讓postfix調用
10.1 編輯 /usr/lib/sasl2/smtpd.conf ,更改爲如下內容
pwcheck_method: authdaemond ##更改sasl驗證方式,由authdaemon來驗證,而下面的authdaemon套接字指向的就是authlib
log_level: 3 ##日誌級別,用於排錯
mech_list:PLAIN LOGIN
authdaemond_path:/usr/local/courier-authlib/var/spool/authdaemon/socket ##套接字所在路徑
十一.讓postfix支持虛擬用戶與虛擬域
11.1 編輯/etc/postfix/main.cf 添加內容如
########################Virtual Mailbox Settings########################
virtual_mailbox_base = /var/mailbox ##mailbox所在目錄
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf ##虛擬郵箱映射,這些文件extmail中有模板
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
virtualvirtual_transport = virtual
########################Virtual Mailbox End########################
啓用虛擬域後註銷中心域中的myhostname, mydestination, mydomain, myorigin 以防與虛擬用戶中的域衝突,假設你本機域爲laoguang.me,虛擬域也爲laoguang.me,那你說到底是哪個域?
11.2 用extmail的模板生成需要的數據庫
11.2.1 下載 extmail 與extman
http://pan.baidu.com/share/link?shareid=127912&uk=2501966565
http://pan.baidu.com/share/link?shareid=127915&uk=2501966565
11.2.2 解壓 extman 並用啓用腳本生成數據庫
tar xvf extman-1.1.tar.gz
tar xvf extman-1.1.tar.gz ;cd docs;
##由於mysql引擎定義由TYPE改爲Engine所以先更改腳本extmail.sql與init.sql
sed -i 's@TYPE=MyISAM@Engine=MyISAM@g' extmail.sql
sed -i 's@TYPE=MyISAM@Engine=MyISAM@g' init.sql
##查看是否更改成功了
----------生成數據庫---------
##如果沒設置mysql的root密碼
mysql <extmail.sql
mysql <init.sql
###如果你的數據庫root設置密碼了##
mysql -uroot -p <extmail.sql
mysql -uroot -p <init.sql
##可以去mysql中查看是否生成了extmail數據庫
剛纔postfix主配置文件定義了好幾個映射文件也在此目錄下,拷貝到/etc/postfix下
cp mysql_virtual_* /etc/postfix/ ##此步容易遺忘
11.3 授權生成的數據庫給extmail用戶
mysql> GRANT all privileges on extmail.* TO 'extmail'@'localhost' IDENTIFIED BY 'extmail';
mysql> GRANT all privileges on extmail.* TO 'extmail'@'127.0.0.1' IDENTIFIED BY 'extmail';
mysql>flush privileges;
十二.配置dovecot支持mysql
12.1 修改主配置文件 /etc/dovecot.conf
mail_location = maildir:/var/mailbox/%d/%n/Maildir
auth default { ##查找它
mechanisms = plain
#passdb pam { ##註銷pam驗證密碼
#} ##註銷
#userdb passwd { 註銷用戶名在passwd中查詢
#}
passdb sql { ##啓用sql的驗證
args = /etc/dovecot-mysql.conf ##指定參數文件
}
userdb sql { ##啓用用戶信息的sql驗證
args = /etc/dovecot-mysql.conf ##指定參數文件
}
12.2 建立dovecot使用msyql的配置文件
vim /etc/dovecot-mysql.conf ##內容如下
driver = mysql
connect = host=localhost=/tmp/mysql.sockdbname=extmailuser=extmailpassword=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'
##斜體部分請更改爲你mysql套接字的位置
12.3 重啓dovecot
service dovecot restart
十三.安裝extmail提供webmail界面
13.1 在安裝extmail之前請先安裝apache,如果編譯安裝請參考http://laoguang.blog.51cto.com/6013350/1039208,我就以rpm安裝爲例了
yum -y install httpd
13.2 解壓exmail並拷貝到適當目錄
tar zxvf extmail-1.2.tar.gz
mkdir -pv /var/www/extsuite
mv extmail-1.2 /var/www/extsuite/extmail
cp /var/www/extsuite/extmail/webmail.cf.default /var/www/extsuite/extmail/webmail.cf
##因爲extmail配置文件中設置它的位置在/var/www/extsuite/中,
我們直接把它放到這個目錄中,省的修改配置文件了
##拷貝實例配置文件,建立爲配置文件
13.2 修改extmail配置文件 /var/www/exsuite/extmail/webmail.cf一下內容
SYS_USER_LANG = zh_CN ##設置字符集中文你懂得
SYS_MAILDIR_BASE = /var/mailbox ##郵箱目錄
SYS_MYSQL_USER = extmail ##連接mysql的用戶名
SYS_MYSQL_PASS = extmail ##連接mysql的密碼
SYS_MYSQL_DB = extmail ##數據庫名字
SYS_MYSQL_SOCKET = /tmp/mysql.sock ## msyql的套接字位置
SYS_MYSQL_HOST = localhost ##mysql的地址
SYS_MYSQL_TABLE = mailbox ##表名
SYS_MYSQL_ATTR_USERNAME = username ##驗證時用戶名在msyql中的列名
SYS_MYSQL_ATTR_DOMAIN = domain ##所在域在msyql中的列名
SYS_MYSQL_ATTR_PASSWD = password ##密碼在mysql中的列名
SYS_AUTHLIB_SOCKET = /usr/local/courier-authlib/var/spool/authdaemon/socket
##驗證時使用的套接字
13.3 修改apache配置文件/etc/httpd/conf/httpd.conf 如果是編譯的請自己根據自己編譯的編輯配置文件。
vim /etc/httpd/conf/httpd.conf
#DocumentRoot "/var/www/html" ##註銷中心主機 281行左右
NameVirtualHost *:80 ##啓用虛擬主機 基本在最後了
###添加以下內容####
<VirtualHost *:80>
ServerName mail.laoguang.me
DocumentRoot /var/www/extsuite/extmail/html/
ScriptAlias /extmail/cgi /var/www/extsuite/extmail/cgi
Alias /extmail /var/www/extsuite/extmail/html
SuexecUserGroup postfix postfix
</VirtualHost>
##修改 cgi執行文件屬主爲apache運行身份用戶:
chown -R postfix.postfix /var/www/extsuite/extmail/cgi/
##啓動httpd
service httpd start
登陸網頁測試,發現缺少一個組件Unix::Syslog,extmail需要依賴它,下面來安裝
13.4 安裝Unix::Syslog
wget http://mirrors.devlib.org/cpan/authors/id/M/MH/MHARNISCH/Unix-Syslog-1.1.tar.gz
##如果鏈接哪天失效了請去 http://http://search.cpan.org/ 搜索下載
tar xvf Unix-Syslog-1.1.tar.gz
cd Unix-Syslog-1.1
perl Makefile.PL
make && make install
##再次訪問網頁172.16.1.10發現無碼的世界確實不錯,不過還不能管理註冊管理賬戶
十四,安裝extman,支持郵箱管理
14.1 安裝配置extman
前面已經解壓並使用過extman了 直接移過去吧
mv extman-1.1 /var/www/extsuite/extman
cp /var/www/extsuite/extman/webman.cf.default /var/www/extsuite/extman/webman.cf
##實例文件拷貝爲配置文件
##編輯配置文件vi /var/www/extsuite/extman/webman.cf 調整以下參數,其它的符合要求
SYS_MAILDIR_BASE = /var/mailbox ##郵箱目錄
SYS_CAPTCHA_ON = 0 ##是否使用驗證碼,暫不使用,需要額外組建支持
SYS_DEFAULT_UID = 2525
SYS_DEFAULT_GID = 2525
SYS_MYSQL_USER = extmail ##數據庫賬號
SYS_MYSQL_PASS = extmail ##密碼
SYS_MYSQL_SOCKET = /tmp/mysql.sock ##mysql套接字
14.2 修改extman中cgi的屬組屬主並編輯httpd.conf
chown -R postfix.postfix /var/www/extsuite/extman/cgi/
在apache的主配置文件中Extmail的虛擬主機部分,添加如下兩行:
ScriptAlias /extman/cgi /var/www/extsuite/extman/cgi
Alias /extman /var/www/extsuite/extman/html
根據配置文件創建extman運行時所需的臨時目錄,並修改其相應的權限:
mkdir -pv /tmp/extman
chown postfix.postfix /tmp/extman
14.3 登陸管理首頁發現缺少一個DBD組件,它是perl-DBD-MySQL,安裝它
到此爲止你可以登陸並管理這個webmail了,登陸管理頁面輸入默認管理賬號:[email protected] 密碼:extmail*123*
新建一個域,如ibm.com
建立完畢後點擊那個鉛筆按鈕,修改可以自由註冊,建立時勾選的不生效。
新建兩個賬戶extmail測試收發郵件.
由此可見webmail收發郵件正常,再來測試OE客戶端收發郵件,因爲他們的驗證流程不一樣,不記得了看最上面的原理圖.
工具--賬戶--添加--郵件--顯示名 linux --pop3 172.16.1.10 smtp 172.16.1.10 --賬戶名 [email protected] 密碼 admin --完成
給自己發送一封郵件測試
看來整個過程是都是正確,下面再來完善一下,以爲登陸Extmail管理後臺發現狀態沒有日誌,下面來開啓日誌,但是日誌功能卻依賴了好幾個包。
十五.配置Mailgraph_ext,使用Extman的圖形日誌
15.1 安裝圖形日誌的運行所需要的軟件包Time::HiRes、File::Tail和rrdtool,其中前兩個包您可以去http://search.cpan.org搜索並下載獲得,後一個包您可以到 http://oss.oetiker.ch/rrdtool/pub/?M=D下載獲得; 注意安裝順序不能改換。
15.3 安裝Time::HiRes
tar zxvf Time-HiRes-1.9707.tar.gz
cd Time-HiRes-1.9707
perl Makefile.PL
make
make test
make install
15.4 安裝File::Tail
tar zxvf File-Tail-0.99.3.tar.gz
cd File-Tail-0.99.3
perl Makefile
make
make test
make install
15.5 安裝rrdtool-1.2.23
tar zxvf rrdtool-1.2.23.tar.gz
cd rrdtool-1.2.23
./configure --prefix=/usr/local/rrdtool
make
make install
15.6 創建必要的符號鏈接(Extman會到這些路徑下找相關的庫文件)
ln -sv /usr/local/rrdtool/lib/perl/5.8.8/i386-linux-thread-multi/auto/RRDs/RRDs.so \
/usr/lib/perl5/5.8.8/i386-linux-thread-multi/
ln -sv /usr/local/rrdtool/lib/perl/5.8.8/RRDp.pm /usr/lib/perl5/5.8.8
ln -sv /usr/local/rrdtool/lib/perl/5.8.8/i386-linux-thread-multi/RRDs.pm \
/usr/lib/perl5/5.8.8
15.7 啓動mailgraph圖形化
##複製mailgraph_ext到/usr/local,並啓動之
cp -r /var/www/extsuite/extman/addon/mailgraph_ext /usr/local
/usr/local/mailgraph_ext/mailgraph-init start
##啓動cmdserver(在後臺顯示系統信息)
/var/www/extsuite/extman/daemon/cmdserver --daemon
15.8 添加到開機啓動
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
到此圖形日誌已經可以實現了,發一些郵件,過幾分鐘查看日誌,到此postfix基本配置完畢了,有時間再嘗試與與maildrop,與反病毒垃圾軟件結合實現過濾功能。
後記:理解了郵件收發的整個過程後配置這個郵件系統並不困難,尤其是那幅流程圖要深入瞭解,出現問題後再結合日誌基本能確定問題所在,由於整個的軟件很多,所以配置時要萬般小心,有時候一個空格可能導致不能正常運行,要按着流程慢慢來,細心點配置成功難度不是很高,另外再次鄭重說明請把你的SElinux關了,最後感謝馬老師。
本文出自 “Free Linux,Share Linux” 博客,請務必保留此出處http://laoguang.blog.51cto.com/6013350/1050936