天天看點

電子郵件伺服器-PostFix

特點:

1. postfix是免費的:

2. 更快:

postfix在性能上大約比sendmail快三倍。一部運作postfix的台式PC每天可以收發上百萬封郵件。

3. 相容性好:

postfix是sendmail相容的,進而使sendmail使用者可以很友善地遷移到postfix。Postfix支援/var[/spool]/mail、/etc/aliases、 NIS、和 ~/.forward 檔案。

4. 更健壯:

postfix被設計成在重負荷之下仍然可以正常工作。當系統運作超出了可用的記憶體或磁盤空間時,postfix會自動減少運作程序的數目。當處理的郵件數目增長時,postfix運作的程序不會跟着增加。

5. 更靈活:

postfix是由超過一打的小程式組成的,每個程式完成特定的功能。你可以通過配置檔案設定每個程式的運作參數。

6. 安全性

postfix具有多層防禦結構,可以有效地抵禦惡意入侵者。如大多數的postfix程式可以運作在較低的權限之下,不可以通過網絡通路安全性相關的本地投遞程式等等。

一、安裝前的準備工作:

安裝前說明:郵件服務依賴于DNS服務,請事先确信您的DNS服務已經為郵件應用配置完成。

安裝所需要的rpm包,包括以下安裝包:

httpd,mysql,mysql-server,mysql-devel,openssl-devel,dovecot,perl-DBD-MySQL,tcl,tcl-devel,libart_lgpl,libart_lgpl-devel,libtool-ltdl,libtool-ltdl-devel,expect

關閉sendmail,并将它的随系統自動啟動功能關閉:

#service sendmail stop

#chkconfig sendmail off

安裝以下開發所用到的rpm包組:

Development Libraries

Development Tools

方法:

<code> </code><code>#yum groupinstall "package_group_name"</code>

二、啟動依賴服務:

啟動mysql資料庫,并給mysql的root使用者設定密碼:

#service mysqld start

#chkconfig mysqld on

#mysqladmin -uroot password 'your_password'

啟動saslauthd服務,并将其加入到自動啟動隊列:

#service saslauthd start

#chkconfig saslauthd on

三、安裝配置postfix

<code>  </code><code>#groupadd -g 2525 postfix</code>

<code>  </code><code>#useradd -g postfix -u 2525 -s /sbin/nologin -M postfix</code>

<code>  </code><code>#groupadd -g 2526 postdrop</code>

<code>  </code><code>#useradd -g postdrop -u 2526 -s /sbin/nologin -M postdrop</code>

<code>  </code><code>#tar zxvf postfix-2.9.3.tar.gz</code>

<code>  </code><code>#cd postfix-2.9.3</code>

<code>  </code><code>#make makefiles 'CCARGS=-DHAS_MYSQL -I/usr/include/mysql -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl  -DUSE_TLS ' 'AUXLIBS=-L/usr/lib/mysql -lmysqlclient -lz -lm -L/usr/lib/sasl2 -lsasl2  -lssl -lcrypto'</code>

<code>  </code><code>#make</code>

<code>  </code><code>#make install</code>

<code>  </code><code>#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'</code>

按照以下的提示輸入相關的路徑([]号中的是預設值,”]”後的是輸入值,省略的表示采用預設值)

    install_root: [/] /    

<code>    </code><code>tempdir: [</code><code>/root/postfix-2</code><code>.9.3] </code><code>/tmp/postfix</code>

<code>    </code><code>config_directory: [</code><code>/etc/postfix</code><code>] </code><code>/etc/postfix</code>

<code>    </code><code>daemon_directory: [</code><code>/usr/libexec/postfix</code><code>] </code>

<code>    </code><code>command_directory: [</code><code>/usr/sbin</code><code>] </code>

<code>    </code><code>queue_directory: [</code><code>/var/spool/postfix</code><code>]</code>

<code>    sendmail_path: [</code><code>/usr/sbin/sendmail</code><code>]</code>

<code>    </code><code>newaliases_path: [</code><code>/usr/bin/newaliases</code><code>]</code>

<code>    </code><code>mailq_path: [</code><code>/usr/bin/mailq</code><code>]</code>

<code>    </code><code>mail_owner: [postfix]</code>

<code>    </code><code>setgid_group: [postdrop]   </code>

<code>    </code><code>html_directory: [no]</code><code>/var/www/html/postfix</code> 

<code>    </code><code>manpages: [</code><code>/usr/local/man</code><code>]</code>

<code>     </code><code>readme_directory: [no]</code>

生成别名二進制檔案:

<code>  </code><code>#newliases</code>

2.進行一些基本配置,測試啟動postfix并進行發信

<code>  </code><code>#vim /etc/postfix/main.cf</code>

修改以下幾項為您需要的配置

<code>  </code><code>myhostname = mail.xxx.com</code>

<code>  </code><code>myorigin = xxx.com</code>

<code>  </code><code>mydomain = xxx.com</code>

<code>  </code><code>mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain</code>

<code>  </code><code>mynetworks = 192.168.1.0</code><code>/24</code><code>, 127.0.0.0</code><code>/8</code>

說明:

myorigin參數用來指明發件人所在的域名,即做發件位址僞裝;

mydestination參數指定postfix接收郵件時收件人的域名,即您的postfix系統要接收到哪個域名的郵件;

myhostname參數指定運作postfix郵件系統的主機的主機名,預設情況下,其值被設定為本地機器名;

mydomain參數指定您的域名,預設情況下,postfix将myhostname的第一部分删除而作為mydomain的值;

mynetworks參數指定你所在網絡的網絡位址,postfix系統根據其值來差別使用者是遠端的還是本地的,如果是本地網絡使用者則允許其通路;

inet_interfaces參數指定postfix系統監聽的網絡接口;

注意:

1、在postfix的配置檔案中,參數行和注釋行是不能處在同一行中的;

2、任何一個參數的值都不需要加引号,否則,引号将會被當作參數值的一部分來使用;

3、每修改參數及其值後執行 postfix reload 即可令其生效;但若修改了inet_interfaces,則需重新啟動postfix;

4、如果一個參數的值有多個,可以将它們放在不同的行中,隻需要在其後的每個行前多置一個空格即可;postfix會把第一個字元為空格或tab的文本行視為上一行的延續;

四、為postfix提供SysV服務腳本/etc/rc.d/init.d/postfix,内容如下(#END之前):

<code>#!/bin/bash</code>

<code>#</code>

<code># postfix      Postfix Mail Transfer Agent</code>

<code># chkconfig: 2345 80 30</code>

<code># description: Postfix is a Mail Transport Agent, which is the program \</code>

<code>#              that moves mail from one machine to another.</code>

<code># processname: master</code>

<code># pidfile: /var/spool/postfix/pid/master.pid</code>

<code># config: /etc/postfix/main.cf</code>

<code># config: /etc/postfix/master.cf</code>

<code># Source function library.</code>

<code>. </code><code>/etc/rc</code><code>.d</code><code>/init</code><code>.d</code><code>/functions</code>

<code># Source networking configuration.</code>

<code>. </code><code>/etc/sysconfig/network</code>

<code># Check that networking is up.</code>

<code>[ $NETWORKING = </code><code>"no"</code> <code>] &amp;&amp; </code><code>exit</code> <code>3</code>

<code>[ -x </code><code>/usr/sbin/postfix</code> <code>] || </code><code>exit</code> <code>4</code>

<code>[ -d </code><code>/etc/postfix</code> <code>] || </code><code>exit</code> <code>5</code>

<code>[ -d </code><code>/var/spool/postfix</code> <code>] || </code><code>exit</code> <code>6</code>

<code>RETVAL=0</code>

<code>prog=</code><code>"postfix"</code>

<code>start() {</code>

<code># Start daemons.</code>

<code>echo</code> <code>-n $</code><code>"Starting postfix: "</code>

<code>        </code><code>/usr/bin/newaliases</code> <code>&gt;</code><code>/dev/null</code> <code>2&gt;&amp;1</code>

<code>/usr/sbin/postfix</code> <code>start 2&gt;</code><code>/dev/null</code> <code>1&gt;&amp;2 &amp;&amp; success || failure $</code><code>"$prog start"</code>

<code>RETVAL=$?</code>

<code>[ $RETVAL -</code><code>eq</code> <code>0 ] &amp;&amp; </code><code>touch</code> <code>/var/lock/subsys/postfix</code>

<code>        </code><code>echo</code>

<code>return</code> <code>$RETVAL</code>

<code>}</code>

<code>stop() {</code>

<code>  </code><code># Stop daemons.</code>

<code>echo</code> <code>-n $</code><code>"Shutting down postfix: "</code>

<code>/usr/sbin/postfix</code> <code>stop 2&gt;</code><code>/dev/null</code> <code>1&gt;&amp;2 &amp;&amp; success || failure $</code><code>"$prog stop"</code>

<code>[ $RETVAL -</code><code>eq</code> <code>0 ] &amp;&amp; </code><code>rm</code> <code>-f </code><code>/var/lock/subsys/postfix</code>

<code>echo</code>

<code>reload() {</code>

<code>echo</code> <code>-n $</code><code>"Reloading postfix: "</code>

<code>/usr/sbin/postfix</code> <code>reload 2&gt;</code><code>/dev/null</code> <code>1&gt;&amp;2 &amp;&amp; success || failure $</code><code>"$prog reload"</code>

<code>abort() {</code>

<code>/usr/sbin/postfix</code> <code>abort 2&gt;</code><code>/dev/null</code> <code>1&gt;&amp;2 &amp;&amp; success || failure $</code><code>"$prog abort"</code>

<code>return</code> <code>$?</code>

<code>flush() {</code>

<code>/usr/sbin/postfix</code> <code>flush 2&gt;</code><code>/dev/null</code> <code>1&gt;&amp;2 &amp;&amp; success || failure $</code><code>"$prog flush"</code>

<code>check() {</code>

<code>/usr/sbin/postfix</code> <code>check 2&gt;</code><code>/dev/null</code> <code>1&gt;&amp;2 &amp;&amp; success || failure $</code><code>"$prog check"</code>

<code>restart() {</code>

<code>stop</code>

<code>start</code>

<code># See how we were called.</code>

<code>case</code> <code>"$1"</code> <code>in</code>

<code>  </code><code>start)</code>

<code>;;</code>

<code>  </code><code>stop)</code>

<code>  </code><code>restart)</code>

<code>  </code><code>reload)</code>

<code>reload</code>

<code>  </code><code>abort)</code>

<code>abort</code>

<code>  </code><code>flush)</code>

<code>flush</code>

<code>  </code><code>check)</code>

<code>check</code>

<code>  </code><code>status)</code>

<code>  </code><code>status master</code>

<code>  </code><code>condrestart)</code>

<code>[ -f </code><code>/var/lock/subsys/postfix</code> <code>] &amp;&amp; restart || :</code>

<code>  </code><code>*)</code>

<code>echo</code> <code>$</code><code>"Usage: $0 {start|stop|restart|reload|abort|flush|check|status|condrestart}"</code>

<code>exit</code> <code>1</code>

<code>esac</code>

<code>exit</code> <code>$?</code>

<code># END</code>

為此腳本賦予執行權限:

<code>#chmod +x /etc/rc.d/init.d/postfix</code>

将postfix服務添加至服務清單:

<code>#chkconfig --add postfix</code>

設定其開機自動啟動:

<code>#chkconfig postfix on</code>

使用此腳本重新啟動服務,以測試其能否正常執行:

<code>#service postfix restart</code>

此時可使用本地使用者測試郵件收發了。

五、為postfix服務開啟使用者别名支援:

1.在配置檔案開啟基于hash别名檔案支援

  在main.cf中,找到如下指令,而後啟用它(即移除前面的#号)

<code>  </code><code>#alias_maps=hash:/etc/aliases</code>

2.在/etc/aliases檔案中定義新的别名項,其格式通常為冒号隔開的兩個字段,前一個字段為初始目标郵件位址,後一個字段為實際發往的位址,如:

redhat        xxx

[email protected]     [email protected]

3.将/etc/aliases轉換為hash格式:

<code>#postalias    /etc/aliases</code>

4.讓postfix重新載入配置檔案,即可進行測試;

六、實作postfix基于用戶端的通路控制

基于用戶端的網文控制概覽

<code> </code><code>smtpd_client_restrictions</code>

<code> </code><code>smtpd_data_restrictions</code>

<code> </code><code>smtpd_helo_restrictions</code>

<code> </code><code>smtpd_recipient_restrictions</code>

<code> </code><code>smtpd_sender_restrictions</code>

上面的每一項參數分别用于檢查SMTP會話過程中的特定階段,即用戶端提供相應資訊的階段,如當用戶端發起連接配接請求時,postfix就可以根據配置檔案中定義的smtpd_client_restrictions參數來判别此用戶端IP的通路權限。相應地,smtpd_helo_restrictions則用于根據使用者的helo資訊判别用戶端的通路能力等等。

如果DATA指令之前的所有内容都被接受,用戶端接着就可以開始傳送郵件内容了。郵件内容通常由兩部分組成,前半部分是标題(header),其可以由header_check過濾,後半部分是郵件正文(body),其可以由check_body過濾。這兩項實作的是郵件“内容檢查”。

 postfix的預設配置如下:

<code> </code><code>smtpd_client_restrictions =</code>

<code> </code><code>smtpd_data_restrictions =</code>

<code> </code><code>smtpd_end_of_data_restrictions =</code>

<code> </code><code>smtpd_etrn_restrictions =</code>

<code> </code><code>smtpd_helo_restrictions =</code>

<code> </code><code>smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination</code>

<code> </code><code>smtpd_sender_restrictions =</code>

這限制了隻有mynetworks參數中定義的本地網絡中的用戶端才能通過postfix轉發郵件,其他用戶端則不被允許,進而關閉了開放式中繼(open relay)的功能。

Postfix有多個内置的限制條件,如上面的permit_mynetworks和reject_unauth_destination,但管理者也可以使用通路表(access map)來自定義限制條件。自定義通路表的條件通常使用check_client_access, check_helo_access, check_sender_access, check_recipient_access進行,它們後面通常跟上type:mapname格式的通路表類型和名稱。其中,check_sender_access和check_recipient_access用來檢查用戶端提供的郵件位址,是以,其通路表中可以使用完整的郵件位址,如[email protected];也可以隻使用域名,如magedu.com;還可以隻有使用者名的部分,如marion@。

2.實作示例1

這裡以禁止172.16.100.200這台主機通過工作在172.16.100.1上的postfix服務發送郵件為例示範說明其實作過程。通路表使用hash的格式。

(1)首先,編輯/etc/postfix/access檔案,以作為用戶端檢查的控制檔案,在裡面定義如下一行:

<code>    </code><code>172.16.100.20    REJECT</code>

(2)将此檔案轉換為hash格式

<code>    </code><code>#postmap /etc/postfix/access</code>

(3)配置postfix使用此檔案對用戶端進行檢查

    編輯/etc/postfix/main.cf檔案,添加如下參數:

<code>    </code><code>smtpd_client_restrictions = check_client_access </code><code>hash</code><code>:</code><code>/etc/postfix/access</code>

(4)讓postfix重新載入配置檔案即可進行發信控制的效果測試了。

3.實作執行個體2

這裡以禁止通過本伺服器向microsoft.com域發送郵件為例示範其實作過程。通路表使用hash格式。

(1)首先,建立/etc/postfix/denydstdomains檔案(檔案名任取),在裡面定義如下一行:

<code>    </code><code>microsoft.com    REJECT</code>

    #postmap /etc/postfix/denydstdomains

    編輯/etc/postfix/main.cf檔案對用戶端進行檢查

<code> </code><code>smtpd_recipient_restrictions = check_recipient_access</code>

<code>hash</code><code>:</code><code>/etc/postfix/denydstdomains</code><code>, permit_mynetworks, reject_unauth_destination</code>

(4)讓postfix重新載入配置檔案即可進行發信控制的效果。

4.檢查表格式的說明

hash類的檢查表都使用類似如下的格式:

<code>pattern   action</code>

檢查表檔案中,空白行、僅包含空白字元的行和以#開頭的行都會被忽略。以空白字元開頭後跟其它非空白字元的行會被認為是前一行的延續,是一行的組成部分。

(1)關于pattern

其pattern通常有兩類位址:郵件位址和主機名稱/位址。

郵件位址的pattern格式如下:

user@domain 用于比對指定郵件位址;

domain.tld 用于比對以此域名作為郵件位址中的域名部分的所有郵件位址;

user@       用于比對以此作為郵件位址中的使用者名部分的所有郵件位址;

主機名/位址的pattern格式如下:

domain.tld   用于比對指定域及其子域内的所有主機;

.domain.tld   用于比對指定域的子域内的所有主機;

net.work.addr.ess

net.work.addr

net.work

net        用于比對特定的IP位址或網絡内的所有主機;

network/mask  CIDR格式,比對指定網絡内的所有主機;

(2)關于action

接受類的動作:

OK 接受其pattern比對的郵件位址或主機名稱/位址;

全部由數字組成的action 隐式表示OK;

拒絕類的動作(部分):

4NN text 

5NN text 

    其中4NN類表示過一會兒重試;5NN類表示嚴重錯誤,将停止重試郵件發送;421和521對于postfix來說有特殊意義,盡量不要自定義這兩個代碼;

REJECT optional text...   拒絕;text為可選資訊;

DEFER optional text...    拒絕;text為可選資訊; 

七、為postfix開啟基于cyrus-sasl的認證功能

使用以下指令驗證postfix是否支援cyrus風格的sasl認證,如果您的輸出為以下結果,則是支援的;

<code># /usr/local/postfix/sbin/postconf  -a</code>

<code>cyrus</code>

<code>dovecot</code>

<code>#vim /etc/postfix/main.cf</code>

<code>添加以下内容:</code>

<code>############################CYRUS-SASL############################</code>

<code>broken_sasl_auth_clients = </code><code>yes</code>

<code>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</code>

<code>smtpd_sasl_auth_enable = </code><code>yes</code>

<code>smtpd_sasl_local_domain = $myhostname</code>

<code>smtpd_sasl_security_options = noanonymous</code>

<code>smtpd_sasl_application_name = smtpd</code>

<code>smtpd_banner = Welcome to our $myhostname ESMTP,Warning: Version not Available!</code>

<code># vim /usr/lib/sasl2/smtpd.conf</code>

<code>添加如下内容:</code>

<code>pwcheck_method: saslauthd</code>

<code>mech_list: PLAIN LOGIN</code>

<code>讓postfix重新加載配置檔案</code>

<code>#/usr/sbin/postfix reload</code>

<code># telnet localhost 25</code>

<code>Trying 127.0.0.1...</code>

<code>Connected to localhost.localdomain (127.0.0.1).</code>

<code>Escape character is </code><code>'^]'</code><code>.</code>

<code>220 Welcome to our mail.xxx.com ESMTP,Warning: Version not Available!</code>

<code>ehlo mail.xxx.com</code>

<code>250-mail.xxx.com</code>

<code>250-PIPELINING</code>

<code>250-SIZE 10240000</code>

<code>250-VRFY</code>

<code>250-ETRN</code>

<code>250-AUTH PLAIN LOGIN</code>

<code>250-AUTH=PLAIN LOGIN               (請確定您的輸出以類似兩行)</code>

<code>250-ENHANCEDSTATUSCODES</code>

<code>250-8BITMIME</code>

<code>250 DSN</code>

八、安裝Courier authentication library

1.courier簡介

courier-authlib是Courier元件中的認證庫,它是courier元件中一個獨立的子項目,用于為Courier的其它元件提供認證服務。其認證功能通常包括驗正登入時的帳号和密碼、擷取一個帳号相關的家目錄或郵件目錄等資訊、改變帳号的密碼等。而其認證的實作方式也包括基于PAM通過/etc/passwd和/etc/shadow進行認證,基于GDBM或DB進行認證,基于LDAP/MySQL/PostgreSQL進行認證等。是以,courier-authlib也常用來與courier之外的其它郵件元件(如postfix)整合為其提供認證服務。

2.安裝

<code>#tar jxvf courier-authlib-0.62.4.tar.bz2</code>

<code>#cd courier-authlib-0.62.4</code>

<code>#./configure \</code>

<code>    </code><code>--prefix=</code><code>/usr/local/courier-authlib</code> <code>\</code>

<code>    </code><code>--sysconfdir=</code><code>/etc</code> <code>\</code>

<code>    </code><code>--without-authpam \</code>

<code>    </code><code>--without-authshadow \</code>

<code>    </code><code>--without-authvchkpw \</code>

<code>    </code><code>--without-authpgsql \</code>

<code>    </code><code>--with-authmysql \</code>

<code>    </code><code>--with-mysql-libs=</code><code>/usr/lib/mysql</code> <code>\</code>

<code>    </code><code>--with-mysql-includes=</code><code>/usr/include/mysql</code> <code>\</code>

<code>    </code><code>--with-redhat \</code>

<code>    </code><code>--with-authmysqlrc=</code><code>/etc/authmysqlrc</code> <code>\</code>

<code>    </code><code>--with-authdaemonrc=</code><code>/etc/authdaemonrc</code> <code>\</code>

<code>    </code><code>--with-mailuser=postfix \</code>

<code>    </code><code>--with-mailgroup=postfix \</code>

<code>    </code><code>--with-ltdl-lib=</code><code>/usr/lib</code> <code>\</code>

<code>    </code><code>--with-ltdl-include=</code><code>/usr/include</code>

<code># make</code>

<code># make install</code>

<code># chmod 755 /usr/local/courier-authlib/var/spool/authdaemon</code>

<code># cp /etc/authdaemonrc.dist  /etc/authdaemonrc</code>

<code># cp /etc/authmysqlrc.dist  /etc/authmysqlrc</code>

修改/etc/authdaemonrc 檔案

<code>authmodulelist=</code><code>"authmysql"</code>

<code>authmodulelistorig=</code><code>"authmysql"</code>

<code>daemons=10</code>

3.配置其通過mysql進行郵件賬号認證

編輯/etc/authmysqlrc 為以下内容,其中2525,2525 為postfix 使用者的UID和GID。

<code>MYSQL_SERVER localhost</code>

<code>MYSQL_PORT 3306                   (指定你的mysql監聽的端口,這裡使用預設的3306)</code>

<code>MYSQL_USERNAME  extmail      (這時為後文要用的資料庫的所有者的使用者名)</code>

<code>MYSQL_PASSWORD extmail        (密碼)</code>

<code>MYSQL_SOCKET  </code><code>/var/lib/mysql/mysql</code><code>.sock</code>

<code>MYSQL_DATABASE  extmail</code>

<code>MYSQL_USER_TABLE  mailbox</code>

<code>MYSQL_CRYPT_PWFIELD  password</code>

<code>MYSQL_UID_FIELD  </code><code>'2525'</code>

<code>MYSQL_GID_FIELD  </code><code>'2525'</code>

<code>MYSQL_LOGIN_FIELD  username</code>

<code>MYSQL_HOME_FIELD  concat(</code><code>'/var/mailbox/'</code><code>,homedir)</code>

<code>MYSQL_NAME_FIELD  name</code>

<code>MYSQL_MAILDIR_FIELD  concat(</code><code>'/var/mailbox/'</code><code>,maildir)</code>

4.提供SysV服務腳本

<code># cp courier-authlib.sysvinit /etc/rc.d/init.d/courier-authlib</code>

<code># chmod 755 /etc/init.d/courier-authlib</code>

<code># chkconfig --add courier-authlib</code>

<code># chkconfig --level 2345 courier-authlib on</code>

<code># echo "/usr/local/courier-authlib/lib/courier-authlib" &gt;&gt; /etc/ld.so.conf.d/courier-authlib.conf</code>

<code># ldconfig -v</code>

<code># service courier-authlib start   (啟動服務)</code>

5.配置Postfix和courier-authlib

建立虛拟使用者郵箱所在的目錄,并将其權限賦予postfix使用者:

<code>#mkdir –pv /var/mailbox</code>

<code>#chown –R postfix /var/mailbox</code>

接下來重新配置SMTP 認證,編輯 /usr/lib/sasl2/smtpd.conf ,確定其為以下内容:

pwcheck_method: authdaemond

log_level: 3

mech_list:PLAIN LOGIN

authdaemond_path:/usr/local/courier-authlib/var/spool/authdaemon/socket

九、讓postfix支援虛拟域和虛拟使用者

1.編輯/etc/postfix/main.cf,添加如下内容:

<code>########################Virtual Mailbox Settings########################</code>

<code>virtual_mailbox_base = </code><code>/var/mailbox</code>

<code>virtual_mailbox_maps = mysql:</code><code>/etc/postfix/mysql_virtual_mailbox_maps</code><code>.cf</code>

<code>virtual_mailbox_domains = mysql:</code><code>/etc/postfix/mysql_virtual_domains_maps</code><code>.cf</code>

<code>virtual_alias_domains =</code>

<code>virtual_alias_maps = mysql:</code><code>/etc/postfix/mysql_virtual_alias_maps</code><code>.cf</code>

<code>virtual_uid_maps = static:2525</code>

<code>virtual_gid_maps = static:2525</code>

<code>virtual_transport = virtual</code>

<code>maildrop_destination_recipient_limit = 1</code>

<code>maildrop_destination_concurrency_limit = 1</code>

<code>##########################QUOTA Settings########################</code>

<code>message_size_limit = 14336000</code>

<code>virtual_mailbox_limit = 20971520</code>

<code>virtual_create_maildirsize = </code><code>yes</code>

<code>virtual_mailbox_extended = </code><code>yes</code>

<code>virtual_mailbox_limit_maps = mysql:</code><code>/etc/postfix/mysql_virtual_mailbox_limit_maps</code><code>.cf</code>

<code>virtual_mailbox_limit_override = </code><code>yes</code>

<code>virtual_maildir_limit_message = Sorry, the user's maildir has overdrawn his diskspace </code><code>quota</code><code>, please Tidy your mailbox and try again later.</code>

<code>virtual_overquota_bounce = </code><code>yes</code>

2.使用extman源碼目錄下docs目錄中的extmail.sql和init.sql建立資料庫;

<code># tar zxvf  extman-1.1.tar.gz</code>

<code># cd extman-1.1/docs</code>

<code># mysql -u root -p &lt; extmail.sql</code>

<code># mysql -u root -p &lt;init.sql</code>

<code># cp mysql*  /etc/postfix/</code>

3.授予使用者extmail通路extmail資料庫的權限

<code>mysql&gt; GRANT all privileges on extmail.* TO extmail@localhost IDENTIFIED BY </code><code>'extmail'</code><code>;</code>

<code>mysql&gt; GRANT all privileges on extmail.* TO [email protected] IDENTIFIED BY </code><code>'extmail'</code><code>;</code>

說明:啟用虛拟域以後,需要取消中心域,即注釋掉myhostname, mydestination, mydomain, myorigin幾個指令;當然,你也可以把mydestionation的值改為你自己需要的。

十、配置dovecot

<code># vi /etc/dovecot.conf</code>

<code>mail_location = maildir:</code><code>/var/mailbox/</code><code>%d/%n</code><code>/Maildir</code>

<code>……</code>

<code>auth default {</code>

<code>    </code><code>mechanisms = plain</code>

<code>    </code><code>passdb sql {</code>

<code>        </code><code>args = </code><code>/etc/dovecot-mysql</code><code>.conf</code>

<code>    </code><code>}</code>

<code>    </code><code>userdb sql {</code>

<code>    </code><code>……</code>

<code># vim /etc/dovecot-mysql.conf                 </code>

<code>driver = mysql</code>

<code>connect = host=localhost dbname=extmail user=extmail password=extmail</code>

<code>default_pass_scheme = CRYPT</code>

<code>password_query = SELECT username AS user,password AS password FROM mailbox WHERE username = </code><code>'%u'</code>                            

<code>user_query = SELECT maildir, uidnumber AS uid, gidnumber AS gid FROM mailbox WHERE username = </code><code>'%u'</code>

說明:如果mysql伺服器是本地主機,即host=localhost時,如果mysql.sock檔案不是預設的/var/lib/mysql/mysql.sock,可以使用host=“sock檔案的路徑”來指定新位置;

接下來啟動dovecot服務:

<code># service dovecot start</code>

<code># chkconfig dovecot on</code>

十一、安裝Extmail-1.2

說明:如果extmail的放置路徑做了修改,那麼配置檔案webmail.cf中的/var/www路徑必須修改為你所需要的位置。本文使用了預設的/var/www,是以,以下示例中并沒有包含路徑修改的相關内容。

1、安裝

<code># tar zxvf extmail-1.2.tar.gz</code>

<code># mkdir -pv /var/www/extsuite</code>

<code># mv extmail-1.2 /var/www/extsuite/extmail</code>

<code># cp /var/www/extsuite/extmail/webmail.cf.default  /var/www/extsuite/extmail/webmail.cf</code>

2、修改主配置檔案

<code>#vi /var/www/extsuite/extmail/webmail.cf</code>

部分修改選項的說明:

SYS_MESSAGE_SIZE_LIMIT = 5242880

使用者可以發送的最大郵件

SYS_USER_LANG = en_US

語言選項,可改作:

SYS_USER_LANG = zh_CN

SYS_MAILDIR_BASE = /home/domains

此處即為您在前文所設定的使用者郵件的存放目錄,可改作:

SYS_MAILDIR_BASE = /var/mailbox

SYS_MYSQL_USER = db_user

SYS_MYSQL_PASS = db_pass

以上兩句句用來設定連接配接資料庫伺服器所使用使用者名、密碼和郵件伺服器用到的資料庫,這裡修改為:

SYS_MYSQL_USER = extmail

SYS_MYSQL_PASS = extmail

SYS_MYSQL_HOST = localhost

指明資料庫伺服器主機名,這裡預設即可

SYS_MYSQL_TABLE = mailbox

SYS_MYSQL_ATTR_USERNAME = username

SYS_MYSQL_ATTR_DOMAIN = domain

SYS_MYSQL_ATTR_PASSWD = password

以上用來指定驗正使用者登入裡所用到的表,以及使用者名、域名和使用者密碼分别對應的表中列的名稱;這裡預設即可

SYS_AUTHLIB_SOCKET = /var/spool/authdaemon/socket

此句用來指明authdaemo socket檔案的位置,這裡修改為:

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

3、apache相關配置

由于extmail要進行本地郵件的投遞操作,故必須将運作apache伺服器使用者的身份修改為您的郵件投遞代理的使用者;本例中打開了apache伺服器的suexec功能,故使用以下方法來實作虛拟主機運作身份的指定。此例中的MDA為postfix自帶,是以将指定為postfix使用者:

<code>&lt;VirtualHost *:80&gt;</code>

<code>ServerName mail.magedu.com</code>

<code>DocumentRoot </code><code>/var/www/extsuite/extmail/html/</code>

<code>ScriptAlias </code><code>/extmail/cgi</code> <code>/var/www/extsuite/extmail/cgi</code>

<code>Alias </code><code>/extmail</code> <code>/var/www/extsuite/extmail/html</code>

<code>SuexecUserGroup postfix postfix</code>

<code>&lt;</code><code>/VirtualHost</code><code>&gt;</code>

修改 cgi執行檔案屬主為apache運作身份使用者:

<code># chown -R postfix.postfix /var/www/extsuite/extmail/cgi/</code>

如果您沒有打開apache伺服器的suexec功能,也可以使用以下方法解決:

<code># vim /etc/httpd/httpd.conf</code>

<code>User postfix</code>

<code>Group postfix</code>

4、依賴關系的解決

extmail将會用到perl的Unix::syslogd功能,您可以去http://search.cpan.org搜尋下載下傳原碼包進行安裝。

<code># tar zxvf Unix-Syslog-0.100.tar.gz</code>

<code># cd Unix-Syslog-0.100</code>

<code># perl Makefile.PL</code>

5、啟動apache服務

<code># service httpd start</code>

<code># chkconfig httpd on</code>

十二、安裝Extman-1.1

1、安裝及基本配置

<code># mv extman-1.1 /var/www/extsuite/extman</code>

修改配置檔案以符合本例的需要:

<code># cp /var/www/extsuite/extman/webman.cf.default  /var/www/extsuite/extman/webman.cf</code>

<code># vi /var/www/extsuite/extman/webman.cf</code>

<code>SYS_MAILDIR_BASE = </code><code>/home/domains</code>

<code>此處即為您在前文所設定的使用者郵件的存放目錄,可改作:</code>

<code>SYS_MAILDIR_BASE = </code><code>/var/mailbox</code>

<code>SYS_DEFAULT_UID = 1000</code>

<code>SYS_DEFAULT_GID = 1000</code>

<code>此兩處後面設定的ID号需更改為前而建立的postfix使用者和postfix組的</code><code>id</code><code>号,本文使用的是2525,是以,上述兩項需要修改為:</code>

<code>SYS_DEFAULT_UID = 2525</code>

<code>SYS_DEFAULT_GID = 2525</code>

<code>SYS_MYSQL_USER = webman</code>

<code>SYS_MYSQL_PASS = webman</code>

<code>修改為:</code>

<code>SYS_MYSQL_USER = extmail</code>

<code>SYS_MYSQL_PASS = extmail</code>

而後修改cgi目錄的屬主:

<code># chown -R postfix.postfix /var/www/extsuite/extman/cgi/</code>

在apache的主配置檔案中Extmail的虛拟主機部分,添加如下兩行:

<code>ScriptAlias </code><code>/extman/cgi</code> <code>/var/www/extsuite/extman/cgi</code>

<code>Alias </code><code>/extman</code> <code>/var/www/extsuite/extman/html</code>

建立其運作時所需的臨時目錄,并修改其相應的權限:

<code>#mkdir  -pv  /tmp/extman</code>

<code>#chown postfix.postfix  /tmp/extman</code>

修改

SYS_CAPTCHA_ON = 1

SYS_CAPTCHA_ON = 0

好了,到此為止,重新啟動apache伺服器後,您的Webmail和Extman已經可以使用了,可以在浏覽器中輸入指定的虛拟主機的名稱進行通路,如下:

http://mail.magedu.com

選擇管理即可登入extman進行背景管理了。預設管理帳号為:[email protected]  密碼為:extmail*123*

(1) 如果您安裝後無法正常顯示校驗碼,安裝perl-GD子產品會解決這個問題。如果想簡單,您可以到以下位址下載下傳适合您的平台的rpm包,安裝即可:  http://dries.ulyssis.org/rpm/packages/perl-GD/info.html

(2) extman-1.1自帶了圖形化顯示日志的功能;此功能需要rrdtool的支援,您需要安裝此些子產品才可能正常顯示圖形日志。

2、配置Mailgraph_ext,使用Extman的圖形日志:(下面所需的軟體包面要自己下載下傳)

接下來安裝圖形日志的運作所需要的軟體包Time::HiRes、File::Tail和rrdtool,其中前兩個包您可以去http://search.cpan.org搜尋并下載下傳獲得,後一個包您可以到 http://oss.oetiker.ch/rrdtool/pub/?M=D下載下傳獲得; 注意安裝順序不能改換。

安裝Time::HiRes

<code>#tar zxvf Time-HiRes-1.9707.tar.gz</code>

<code>#cd Time-HiRes-1.9707</code>

<code>#perl Makefile.PL</code>

<code>#make</code>

<code>#make test</code>

<code>#make install</code>

安裝File::Tail

<code>#tar zxvf File-Tail-0.99.3.tar.gz</code>

<code>#cd File-Tail-0.99.3</code>

<code>#perl Makefile</code>

安裝rrdtool-1.2.23

<code>#tar zxvf rrdtool-1.2.23.tar.gz</code>

<code>#cd rrdtool-1.2.23</code>

<code>#./configure --prefix=/usr/local/rrdtool</code>

建立必要的符号連結(Extman會到這些路徑下找相關的庫檔案)

<code>#ln -sv /usr/local/rrdtool/lib/perl/5.8.5/i386-linux-thread-multi/auto/RRDs/RRDs.so   /usr/lib/perl5/5.8.5/i386-linux-thread-multi/</code>

<code>#ln -sv /usr/local/rrdtool/lib/perl/5.8.5/RRDp.pm   /usr/lib/perl5/5.8.5</code>

<code>#ln -sv /usr/local/rrdtool/lib/perl/5.8.5/i386-linux-thread-multi/RRDs.pm   /usr/lib/perl5/5.8.5</code>

複制mailgraph_ext到/usr/local,并啟動之

<code># cp -r /var/www/extsuite/extman/addon/mailgraph_ext  /usr/local  </code>

<code># /usr/local/mailgraph_ext/mailgraph-init start</code>

啟動cmdserver(在背景顯示系統資訊) 

<code># /var/www/extsuite/extman/daemon/cmdserver --daemon</code>

添加到自動啟動隊列

<code># echo “/usr/local/mailgraph_ext/mailgraph-init start” &gt;&gt; /etc/rc.d/rc.local</code>

<code># echo “/var/www/extsuite/extman/daemon/cmdserver -v -d” &gt;&gt; /etc/rc.d/rc.local</code>

使用方法: 等待大約15分鐘左右,如果郵件系統有一定的流量,即可登陸到extman裡,點“圖形日志”即可看到圖形化的日志。具體每天,周,月,年的則點選相應的圖檔進入即可。 

本文轉自 SoulMio 51CTO部落格,原文連結:http://blog.51cto.com/bovin/1839569,如需轉載請自行聯系原作者