基於postfix一步一步構建Mailserver,支持虛擬用戶,支持WebMail

我們來一步一步來構建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 安裝開發庫

  1. yum -y groupinstall "Development Libraries" "Development Tools" \

  2. "Legacy Software Development"  "X Software Development"

0.2 安裝post編譯需要的一些庫(rpm安裝即可)

  1. yum -y install tcl tcl-devel libart_lgpl libart_lgpl-devel libtool-ltdl \

  2. libtool-ltdl-devel expect

0.3 如果安裝sendmail請關閉它,並禁止開機啓動,否則會衝突的

  1. service sendmail stop

  2. 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.

  1. rpm -e bind bind-libs bind-utils

  2. yum -y install bind97 bind97-libs bind-utils

1.2 配置bind配置文件 /etc/named.conf(由於不是本文的重點所以簡單寫一下過程)

  1. mv /etvc/named.conf /etc/named.conf.bak

  2. vim /etc/named.conf  ##內容如下

  3. options {

  4.        directory "/var/named";

  5. };

  6. zone "." IN {

  7.        type hint;

  8.        file "named.ca";

  9. };

  10. zone "laoguang.me" IN {

  11.        type master;

  12.        file "laoguang.me.zone";

  13. };

  14. zone "1.16.172.in-addr.arpa" IN {

  15.        type master;

  16.        file "172.16.1.zone";

  17. };

1.3 建立區域文件 /var/named/laoguang.me  /var/named/172.16.1.zone  

  1. vim /var/named/laoguang.me  

  2. $TTL 86400

  3. @                       IN      SOA     ns      admin (

  4.                                                10

  5.                                                2H

  6.                                                5M

  7.                                                7D

  8.                                                3H )

  9.                        IN      NS      ns

  10.                        IN      MX  10  mail

  11. ns                      IN      A       172.16.1.10

  12. mail                    IN      A       172.16.1.10

  13. vim /var/named/172.16.1.zone

  14. $TTL 86400

  15. @                       IN      SOA     ns      admin (

  16.                                                10

  17.                                                2H

  18.                                                5M

  19.                                                7D

  20.                                                3H )

  21.                        IN      NS      ns

  22. ns                      IN      A       172.16.1.10

  23. 10                      IN      PTR     ns.laoguang.me.

  24. 10                      IN      PTR     mail.laoguang.me.

  25. chown :named /etc/named.conf /var/named/laoguang.me.zone /var/named/172.16.1.zone

1.4 啓動named 並驗證是否能正確解析,並更改本機dns記錄

  1. service named start

  2. dig -t MX laoguang.me @127.0.0.1 ##如果能看到A記錄代表成功了

  3. vim /etc/resolv.conf

  4. nameserver:172.16.1.10

二.安裝配置Mysql 
2.1 下載mysql 
  1. wget http://cdn.mysql.com/Downloads/MySQL-5.5/mysql-5.5.28-linux2.6-i686.tar.gz

2.2 解壓mysql

  1. tar xvf mysql-5.5.28-linux2.6-i686.tar.gz -C /usr/local/

2.3 製作軟連接

  1. cd /usr/local ;

  2. ln -sv mysql-5.5.28-linux2.6-i686 mysql

2.4 爲mysql準備運行用戶與數據目錄

  1. groupadd –r mysql

  2. useradd -g mysql -r -s /sbin/nologin -M -d /mydata/data mysql

  3. mkdir -pv /data/mysql

  4. chown mysql:mysql /data/mysql

2.5 初始化mysql

  1. cd /usr/local/mysql

  2. chown -R root:mysql .

  3. ./scripts/mysql_install_db --datadir=/data/mysql --user=mysql

  4. ls /data/mysql  查看是否生成了系統數據庫

  5. cp support-files/my-huge.cnf /etc/my.cnf   ##提供配置文件

  6. ##修改配置文件/etc/my.cnf添加一行

  7. datadir = /data/mysql

  8. cp support-files/mysql.server /etc/init.d/mysqld  ##提供mysql腳本

  9. ##添加開機啓動

  10. chkconfig –add mysqld

  11. chkconfig mysqld on

  12. ##啓動mysqld

  13. service mysqld restart

2.6 把mysql的命令添加到path中,並更新man記錄

  1. echo "export PATH=$PATH:/usr/local/mysql/bin" > /etc/profile.d/mysql.sh

  2. vim /etc/man.config  ##文件MANPATH區位置添加如下

  3. MANPATH /usr/local/mysql/man

2.7 把mysql庫文件頭文件導入到系統

  1. echo "/usr/local/mysql/lib"  > /etc/ld.so.conf.d/mysql.conf

  2. ln -sv /usr/local/mysql/include /usr/include/mysql

  3. ldconfig -v  ##重新加載庫文件到緩存

 到此mysql整理完畢了!!

三.編譯安裝配置postfix

3.1爲postfix準備用戶用戶組,併爲其MDA準備用戶與組

  1. groupadd -g 2525 postfix  

  2. useradd -g postfix -u 2525 -s /sbin/nologin -M postfix  

  3. groupadd -g 2526 postdrop  

  4. useradd -g postdrop -u 2526 -s /sbin/nologin -M postdrop

3.2讓postfix支持sasl與ssl需要cyrus 與openssl支持,查看是否安裝了

  1. rpm -qa | grep sasl

  2. 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

  1. wget ftp://ftp.porcupine.org/mirrors/postfix-release/official/postfix-2.9.4.tar.gz

  2. tar xvf postfix-2.9.4.tar.gz

  3. cd postfix-2.9.4

  4. make makefiles 'CCARGS=-DHAS_MYSQL -I/usr/local/mysql/include -DUSE_SASL_AUTH \

  5. -DUSE_CYRUS_SASL -I/usr/include/sasl  -DUSE_TLS' 'AUXLIBS=-L/usr/local/mysql/lib \

  6. -lmysqlclient -lz -lm -L/usr/lib/sasl2 -lsasl2  -lssl -lcrypto'

  7. ##前半段指定頭文件所在路徑 後半段指定庫文件所在路徑##

  8. make && make install  

  9. ##把第二個選項[postfix的臨時目錄]改爲如下所示,其它的都默認,回車完畢

  10. tempdir: [/root/postfix-2.9.1] /tmp/postfix  

  11. ##安裝完畢後運行,根據提示運行  

  12. newaliases

3.4 修改配置文件/etc/postfix/main.cf

  1. mv /etc/postfix/main.cf /etc/postfix/main.cf.org

  2. # vim /etc/postfix/main.cf  

  3. ##修改以下幾項爲您需要的配置  

  4. myhostname = mail.laoguang.me   ##主機名  

  5. mydomain = laoguang.me   ##域名  

  6. myorigin = $mydomain       ##如果用戶發郵件沒有指定@域名,postfix發送時自動給補上  

  7. inet_interfaces = localhost,$myhostname   ##postfix監聽的端口  

  8. mydestination = $myhostname, localhost, $mydomain ##這個指的是postfix負責接收的區域  

  9. 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,並測試

  1. postfix start    ##啓動postfix查看是否報錯,相應的關閉則爲stop

  2. netstat -tlnp | grep 25  ##查看是否監聽了25端口

  3. tcp     0      0 172.16.1.10:25         0.0.0.0:*         LISTEN     15086/master        

  4. tcp     0      0 127.0.0.1:25           0.0.0.0:*         LISTEN     15086/master  

##這塊我得囉嗦一下,sendmail把所有功能集合到一個程序中,導致其很複雜,並且不夠安全,postfix作者採用模塊化的設計思路,把各個功能剝離開來,形成一個個模塊化程序,通過一個叫master的程序負責調用控制它們,所以比sendmail更安全,並且穩定。

添加一個用戶測試:

  1. useradd redhat

  2. echo "admin" | passwd --stdin redhat

發信給redhat查看是否能收到,爲了驗證前面說的理論,我們用telnet來發送郵件

  1. telnet 172.16.1.10 25

  2. Trying 172.16.1.10...  

  3. Connected to mail.laoguang.me (172.16.1.10).  

  4. Escape character is '^]'.  

  5. 220 mail.laoguang.me ESMTP Postfix  

  6. helo mail.laoguang.me              ##詢問smtpd是否在線  

  7. 250 mail.laoguang.me              ##對方給了相應  

  8. mail from:root                    ##告訴smtpd誰發來的信  

  9. 250 2.1.0 Ok                      ##smtpd給了回覆  

  10. rcpt to:redhat              ##告訴smtpd郵件是發給誰的,不加@主機名,smtpd會自動給補加$myorigin  

  11. 250 2.1.5 Ok                      ##給了響應  

  12. data                              ##告訴smtpd下面是內容  

  13. 354 End data with <CR><LF>.<CR><LF> ##服務器提示以 "." 結束內容  

  14. Subject hello linux                 ##指定郵件主題,可以省略  

  15. hello linux ,hell GNU               ##隨意寫的內容  

  16. .                                   ##結束  

  17. 250 2.0.0 Ok: queued as E28CA167E3B  ##smtpd提示發送序列號

su到redhat查看郵件是否收到了

  1. su – redhat

  2. [redhat@mail ~]$ mail  

  3. Mail version 8.1 6/6/93.  Type ? for help.  

  4. "/var/spool/mail/redhat": 1 message 1 new  

  5. >N  1 [email protected]  Tue Nov  6 06:09  14/498  

  6. &  

從中看到郵件redhat收到了,但是你不覺得這個很恐怖嗎,因爲每個連上主機的人都可以冒名的發郵件,這個可不得了,所以認證是非常必要的了,這到後面再說。

3.6 如果一切正常,那麼讓postfix開機啓動,可以找個腳本,也可以直接 把命令寫到/etc/rc.d/rc.local  ,腳本由於太佔版面了,所以還是採用第二種吧,其實第一種效果更不錯,還能實現服務重啓,如果有需要,就去網上找吧,或者把rpm安裝後生成的腳本複製過來即可使用。

  1. echo "/usr/sbin/postfix start " >> /etc/rc.d/rc.local

四.爲postfix提供別名支持

4.1 vim /etc/postfix/main.cf

##取消alias_maps的註釋

  1. alias_maps = hash:/etc/aliases

##再添加一個賬戶,測試別名機制是否有效

  1. useradd hadoop

  2. echo "admin" | passwd --stdin hadoop

##修改/etc/aliases 最後添加

redhat:         hadoop   ##第一個字段爲初始目標,第二個地址爲最終地址

newaliase ##將剛修改的文件編成hash編碼,也可以運行postaliase hash:/etc/aliases

##發信給redhat查看日誌是否轉發,並su到hadoop用戶查看是否收到郵件

  1. echo "hi,redhat" | mail -s "redhat"  redhat

  2. tail /var/log/maillog  ##查看是否轉發

  3. su – hadoop  

  4. 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 (這個名字可以自己起)

  1. [email protected]  REJECT

  2. microsoft.com   REJECT

5.2 編碼成hash編碼

  1. postmap hash:/etc/postfix/sender.deny

5.3 更改主配置文件,根據此文件限制

在主配置文件中查找smtpd_sender_restrictions如果沒有就找合適文件添加

  1. smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/sender.deny

5.4 測試設置是否生效

  1. [root@mail ~]# telnet 172.16.1.10 25  

  2. Trying 172.16.1.10...  

  3. Connected to mail.laoguang.me (172.16.1.10).  

  4. Escape character is '^]'.  

  5. 220 mail.laoguang.me ESMTP Postfix  

  6. helo mail.laoguang.me  

  7. 250 mail.laoguang.me  

  8. mail from:[email protected]  

  9. 250 2.1.0 Ok  

  10. rcpt to:[email protected]  

  11. 554 5.7.1 <oracle@163.com>: Sender address rejected: Access denied

由此可知已經生效了.

六.安裝dovecot用測試收信發信

6.1 安裝dovecot

爲了簡便咱們yum安裝吧

  1. yum -y install dovecot

6.2 編輯dovecot配置文件 /etc/dovecont.conf

  1. protocols = imap pop3    ##取消這個註釋,啓用對imap pop3的監聽

6.3 啓動dovecot

  1. service dovecot start

6.4 驗證pop3收信

6.4.1通過telnet驗證

  1. telnet 172.16.1.10 110

  2. Trying 172.16.1.10...

  3. Connected to mail.laoguang.me (172.16.1.10).

  4. Escape character is '^]'.

  5. +OK Dovecot ready.

  6. USER redhat

  7. +OK

  8. PASS admin

  9. +OK Logged in.

  10. LIST

  11. +OK 1 messages:

  12. 1 387

6.4.2通過OE驗證

新建立賬戶

141425599.jpg141425486.jpg141425903.jpg

下一步直到完成。

下面給自己發一封郵件測試能否收到:

141426809.jpg

接受郵件查看是否收到了   ##由於上面設置別名的時候把發往redhat的信全部轉發給了Hadoop,通過日誌查看到的,所以取消別名重新測試。##如果收不到請確認你的dns指向你剛纔建立的dns服務器地址,這就是我們建立dns服務器的作用。

142102947.jpg

由此可知,一切正常。

七.爲postfix開啓Cyrus-sasl認證功能

7.1 查看postfix是否支持sasl認證

  1. postconf -a   ##如果顯示以下代表支持cyrus

  2. cyrus  

  3. dovecot  

7.2 修改/etc/postfix/main.cf,修改mynetworks,並在配置文件中加入sasl的支持

  1. mynetworks = 127.0.0.0/8    

  2. ######################CYRUS-SASL############################

  3. broken_sasl_auth_clients = yes

  4. ######下面這個代表給mynetworks與通過sasl認證的用戶中繼。其它的拒絕

  5. smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,

  6.  reject_invalid_hostname,reject_non_fqdn_hostname,reject_unknown_sender_domain,

  7.  reject_non_fqdn_sender,reject_non_fqdn_recipient,reject_unknown_recipient_domain,

  8.  reject_unauth_pipelining,reject_unauth_destination

  9. smtpd_sasl_auth_enable = yes       ##啓用sasl

  10. smtpd_sasl_local_domain = $myhostname  

  11. smtpd_sasl_security_options = noanonymous  ##不允許匿名

  12. ######################CYRUS-END##########################

7.3 修改/etc/sysconfig/saslauthd驗證方法

  1. MECH=shadow      ##基於pam驗證配置比較複雜,我們以shadow爲例

7.4 建立/usr/lib/sasl2/smtpd.conf  添加以下內容

  1. pwcheck_method: saslauthd  ##用sasl認證程序檢查密碼

  2. mech_list: PLAIN LOGIN  

7.5 重新加載postfix,啓動cyrus-sasl

  1. postfix reload

  2. service saslauthd start

7.6檢測認證修改是否成功

7.6.1  命令測試 ##這個只能保證cyrus-sasl可以正常驗證了,不能保證與postfix結合正確

  1. testsaslauthd -u redhat -p admin  

  2. 0: OK "Success."

7.6.2 telnet測試cyrus-sasl是否與postfix結合正確

  1. [root@mail ~]# telnet 172.16.1.10 25

  2. Trying 172.16.1.10...

  3. Connected to mail.laoguang.me (172.16.1.10).

  4. Escape character is '^]'.

  5. 220 mail.laoguang.me ESMTP Postfix

  6. auth login                          ##手動輸入,意思是我要驗證    

  7. 334 VXNlcm5hbWU6          ##對方的響應,不過是base64編碼的

  8. cmVkaGF0             ##這個是賬號redhat通過base64編碼的 echo -n "redhat" | openssl base64

  9. 334 UGFzc3dvcmQ6            ##同樣還是響應

  10. YWRtaW4=                        ##密碼 base64編碼的見樓上

  11. 235 2.7.0 Authentication successful   ##這個代表我們驗證通過了

  12. ##下面測試通過認證後能否中繼郵件

  13. mail from:[email protected]

  14. 250 2.1.0 Ok

  15. rcpt to:[email protected]

  16. 250 2.1.5 Ok

  17. data

  18. 354 End data with <CR><LF>.<CR><LF>

  19. .

  20. 250 2.0.0 Ok: queued as D07A1167EBC  

  21. 由此看見服務器是給中繼的。

  22. ##下面測試不通過認證能否中繼

  23. telnet 172.16.1.10 25

  24. Trying 172.16.1.10...

  25. Connected to mail.laoguang.me (172.16.1.10).

  26. Escape character is '^]'.

  27. 220 mail.laoguang.me ESMTP Postfix

  28. mail from:[email protected]

  29. 250 2.1.0 Ok

  30. rcpt to:[email protected]

  31. 554 5.7.1 <jerry@qq.com>: Relay access denied

  32. ##提示不允許中繼,看來設置都是正確的。

八,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

  1. protocols = imaps pop3s

  2. ssl_cert_file = /etc/dovecot/dovecot.cert

  3. ssl_key_file = /etc/dovecot/dovecot.key

8.3 重啓dovecot 查看監聽端口

  1. service dovecot restart

  2. netstat –tnlp | grep dovecot ##查看監聽的是否爲995與993

8.4 更改oe測試

直接收發信提示連接服務器失敗,因爲我們關閉了pop3與imap,下面設置OE爲pop3s

221738428.jpg

再收發郵件測試,一切OK,你可以開個抓包工具測試是否能抓到有用的數據。

九.安裝Courier authentication library

由於sasl直接調用mysql驗證實現起來非常困難,而調用Courier authlib庫,讓它去調用mysql實現起來很是easy

9.1 下載Courier authlib ,解壓

  1. wget http://ncu.dl.sourceforge.net/project/courier/authlib/0.64.0/courier-authlib-0.64.0.tar.bz2

  2. tar xvf courier-authlib-0.64.0.tar.bz2

  3. cd courier-authlib-0.64.0


9.2 編譯安裝Couier-autlib

  1. ./configure \

  2. --prefix=/usr/local/courier-authlib \

  3. --sysconfdir=/etc \

  4.    --without-authpam \

  5.    --without-authshadow \

  6.    --without-authvchkpw \

  7.    --without-authpgsql \

  8.    --with-authmysql \

  9. --with-mysql-libs=/usr/local/mysql/lib \

  10. --with-mysql-includes=/usr/local/mysql/include \

  11.    --with-redhat \

  12. --with-authmysqlrc=/etc/authmysqlrc \

  13. --with-authdaemonrc=/etc/authdaemonrc \

  14. --with-mailuser=postfix \

  15. --with-mailgroup=postfix \

  16. --with-ltdl-lib=/usr/lib \

  17. --with-ltdl-include=/usr/include

#####如果報如此錯 --with-authmyql specified bu no mysqlclient.so 先把mysql的rpm卸載掉  rpm -e -nodeps msyql  ,courier-authlib安裝完畢後在把mysql安裝上去##切記Courier-authlib安裝成功夠把msyql再安裝回去,配置文件保留原來的,記得備份

  1. make && make install  

9.3 提供配置文件,把生成的實例配置文件改名爲配置文件

  1. cp /etc/authdaemonrc.dist /etc/authdaemonrc    

  2. cp /etc/authmysqlrc.dist /etc/authmysqlrc

  3. ##修改配置文件/etc/authdaemonrc

  4. authmodulelist="authmysql"

  5. authmodulelistorig="authmysql"

  6. daemons=5   ##修改爲合適值

  7. ##修改配置文件/etc/authmysqlrc下面內容  

  8. MYSQL_SERVER localhost

  9. MYSQL_PORT 3306              ##指定你的mysql監聽的端口,這裏使用默認的3306

  10. MYSQL_USERNAME  extmail      ##這時爲後文要用的數據庫的所有者的用戶名

  11. MYSQL_PASSWORD extmail       ##數據庫密碼

  12. MYSQL_SOCKET  /tmp/mysql.sock   ##mysql的套接字,我安裝的mysql是/tmp/mysql.sock

  13. MYSQL_DATABASE  extmail         ##數據庫的名字

  14. MYSQL_USER_TABLE  mailbox       ##記錄用戶信息的表名

  15. MYSQL_CRYPT_PWFIELD  password   ##知道指定用戶密碼的列是psssword列

  16. MYSQL_UID_FIELD  '2525'         ##填寫postfix的uid  

  17. MYSQL_GID_FIELD  '2525'

  18. MYSQL_LOGIN_FIELD  username     ##用戶名在表中的列名

  19. MYSQL_HOME_FIELD  concat('/var/mailbox/',homedir)  ##虛擬用戶家目錄列名

  20. MYSQL_NAME_FIELD  name

  21. MYSQL_MAILDIR_FIELD  concat('/var/mailbox/',maildir) ##虛擬用戶郵箱所在列名

  22. ##一些賬號密碼等一定與後面建立時的一致,由於建立這些表比較複雜,我們選澤了extmail提供的模板

  23. ## 將來初始化extmail時生成表名,賬號密碼都與上面填寫相同。

  24. 建立/var/mailbox並更改屬主數組爲postfix  

  25. mkdir /var/mailbox

  26. chown postfix:postfix

9.4 提供腳本

  1. cp courier-authlib.sysvinit /etc/init.d/authlibd

  2. chmod +x /etc/init.d/authlibd

  3. chkconfig --add authlibd

  4. chkconfig authlibd on

9.5 啓動authlib

  1. service authlibd start  

authlib安裝完畢

十.整合sasl與courier-authlib,以讓postfix調用

10.1 編輯 /usr/lib/sasl2/smtpd.conf ,更改爲如下內容

  1. pwcheck_method: authdaemond  ##更改sasl驗證方式,由authdaemon來驗證,而下面的authdaemon套接字指向的就是authlib

  2. log_level: 3                                ##日誌級別,用於排錯

  3. mech_list:PLAIN LOGIN

  4. authdaemond_path:/usr/local/courier-authlib/var/spool/authdaemon/socket  ##套接字所在路徑

十一.讓postfix支持虛擬用戶與虛擬域

11.1 編輯/etc/postfix/main.cf 添加內容如

  1. ########################Virtual Mailbox Settings########################

  2. virtual_mailbox_base = /var/mailbox                                      ##mailbox所在目錄

  3. virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf    ##虛擬郵箱映射,這些文件extmail中有模板

  4. virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf   ##虛擬域映射

  5. virtual_alias_domains =

  6. virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf        ##別名映射

  7. virtual_uid_maps = static:2525

  8. virtual_gid_maps = static:2525

  9. virtualvirtual_transport = virtual    

  10. ########################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 並用啓用腳本生成數據庫

  1. tar xvf extman-1.1.tar.gz  

  2. tar xvf extman-1.1.tar.gz ;cd docs;

  3. ##由於mysql引擎定義由TYPE改爲Engine所以先更改腳本extmail.sql與init.sql

  4. sed -i 's@TYPE=MyISAM@Engine=MyISAM@g' extmail.sql

  5. sed -i 's@TYPE=MyISAM@Engine=MyISAM@g' init.sql

##查看是否更改成功了

----------生成數據庫---------

##如果沒設置mysql的root密碼

  1. mysql <extmail.sql

  2. mysql <init.sql

###如果你的數據庫root設置密碼了##

  1. mysql -uroot -p  <extmail.sql

  2. mysql -uroot -p <init.sql

##可以去mysql中查看是否生成了extmail數據庫

剛纔postfix主配置文件定義了好幾個映射文件也在此目錄下,拷貝到/etc/postfix下

  1. cp mysql_virtual_* /etc/postfix/     ##此步容易遺忘

11.3 授權生成的數據庫給extmail用戶

  1. mysql> GRANT all privileges on extmail.* TO 'extmail'@'localhost' IDENTIFIED BY 'extmail';

  2. mysql> GRANT all privileges on extmail.* TO 'extmail'@'127.0.0.1' IDENTIFIED BY 'extmail';

  3. mysql>flush privileges;


十二.配置dovecot支持mysql

12.1 修改主配置文件 /etc/dovecot.conf

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

  2. auth default {                     ##查找它

  3. mechanisms = plain

  4. #passdb pam {                  ##註銷pam驗證密碼

  5. #}                                    ##註銷

  6. #userdb passwd { 註銷用戶名在passwd中查詢

  7. #}  

  8.    passdb sql {  ##啓用sql的驗證

  9. args = /etc/dovecot-mysql.conf  ##指定參數文件

  10.    }

  11.    userdb sql {  ##啓用用戶信息的sql驗證

  12. args = /etc/dovecot-mysql.conf  ##指定參數文件

  13.    }

12.2 建立dovecot使用msyql的配置文件

  1. vim /etc/dovecot-mysql.conf ##內容如下

  2. driver = mysql

  3. connect = host=localhost=/tmp/mysql.sockdbname=extmailuser=extmailpassword=extmail

  4. default_pass_scheme = CRYPT

  5. password_query = SELECT username AS user,password AS password FROM mailbox WHERE username = '%u'

  6. user_query = SELECT maildir, uidnumber AS uid, gidnumber AS gid FROM mailbox WHERE username = '%u'

  7. ##斜體部分請更改爲你mysql套接字的位置


12.3 重啓dovecot

service dovecot restart

十三.安裝extmail提供webmail界面

13.1 在安裝extmail之前請先安裝apache,如果編譯安裝請參考http://laoguang.blog.51cto.com/6013350/1039208,我就以rpm安裝爲例了

  1. yum -y install httpd  

13.2 解壓exmail並拷貝到適當目錄

  1. tar zxvf extmail-1.2.tar.gz

  2. mkdir -pv /var/www/extsuite

  3. mv extmail-1.2 /var/www/extsuite/extmail  

  4. cp /var/www/extsuite/extmail/webmail.cf.default  /var/www/extsuite/extmail/webmail.cf

  5. ##因爲extmail配置文件中設置它的位置在/var/www/extsuite/中,

  6. 我們直接把它放到這個目錄中,省的修改配置文件了

  7. ##拷貝實例配置文件,建立爲配置文件

13.2 修改extmail配置文件 /var/www/exsuite/extmail/webmail.cf一下內容

  1. SYS_USER_LANG = zh_CN                 ##設置字符集中文你懂得

  2. SYS_MAILDIR_BASE = /var/mailbox    ##郵箱目錄

  3. SYS_MYSQL_USER = extmail             ##連接mysql的用戶名

  4. SYS_MYSQL_PASS = extmail             ##連接mysql的密碼

  5. SYS_MYSQL_DB = extmail              ##數據庫名字

  6. SYS_MYSQL_SOCKET = /tmp/mysql.sock   ## msyql的套接字位置

  7. SYS_MYSQL_HOST = localhost          ##mysql的地址

  8. SYS_MYSQL_TABLE = mailbox          ##表名

  9. SYS_MYSQL_ATTR_USERNAME = username   ##驗證時用戶名在msyql中的列名

  10. SYS_MYSQL_ATTR_DOMAIN = domain           ##所在域在msyql中的列名

  11. SYS_MYSQL_ATTR_PASSWD = password       ##密碼在mysql中的列名

  12. SYS_AUTHLIB_SOCKET = /usr/local/courier-authlib/var/spool/authdaemon/socket  

  13.       ##驗證時使用的套接字

13.3 修改apache配置文件/etc/httpd/conf/httpd.conf  如果是編譯的請自己根據自己編譯的編輯配置文件。

  1. vim /etc/httpd/conf/httpd.conf

  2. #DocumentRoot "/var/www/html"  ##註銷中心主機 281行左右

  3. NameVirtualHost *:80         ##啓用虛擬主機 基本在最後了

  4. ###添加以下內容####

  5. <VirtualHost *:80>

  6. ServerName mail.laoguang.me

  7. DocumentRoot /var/www/extsuite/extmail/html/

  8. ScriptAlias /extmail/cgi /var/www/extsuite/extmail/cgi

  9. Alias /extmail /var/www/extsuite/extmail/html

  10. SuexecUserGroup postfix postfix

  11. </VirtualHost>

  12. ##修改 cgi執行文件屬主爲apache運行身份用戶:

  13. chown -R postfix.postfix /var/www/extsuite/extmail/cgi/

  14. ##啓動httpd  

  15. service httpd start

登陸網頁測試,發現缺少一個組件Unix::Syslog,extmail需要依賴它,下面來安裝

13.4 安裝Unix::Syslog

  1. wget http://mirrors.devlib.org/cpan/authors/id/M/MH/MHARNISCH/Unix-Syslog-1.1.tar.gz

  2. ##如果鏈接哪天失效了請去 http://http://search.cpan.org/ 搜索下載

  3. tar xvf Unix-Syslog-1.1.tar.gz  

  4. cd Unix-Syslog-1.1

  5. perl Makefile.PL

  6. make && make install

##再次訪問網頁172.16.1.10發現無碼的世界確實不錯,不過還不能管理註冊管理賬戶

075306550.jpg

十四,安裝extman,支持郵箱管理

14.1 安裝配置extman

前面已經解壓並使用過extman了 直接移過去吧

  1. mv extman-1.1 /var/www/extsuite/extman

  2. cp /var/www/extsuite/extman/webman.cf.default  /var/www/extsuite/extman/webman.cf

  3. ##實例文件拷貝爲配置文件

  4. ##編輯配置文件vi /var/www/extsuite/extman/webman.cf 調整以下參數,其它的符合要求

  5. SYS_MAILDIR_BASE = /var/mailbox    ##郵箱目錄

  6. SYS_CAPTCHA_ON = 0   ##是否使用驗證碼,暫不使用,需要額外組建支持

  7. SYS_DEFAULT_UID = 2525

  8. SYS_DEFAULT_GID = 2525

  9. SYS_MYSQL_USER = extmail           ##數據庫賬號

  10. SYS_MYSQL_PASS = extmail           ##密碼

  11. SYS_MYSQL_SOCKET = /tmp/mysql.sock   ##mysql套接字

14.2 修改extman中cgi的屬組屬主並編輯httpd.conf

  1. chown -R postfix.postfix /var/www/extsuite/extman/cgi/

在apache的主配置文件中Extmail的虛擬主機部分,添加如下兩行:

  1. ScriptAlias /extman/cgi /var/www/extsuite/extman/cgi

  2. Alias /extman /var/www/extsuite/extman/html

根據配置文件創建extman運行時所需的臨時目錄,並修改其相應的權限:

  1. mkdir  -pv  /tmp/extman

  2. chown postfix.postfix  /tmp/extman

14.3 登陸管理首頁發現缺少一個DBD組件,它是perl-DBD-MySQL,安裝它

到此爲止你可以登陸並管理這個webmail了,登陸管理頁面輸入默認管理賬號:[email protected] 密碼:extmail*123*

075830913.jpg

新建一個域,如ibm.com

075945360.jpg

建立完畢後點擊那個鉛筆按鈕,修改可以自由註冊,建立時勾選的不生效。

新建兩個賬戶extmail測試收發郵件.

080232899.jpg080232373.jpg

由此可見webmail收發郵件正常,再來測試OE客戶端收發郵件,因爲他們的驗證流程不一樣,不記得了看最上面的原理圖.

工具--賬戶--添加--郵件--顯示名 linux --pop3 172.16.1.10 smtp 172.16.1.10 --賬戶名  [email protected] 密碼 admin --完成

給自己發送一封郵件測試

080432145.jpg

看來整個過程是都是正確,下面再來完善一下,以爲登陸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

  1. tar zxvf Time-HiRes-1.9707.tar.gz

  2. cd Time-HiRes-1.9707

  3. perl Makefile.PL

  4. make

  5. make test

  6. make install

15.4 安裝File::Tail

  1. tar zxvf File-Tail-0.99.3.tar.gz

  2. cd File-Tail-0.99.3

  3. perl Makefile

  4. make

  5. make test

  6. make install

15.5 安裝rrdtool-1.2.23

  1. tar zxvf rrdtool-1.2.23.tar.gz

  2. cd rrdtool-1.2.23

  3. ./configure --prefix=/usr/local/rrdtool

  4. make

  5. make install

15.6 創建必要的符號鏈接(Extman會到這些路徑下找相關的庫文件)

  1. ln -sv /usr/local/rrdtool/lib/perl/5.8.8/i386-linux-thread-multi/auto/RRDs/RRDs.so  \

  2.  /usr/lib/perl5/5.8.8/i386-linux-thread-multi/

  3. ln -sv /usr/local/rrdtool/lib/perl/5.8.8/RRDp.pm   /usr/lib/perl5/5.8.8

  4. ln -sv /usr/local/rrdtool/lib/perl/5.8.8/i386-linux-thread-multi/RRDs.pm  \

  5.  /usr/lib/perl5/5.8.8

15.7 啓動mailgraph圖形化

  1. ##複製mailgraph_ext到/usr/local,並啓動之

  2. cp -r /var/www/extsuite/extman/addon/mailgraph_ext  /usr/local  

  3. /usr/local/mailgraph_ext/mailgraph-init start  

  4. ##啓動cmdserver(在後臺顯示系統信息)  

  5. /var/www/extsuite/extman/daemon/cmdserver --daemon

15.8 添加到開機啓動

  1. echo “/usr/local/mailgraph_ext/mailgraph-init start” >> /etc/rc.d/rc.local

  2. 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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章