[附言]
該附言或許不成其為什么許可證,但還是希望您尊重作者的愿望。
如果您發現有什么錯誤,請及時通知我,我將盡快作出修改。如果您在網上轉載,那將是免費,但希望您附上本附言,并且注明出處的鏈接。如果您要把它用印刷物形式出版,請通過www.cnfug.org跟本人接洽。
您在以本文作為根據配置電腦的時候,若出現任何故障,后果自負,與本作者無關。
目標
本文的目的是在于說明如何在FreeBSD的環境下面搭建一個郵件系統。這個郵件系統支持虛擬用戶,提供IMAP服務,可以成為構成WebMail系統的基礎。
支持IMAP服務的Webmail有著名的IMP和SquirrelMail等等。
本文雖然是用PgSQL作為后臺數據庫,但是仍然對使用MySQL,LDAP數據庫的作為后臺的類似郵件系統有啟發作用。如果仔細閱讀本文,一定會有所收貨的。使用其他后臺數據庫的話,要修改的地方有兩處:pam服務和main.cf的virtual_mailbox_maps項。
本文所有的調試是在FreeBSD-4.8 release上通過的,也對FreeBSD-5作了額外的說明,主要的差異是集中在pam服務的配置不同而已,希望能有所幫助。
Linux的用戶也能可以參考本文的配置,您只需要留意路徑和pam服務的配置。pam服務配置跟FreeBSD-5類似。
零、閱讀準備
1)閱讀本文需要一定基礎,我假設你已經清楚以下的東西:
郵件系統的基本原理,郵件系統的相關協議的作用,例如smtp,pop3,imap。
2)什么是SASL:
SASL的英文全稱是Simple Authentication and Security Layer,簡單驗證和安全層。
SMTP協議并沒有提供用戶驗證功能,很容易匿名中轉郵件。即使限制了可以轉發的網段,也不安全。他的定義是: a method for adding authentication support to connection-based protocols,為基于連接的協議提供認證功能。
3)軟件的角色:
Postfix:充當MTA,就是smtpd,作為郵件轉發用。
Cyrus-SASL:分成兩部分
a)Cyrus項目的SASL lib,Postfix使用SASL需要用到的lib。
b)Cyrus-saslauthd,一個SASL的驗證后臺程序。
Cyrus-IMAPD:
提供IMAP服務,提供郵件讀取和管理郵箱的作用。
cyradm:
這個不是一個獨立的軟件,安裝Cyrus-IMAP的時候會自動安裝上去的。它的作用是創建和管理郵箱。
PgSQL:后臺數據庫,存放用戶的密碼等等。
總的來講,Postfix充當轉送郵件的服務;Cyrus-IMAP充當提供郵件讀取、管理的服務;SASL使用驗證服務。
4、Cyrus-SASL和Cyrus-IMAPD不是同一樣東西
就跟Microsoft Visual C++和Microsoft Office不是同一個東西一樣
一、本系統的工作原理和結構
注意是本系統。實現一個郵件系統有很多種方式,即使你用的都是跟本系統完全一樣的軟件,也有不同的實現方式。
本系統的郵件主機是:
f4.room
f4是因為fbsd-4,域為room:是因為電腦放在房間里頭。您要看不順眼,就把本文的f4.room都換成example.com算了。
I、Postfix的擔任的工作的部分:
1、這個是投遞郵件的時候的用戶驗證的部分:
2、郵件轉送:
分成三種情況:
1)如果郵件是給非本域用戶的,例如是21cn.com的,馬上就轉發過去了。
2)如果郵件是給本域虛擬用戶的,Postfix要訪問PgSQL,來看看本域是否有這個虛擬用戶。有就轉發到他的虛擬郵箱,沒有就把郵件defered掉。(什么是defered?待查,估計是砍掉的意思)
Postfix <--> PostgreSQL
3)如果是本域的本地用戶,就轉發到本地用戶的郵箱,就是/var/mail/username那里。
Postfix <--> /etc/passwd
II、Cyrus-IMAP擔任的工作部分
1、郵件的獲?。?BR>Cyrus-IMAPD有他自己的一套管理郵件的方法,不是用傳統的unix郵箱方法(/var/mail/username),但是郵箱的讀取十分高效。當Postfix獲得目的地是本域的虛擬用戶的時候,我們設置Postfix內置支持的一個功能:調用Cyrus-IMAP的一個程序,將郵件“拿”過來放到由Cyrus-IMAPD管理的郵箱里頭。
2、用戶的驗證。
當用戶要讀取自己的郵件的時候,要通過IMAP服務。本系統配置了Cyrus-IMAP通過Cyrus-saslauthd進行驗證。其原理大概同Postfix驗證用戶的原理一樣。
III、PgSQL存儲的數據
現在把PgSQL存儲的數據再總結一下。
PgSQL主要存儲兩部分數據:
1)虛擬用戶的用戶名和密碼。這部分是提供驗證用,從saslauthd通過PAM服務訪問。
2)用戶的地址和對應的信箱。這部分是Postfix訪問的,從中獲得郵件地址和郵箱的映射關系,然后根據郵件地址轉發到相應的郵箱。
二、安裝軟件
請務必使用port來安裝,因為這不僅影響到你編譯成功率,更影響到以后的配置。因為你直接下載源碼包編譯安裝的路徑可能不一樣
0.PostgreSQL
路徑/usr/ports/databases/postgresql7
make install
注意,這個路徑下的是pgsql 7.3
1.Postfix:
路徑 /usr/ports/mail/postfix
make install,然后會出現一個編譯選項的菜單,選擇Cyrus-SASL2和PgSQL的支持。PgSQL的支持可能有兩種,一個是7.3,一個是7.2,請根據的PgSQL服務器選擇。
2.Cyrus-SASL2:
由于上面安裝Postfix的時候,選擇了Cyrus-SASL2支持,編譯Postfix的時候,會自動下載Cyrus-SASL2進行編譯安裝,所以Cyrus-SASL2不需要安裝。
3. Cyrus-sasl-saslauthd
路徑:/usr/ports/security/cyrus-sasl2-saslauthd/
make install
4. Cyrus-imapd-2.1.14
路徑:/usr/ports/mail/cyrus-imapd2/
make install
三、配置軟件
零、配置PgSQL和pam服務
1、建立一個叫做mail的數據庫。
2、建立一個叫做mailuser的表。
結構如下 ID | usr | pass | expired | newtok | addr | box
----+-------+-------+---------+--------+---------------+--------
1 | test1 | pass1 | f | f | test1@f4.room | test1
2 | test2 | pass2 | f | f | test2@f4.room | test2
3、在PgSQL里頭建立一個數據庫用戶mail,密碼mail
4、創建一個/etc/pam_pgsql.conf