亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 4807 | 回復: 1
打印 上一主題 下一主題

[原創(chuàng)]Postfix + Cyrus-SASL + Cyrus-IMAPD + PgSQL HOWTO [復制鏈接]

論壇徽章:
0
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2003-08-24 18:43 |只看該作者 |倒序瀏覽
Postfix + Cyrus-SASL + Cyrus-IMAPD + PgSQL HOWTO
(Under FreeBSD,PowerPlane原創(chuàng))
[附言]
作者:PowerPlane
該附言或許不成其為什么許可證,但還是希望您尊重作者的愿望。
如果您發(fā)現(xiàn)有什么錯誤,請及時通知我,我將盡快作出修改。如果您在網上轉載,那將是免費,但希望您附上本附言,并且注明出處的鏈接。如果您要把它用印刷物形式出版,請通過www.cnfug.org跟本人接洽。
您在以本文作為根據(jù)配置電腦的時候,若出現(xiàn)任何故障,后果自負,與本作者無關。

目標:
-------------------------------------


本文的目的是在于說明如何在FreeBSD的環(huán)境下面搭建一個郵件系統(tǒng)。這個郵件系統(tǒng)支持虛擬用戶,提供IMAP服務,可以成為構成WebMail系統(tǒng)的基礎。
支持IMAP服務的Webmail有著名的IMP和SquirrelMail等等。
本文雖然是用PgSQL作為后臺數(shù)據(jù)庫,但是仍然對使用MySQL,LDAP數(shù)據(jù)庫的作為后臺的類似郵件系統(tǒng)有啟發(fā)作用。如果仔細閱讀本文,一定會有所收貨的。使用其他后臺數(shù)據(jù)庫的話,要修改的地方有兩處:pam服務和main.cf的virtual_mailbox_maps項。
本文所有的調試是在FreeBSD-4.8 release上通過的,也對FreeBSD-5作了額外的說明,主要的差異是集中在pam服務的配置不同而已,希望能有所幫助。
Linux的用戶也能可以參考本文的配置,您只需要留意路徑和pam服務的配置。pam服務配置跟FreeBSD-5類似。


零、閱讀準備:
-------------------------------------

1)閱讀本文需要一定基礎,我假設你已經清楚以下的東西:
郵件系統(tǒng)的基本原理,郵件系統(tǒng)的相關協(xié)議的作用,例如smtp,pop3,imap。

2)什么是SASL:
SASL的英文全稱是Simple Authentication and Security Layer,簡單驗證和安全層。
SMTP協(xié)議并沒有提供用戶驗證功能,很容易匿名中轉郵件。即使限制了可以轉發(fā)的網段,也不安全。他的定義是: a method for adding authentication support to connection-based protocols,為基于連接的協(xié)議提供認證功能。

3)軟件的角色:
Postfix:充當MTA,就是smtpd,作為郵件轉發(fā)用。

Cyrus-SASL:分成兩部分
        a)Cyrus項目的SASL lib,Postfix使用SASL需要用到的lib。
        b)Cyrus-saslauthd,一個SASL的驗證后臺程序。

Cyrus-IMAPD:
提供IMAP服務,提供郵件讀取和管理郵箱的作用。

cyradm:
這個不是一個獨立的軟件,安裝Cyrus-IMAP的時候會自動安裝上去的。它的作用是創(chuàng)建和管理郵箱。

PgSQL:后臺數(shù)據(jù)庫,存放用戶的密碼等等。

總的來講,Postfix充當轉送郵件的服務;Cyrus-IMAP充當提供郵件讀取、管理的服務;SASL使用驗證服務。

4、Cyrus-SASL和Cyrus-IMAPD不是同一樣東西
就跟Microsoft Visual C++和Microsoft Office不是同一個東西一樣

一、本系統(tǒng)的工作原理和結構:
-------------------------------------

注意是本系統(tǒng)。實現(xiàn)一個郵件系統(tǒng)有很多種方式,即使你用的都是跟本系統(tǒng)完全一樣的軟件,也有不同的實現(xiàn)方式。
本系統(tǒng)的郵件主機是:
f4.room
f4是因為fbsd-4,域為room:是因為電腦放在房間里頭。您要看不順眼,就把本文的f4.room都換成example.com算了。

I、Postfix的擔任的工作的部分:
1、這個是投遞郵件的時候的用戶驗證的部分:

  1.   |------------------------|
  2.   |     Postfix            |
  3.   |                        |
  4.   | |-------------|        |
  5.   |-| Cy-SASL-lib |--------|
  6.     |             |   
  7.     |-------------|   
  8.          |            
  9.          |            
  10.     |--------------|   
  11.     | Cy-saslauthd |   
  12.     |--------------|   
  13.          |            
  14.          |            
  15.     |-------|         
  16.     |  PAM  |         
  17.     |-------|         
  18.          |            
  19.          |            
  20.   |-----------------------|
  21.   |    PostgreSQL         |
  22.   |-----------------------|
復制代碼

圖例說明:
當有程序訪問smtp服務(TCP端口25)的時候,Postfix會給出220 ESMTP的回應,提示是要驗證的smtp服務。密碼和用戶名提交給Postfix以后,Postfix會把密碼和用戶名通過調用Cy-SASL lib提交給一個后臺驗證程序:Cy-saslauthd。Cy-saslauthd會調用PAM模塊進行驗證。PAM模塊會調用名為smtp的PAM服務名進行驗證。在本系統(tǒng)中,PAM服務是調用pam_pgsql訪問PostgreSQL進行驗證的。然后結果再Return回去。

2、郵件轉送:
分成三種情況:
1)如果郵件是給非本域用戶的,例如是21cn.com的,馬上就轉發(fā)過去了。

2)如果郵件是給本域虛擬用戶的,Postfix要訪問PgSQL,來看看本域是否有這個虛擬用戶。有就轉發(fā)到他的虛擬郵箱,沒有就把郵件defered掉。(什么是defered?待查,估計是砍掉的意思)
Postfix <-->; PostgreSQL

3)如果是本域的本地用戶,就轉發(fā)到本地用戶的郵箱,就是/var/mail/username那里。
Postfix <-->; /etc/passwd

II、Cyrus-IMAP擔任的工作部分
1、郵件的獲取:
Cyrus-IMAPD有他自己的一套管理郵件的方法,不是用傳統(tǒng)的unix郵箱方法(/var/mail/username),但是郵箱的讀取十分高效。當Postfix獲得目的地是本域的虛擬用戶的時候,我們設置Postfix內置支持的一個功能:調用Cyrus-IMAP的一個程序,將郵件“拿”過來放到由Cyrus-IMAPD管理的郵箱里頭。

2、用戶的驗證。
當用戶要讀取自己的郵件的時候,要通過IMAP服務。本系統(tǒng)配置了Cyrus-IMAP通過Cyrus-saslauthd進行驗證。其原理大概同Postfix驗證用戶的原理一樣。

  1.   |------------------------|
  2.   |     Cyrus-IMAPD        |
  3.   |                        |
  4.   | |-------------|        |
  5.   |-| Cy-SASL-lib |--------|
  6.     |             |   
  7.     |-------------|   
  8.          |            
  9.          |            
  10.     |--------------|   
  11.     | Cy-saslauthd |   
  12.     |--------------|   
  13.          |            
  14.          |            
  15.     |-------|         
  16.     |  PAM  |         
  17.     |-------|         
  18.          |            
  19.          |            
  20.   |-----------------------|
  21.   |    PostgreSQL         |
  22.   |-----------------------|
復制代碼



III、PgSQL存儲的數(shù)據(jù)
現(xiàn)在把PgSQL存儲的數(shù)據(jù)再總結一下。
PgSQL主要存儲兩部分數(shù)據(jù):
1)虛擬用戶的用戶名和密碼。這部分是提供驗證用,從saslauthd通過PAM服務訪問。

  1. ID | usr   | pass  | expired | newtok
  2. ----+-------+-------+---------+--------
  3.   1 | test1 | pass1 | f       | f
  4.   2 | test2 | pass2 | f       | f
復制代碼

2)用戶的地址和對應的信箱。這部分是Postfix訪問的,從中獲得郵件地址和郵箱的映射關系,然后根據(jù)郵件地址轉發(fā)到相應的郵箱。

  1. ID | addr           | box
  2. ----+----------------+------------
  3.   1 | test1@f4.room  | test1
  4.   2 | test2@f4.room  | test2
復制代碼


在本系統(tǒng)中,實際上是兩個表,為了方便大家看,就將他拆分成兩個表。
其實使用兩個表來存儲這些數(shù)據(jù)的做法從安全角度是可取的。我們比如說我們分別建立兩個數(shù)據(jù)庫用戶:postfix和saslauthd,他們只是對自己可以訪問的表有讀權限。另外我們再建立一個視圖,把兩個表關聯(lián)起來,超級用戶對這個視圖有讀取使用的權限,來進行管理。
本文為了方便調試,只是建立一個表。

二、安裝軟件
-------------------------------------

請務必使用port來安裝,因為這不僅影響到你編譯成功率,更影響到以后的配置。因為你直接下載源碼包編譯安裝的路徑可能不一樣
0.PostgreSQL
路徑/usr/ports/databases/postgresql7
make install
注意,這個路徑下的是pgsql 7.3

1.Postfix:
路徑 /usr/ports/mail/postfix
make install,然后會出現(xiàn)一個編譯選項的菜單,選擇Cyrus-SASL2和PgSQL的支持。PgSQL的支持可能有兩種,一個是7.3,一個是7.2,請根據(jù)的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的數(shù)據(jù)庫。
2、建立一個叫做mailuser的表。
結構如下

  1. ID | usr   | pass  | expired | newtok | addr          | box   
  2. ----+-------+-------+---------+--------+---------------+--------
  3.   1 | test1 | pass1 | f       | f      | test1@f4.room | test1
  4.   2 | test2 | pass2 | f       | f      | test2@f4.room | test2
復制代碼

3、在PgSQL里頭建立一個數(shù)據(jù)庫用戶mail,密碼mail
4、創(chuàng)建一個/etc/pam_pgsql.conf

  1. #host = 127.0.0.1  
  2. database = mail
  3. user = mail
  4. password = mail
  5. table = mailuser
  6. user_column = usr
  7. pwd_column = pass
  8. expired_column = expired
  9. newtok_column = newtok
復制代碼


在/etc/pam.conf里頭加上以下幾行。

  1. smtp    auth            required        pam_pgsql.so    debug
  2. smtp    password        required        pam_pgsql.so    debug
  3. smtp    account         required        pam_pgsql.so    debug

  4. imap    auth    required        pam_pgsql.so    debug
  5. imap    password        required        pam_pgsql.so    debug
  6. imap    account         required        pam_pgsql.so    debug
復制代碼


注意,如果的是Freebsd-5和linux,他們的配置有不同:
不用設置/etc/pam.conf,而是在/etc/pam.d/smtp和/etc/pam.d/imap里頭加上

  1. auth            required        pam_pgsql.so    debug
  2. password        required        pam_pgsql.so    debug
  3. account         required        pam_pgsql.so    debug
復制代碼


Part I、配置Postfix + SASL
[目標]
I、配置Postfix + SASL驗證,并且組建一個虛擬用戶的環(huán)境。
比如說:user@f4.room
user并不是FreeBSD上的本地用戶,而是一個虛擬的用戶。用戶的認證信息是存儲在數(shù)據(jù)庫的。


零、域名的處理
相信很多朋友跟我一樣,沒有一個FQDN(Full Qualiefied Domain Name)。雖然沒有域名,我們仍然可以玩Postfix。
先在/etc/hosts添加你的域名。我的域名設置為f4.room,而我的IP是192.168.1.10,所以我的文件是這樣的:

  1. ::1                     localhost localhost.my.domain
  2. 127.0.0.1               localhost localhost.my.domain
  3. 192.168.1.10            f4        f4.room
復制代碼

注意,這里的域名f4.room,是我以后在main.cf用到虛擬用戶的域名,virtual_mailbox_domainsd的那項。

一、Postfix
要Postfix正常運行,必須先要把Sendmail禁用。
/etc/rc.conf里頭加入一行
sendmail="NONE"
然后做一個連接

  1. cd /usr/local/etc/rc.d
  2. ln -s /usr/local/sbin/postfix postfix.sh
復制代碼

看到freebsd的port的好處了嗎?他可以讓你保留原有的sendmail。
Postfix也有一個程序叫做sendmail。如果用源碼安裝,會把Postfix安裝在/usr/sbin里頭,那么就會把sendmail覆蓋掉了。用Port來安裝,它會遵守freebsd的hier(目錄結構),將軟件都裝在/usr/local/下面的sbin/,bin/,lib/,libexe/目錄里頭,不會跟系統(tǒng)的沖突。
哪天您老人家不高興,想玩玩sendmail,先pkg_delete了postfix,然后修改/etc/rc.conf,把sendmail="NONE"改成"YES",就可把sendmail請回來了。


Postfix的配置文件在/usr/local/etc/postfix/
1、master.cf
更改以下兩項:
1)搜索smtp的一行,然后改為

  1. smtp      inet  n       -       n       -       -       smtpd   -v
復制代碼


2)修改cyrus的安裝路徑
將argv=.....一項改為argv=/usr/local/cyrus/bin/deliver
結果如下:

  1. cyrus     unix  -       n       n       -       -       pipe
  2.   user=cyrus argv=/usr/local/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}
復制代碼



2、main.cf

  1. #本地用戶的設置
  2. mydomain = my.domain
  3. myhostname = localhost
  4. mydestination = $myhostname, localhost.$mydomain
  5. local_transport = local
  6. local_recipient_maps = unix:passwd.byname $alias_maps

  7. #虛擬用戶方面的設置
  8. virtual_transport = virtual #這里先使用virtual穿送郵件,稍后設置好imap以后是使用cyrus來抓取虛擬用戶的郵件
  9. virtual_mailbox_base = /var/mail/vhost #設立一個存放虛擬用戶的路徑,設置好imap,可以不需要
  10. virtual_mailbox_maps = pgsql:/usr/local/etc/postfix/pgsql-mailbox.cf #告訴postfix,郵箱要如何映射
  11. virtual_mailbox_domains = f4.room #虛擬郵箱的域
  12. virtual_minimum_uid = 100  #最小合法虛擬用戶ID
  13. virtual_uid_maps = static:5000 #虛擬用戶UID
  14. virtual_gid_maps = static:5000 #虛擬用戶組GID

  15. #設置使用sasl驗證
  16. smtpd_sasl_auth_enable = yes
  17. broken_sasl_auth_clients = yes
復制代碼


3、創(chuàng)建一個pgsql-mailbox.cf

  1. hosts = localhost
  2. user = mail
  3. password = mail
  4. dbname = mail
  5. table = mailuser
  6. select_field = box
  7. where_field = addr
復制代碼


4、建立相關的目錄
確保你有root權限哦
mkdir /var/mail/vhost
cd /var/mail/vhost/
touch test1
touch test2
chowm 5000:5000 test1
chowm 5000:5000 test2

二、配置Cyrus-SASL
/usr/local/lib/sasl2/Sendmail.conf

  1. pwcheck_method: saslauthd
  2. mech_list: plain login
復制代碼


然后做一個連接
ln -s Sendmail.conf smtpd.conf

好現(xiàn)在做一個測試:
先獲取plain字符竄。為了獲得plain字符串,必須要用base64編碼。我安裝了一個perl的mod來產生這個base64編碼。

  1. perl -MMIME::Base64 -e 'print encode_base64("test1\0test1\0pass1");'
復制代碼

結果:
dGVzdDEAdGVzdDEAcGFzczE=
一般的格式是:

  1. perl -MMIME::Base64 -e 'print encode_base64("user\0user\0passwd");'
復制代碼


他的port在/usr/ports/converters/p5-MIME-Base64/

測試:
綠色的字體由你來輸入。
>; telnet 192.168.1.10 25
Trying 192.168.1.10...
Connected to f4.
Escape character is '^]'.
220 localhost ESMTP Postfix
ehlo host
250-localhost
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-XVERP
250 8BITMIME
auth plain dGVzdDEAdGVzdDEAcGFzczE=
235 Authentication successful

出現(xiàn)235 Authentication successful,就表示你的機器成功使用postfix + sasl 認證了。
注意,一定要打ehlo hostname,否則就不會出下面的東西了。

三、調試發(fā)信給虛擬用戶
>; mail test1@f4.room
Subject: a test
test
.
EOT
如果成功的話,/var/mail/vhost/test1大小為非0,而且你可用cat、less等工具把文件的內容讀出來讀出來。

四、一個小小的Bug
首先聲明,這個Bug不是postfix的,應該是我的配置的。
不知道為什么,根據(jù)以上的設置,在本機上寫信給本地用戶,例如powerplane,地址必須是:
powerplane@localhost.my.domain。
其他地址,如:powerplane@localhost,他會當把powerplane@f4.room處理。
估計是main.cf和/etc/hosts上沒有配置好。哪位高人,請指點一下?

Part II、配置Cyrus-IMAP
1、編輯/usr/local/etc/imapd.conf,這個是Cyrus-IMAP的配置文件
內容應該如下:

  1. configdirectory: /var/imap
  2. partition-default: /var/spool/imap
  3. sieveusehomedir: false
  4. sievedir: /var/imap/sieve
  5. sasl_pwcheck_method: saslauthd        #使用saslauthd來進行驗證
  6. admins: cyrus                        #用cyrus用戶來管理郵箱,注意,這個不是本地用戶。而是Cyradm管理模塊的管理員。該用戶信息存放在/usr/local/etc/sasldb2里頭
復制代碼


2、運行/usr/local/cyrus/bin/mkimap。
他會自動讀取/usr/local/etc/imapd.conf,自動創(chuàng)建/var/imap,/var/spool/imap等等所需要的目錄的。

3、啟動Cyrus-IMAPD。
使用Port來安裝Cyrus-IMAP,它會在/usr/local/etc/rc.d創(chuàng)建一個啟動腳本的,名字為:imapd.sh.sample。你要把它改名為imapd.sh,在啟動系統(tǒng)時后他才會自動執(zhí)行。如果它沒有運行,你也可人工啟動它:
/usr/local/etc/rc.d/imapd.sh start

4、建立Cyradm模塊的需要的用戶數(shù)據(jù)庫:sasldb2。
1)創(chuàng)建sasldb2數(shù)據(jù)庫,并且創(chuàng)建管理員cyrus。

  1. cd /usr/local/etc
  2. saslpasswd2 -c cyrus
  3. Password:cyrus
  4. Again(for verification):cyrus

  5. chown cyrus:mail sasldb2
復制代碼

2)創(chuàng)建用戶郵箱:
Cyrus-IMAP是自己管理郵箱,創(chuàng)建郵箱必須通過cyradm來創(chuàng)建。
下面通過cyradm工具來創(chuàng)建郵箱。
cyradm --user cyrus localhost 是用cyrus用戶,登陸到主機localhost。
cm是創(chuàng)建郵箱
lm是列出郵箱
>; cyradm --user cyrus localhost
Password:
localhost>; cm user.test1
localhost>; cm user.test2
localhost>; lm
user.test1 (\HasNoChildren)        user.test2 (\HasNoChildren)
localhost>; quit


使用imtest來測試
>; imtest -m login -a test1 localhost
S: * OK F4 Cyrus IMAP4 v2.1.15 server ready
C: C01 CAPABILITY
S: * CAPABILITY IMAP4 IMAP4rev1 ACL QUOTA LITERAL+ MAILBOX-REFERRALS NAMESPACE UIDPLUS ID NO_ATOMIC_RENAME UNSELECT CHILDREN MULTIAPPEND SORT THREAD=ORDEREDSUBJECT THREAD=REFERENCES IDLE AUTH=NTLM AUTH=OTP AUTH=DIGEST-MD5 AUTH=CRAM-MD5
S: C01 OK Completed
Please enter your password:
C: L01 LOGIN test1 {4}
S: + go ahead
C: <omitted>;
S: L01 OK User logged in
Authenticated.

Security strength factor: 0
. logout
* BYE LOGOUT received
. OK Completed
Connection closed.

出現(xiàn)上面紅色字表示登陸成功,打. logout退出。

Part III、整合Postfix和Cyrus-IMAP
你前面的設置和調試都順利通過了嗎?好到這一步了,只需要改一個文件。
/usr/local/etc/postfix/main.cf

  1. virtual_transport = cyrus #這里的cyrus是對應回master.cf里頭傳送郵箱項。
復制代碼

別忘記重新啟動你的postfix
/usr/local/etc/rc.d/postfix.sh reload

好趕快測試一下吧
>; mail test1@f4.room
Subject: final test
haha
.
EOT

咱們用一個支持IMAP的客戶端收信吧,試試能不能成功?用戶名用test1,密碼是pass1。

總結:
-------------------------------------


如果使用port的時候,有什么不明白,不懂的時候,可以參考具體軟件的port目錄里頭的pkg-message,里頭有關于該軟件的一些簡單說明和配置。當然不是每個port都有的。
我的建議是:不要期待一篇HOW-TO就讓你明白所有東西,你還是要作作功課的。
下面提供一些文檔作為參考,有些文檔是在你安裝port以后,在本機上的,當然在源碼包肯定也有。


Postfix的virtual domains入門:
http://www.freebsddiary.org/postfix.php

Postfix的虛擬用戶設置:
/usr/local/share/doc/postfix/VIRTUAL_README

Postfix的一些官方文檔,教你如何跟Cyrus-SASL2和Cyrus-IMAP2整合:
http://www.postfix.org/docs.html

FreeBSD上面的PAM配置:
http://www.freebsd.org/doc/en_US.ISO8859-1/articles/pam/index.html

下面的是Linux為目標系統(tǒng)的,我也參考過。如果您仔細閱讀過他們和本文,就明白FreeBSD的hier和Port系統(tǒng)的好處。
Postfix-Cyrus-Web-cyradm-HOWTO:
http://www.delouw.ch/linux/Postfix-Cyrus-Web-cyradm-HOWTO/html/index.html

Postfix + Cyrus-IMAP + Cyrus-SASL + MySQL + IMP的中文HOWTO
http://www.cngnu.org/technology/Postfix_I.html

論壇徽章:
0
2 [報告]
發(fā)表于 2003-08-24 18:44 |只看該作者

[原創(chuàng)]Postfix + Cyrus-SASL + Cyrus-IMAPD + PgSQL HOWTO

本論壇的bbcode解釋結果跟cnfug不一樣,為了獲得更好的顯示效果,看下面的論壇的帖子。而且本章隨時可能更新,以下面的帖子為主。
http://forum.cnfug.org/index.php?act=ST&f=10&t=469&st=0#entry3265
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP