• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • Postfix + Cyrus-IMAP + Cyrus-SASL + MySQL + IMP 完全指南

    發表于:2007-07-02來源:作者:點擊數: 標簽:
    全面介紹了利用Postfix建立一套完整的郵件服務器的方法,包括了SMTP認證、IMAP認證以及WEBMAIL等相關技術問題,文章完整翔實全面,可即看即用。 版本:0.41 版權:GPL 目錄 1.概述 1.1.目的 1.2.更新歷史 1.3.TODO 1.4.鳴謝 2.系統功能 3.系統基本前提 4.配
     全面介紹了利用Postfix建立一套完整的郵件服務器的方法,包括了SMTP認證、IMAP認證以及WEBMAIL等相關技術問題,文章完整翔實全面,可即看即用。
    版本:0.41
    版權:GPL
    目錄
    1. 概述

    1.1. 目的

    1.2. 更新歷史

    1.3. TODO

    1.4. 鳴謝

    2. 系統功能

    3. 系統基本前提

    4. 配置MySQL

    4.1. 運行

    4.2. 測試

    4.3. 配置

    5. 安裝pam_mysql

    5.1. 下載

    5.2. 編譯與安裝

    5.3. 配置

    6. 安裝Cyrus-SASL

    6.1. 下載

    6.2. 編譯與安裝

    6.3. 配置

    6.4. 運行

    7. 安裝Postfix

    7.1. 下載

    7.2. 編譯與安裝

    7.3. 配置

    7.4. 運行

    7.5. 測試

    8. 安裝Cyrus-IMAP

    8.1. 下載

    8.2. 編譯與安裝

    8.3. 配置

    8.4. 運行

    8.5. 測試

    9. 安裝IMP

    9.1. 下載

    9.2. 配置Apache/PHP

    9.3. 配置Horde

    9.4. 配置Imp

    9.5. 配置Turba

    9.6. 測試IMP

    10. 其它

    10.1. 啟動腳本

    10.2. 整體測試


    --------------------------------------------------------------------------------



    1. 概述
    1.1. 目的
    ??本文試圖介紹如何在一個Linux平臺上安裝一套功能完整的郵件系統。這里我們以Postfix做SMTP服務器、Cyrus-IMAP做POP3/IMAP4服務器、通過Cyrus-SASL對存儲在MySQL數據庫中的用戶進行驗證和授權,并且使用IMP來提供一個完善的WEBMAIL界面。

    ??這個郵件系統的設計目標是提供一個可擴充的、具備大多數功能的郵件系統。

    ??本文的最新版本可以在這里找到:

    格式 URL
    簡體中文/HTML http://www.cngnu.org/technology/Postfix_I.html
    繁體中文/HTML http://www.cngnu.org/technology/Postfix_I.tw.html
    簡體中文/TEXT http://www.cngnu.org/technology/Postfix_I.txt
    繁體中文/TEXT http://www.cngnu.org/technology/Postfix_I.tw.txt

    ??有關本文所涉及的技術問題,請到http://www.chinaunix.net/forum/viewforum.php?f=14的mail版討論,我會盡快回復的。

    ??本文的版權遵循GPL,可以在不刪除版權信息和注明修改的情況下任意傳播。

    1.2. 更新歷史
    2002-05-21 第一次發布,版本0.20。
    2002-08-13 修正一些錯誤,版本0.21。
    2002-08-23 修正一些錯誤,版本0.22。
    2002-09-12 在RedHat Linux Advance Server V2.1上進行了測試,修正了一些錯誤,版本0.30。
    2002-12-12 修正了一些錯誤,添加了IMP部分的內容,版本0.31。
    2003-01-30 修正了一些錯誤,添加了非明文密碼部分的內容,版本0.32。
    2003-02-05 修正了一些錯誤,版本0.33
    2003-03-26 使用了SASL V2和Cyrus-IMAP 2,支持使用db4的新的Linux發行版,如RedHat 8.0和Mandrake 9.0,并以RedHat 8.0為示范平臺。修正了一些錯誤,版本0.40。
    2003-03-28 修正了一些錯誤,特別感謝bjchenxu,版本0.41。
    1.3. TODO
    增加郵件列表功能
    增加SSL部分的內容
    增加虛擬域部分的內容
    翻譯:希望有能力的朋友可以翻譯這篇文章為英文,這樣國外的朋友也可以看到
    1.4. 鳴謝
    ??謝謝lesson.ward、Yunping Zhu、Temp、bjchenxu的指正。



    ??參考文檔:http://www.delouw.ch/linux/Postfix-Cyrus-Web-cyradm-HOWTO/html/index.html。在這篇文章撰寫之初,參考過該文章,目前該文章也在不斷更新,大家也可以看看。

    2. 系統功能
    ??系統邏輯結構:


    +---------------------------------------------------+
    |                          |
    | 25/25  25/25   110/993 143/995  80/443  |
    | Incoming Outgoing   POP3   IMAP  WEB-MAIL  |
    |  /\    /\     /\    /\    /\   |
    |  ||    ||     ||    ||    ||   |
    |  \/    \/     \/    \/    \/   |
    +-------------------+---------------+---------------+
    |  Postfix    |        |   IMP   |
    |          |        +---------------+
    |          |   Cyrus-IMAP        |
    |    +-----------+-------------------------------+
    |    |         Cyrus-SASL        |
    |    +-------------------------------------------+
    |    |         saslauthd        |
    |    +-------------------------------------------+
    |    |           PAM          |
    |    +-------------------------------------------+
    |    |         pam_mysql        |
    +-------+-------------------------------------------+
    |           MySQL            |
    +---------------------------------------------------+
    ??整個系統對外的界面包括幾個部分,用來發信的SMTP、用來收信的POP3和IMAP、以及一個WEB界面的郵件使用系統。這里沒有提供WEB界面的管理工具,需要大家自行依據實際需要開發。

    ??MySQL作為系統中存儲數據的核心,它存儲了用戶的信息。這個信息不但用于POP3/IMAP和SMTP AUTH的認證需要,而且也為Postfix提供了本地接收者的列表和轉發功能。

    ??認證流程比較繁瑣。整個認證是通過Cyrus-SASL來做的,通過運行一個守護進程saslauthd來監聽認證需求。saslauthd這里使用了pam認證方式通過pam_mysql插件對MySQL數據庫進行查找。

    3. 系統基本前提
    ??本文以Linux系統為目標平臺,支持多數的Linux平臺如RedHat 7.x/8.x、Mandrake 8.x/9.x等,理論上也會支持其他的Linux發行版,甚至其他的UNIX系統。

    ??這里以RedHat Linux V 8.0為說明平臺。

    ??該說明平臺除了基本的操作系統部分外,系統中還安裝了如下的RPM:

    ??一、gclearcase/" target="_blank" >cc:

    ????1. gcc-3.2-7

    ????2. gcc-c++-3.2-7

    ??二、db3:

    ????1. db4-devel-4.0.14-14

    ????2. db4-4.0.14-14

    ????3. db4-utils-4.0.14-14

    ??三、pam:

    ????1. pam-0.75-40

    ????2. pam-devel-0.75-40


    ??四、mysql:

    ????1. mysql-3.23.52-3

    ????2. mysql-server-3.23.52-3

    ????3. mysql-devel-3.23.52-3

    ??五、IMP相關:

    ????1. httpd-2.0.40-8

    ????2. httpd-devel-2.0.40-8

    ????2. gettext-0.11.4-3

    ????3. imap-devel-2001a-15

    ????4. krb5-libs-1.2.5-6

    ????5. krb5-devel-1.2.5-6

    ????6. openssl-0.9.6b-29

    ????7. openssl-devel-0.9.6b-29


    ??如果系統中沒有,請自行安裝RPM包或編譯安裝。除此之外,其他需要的部分將以源碼方式編譯。

    4. 配置MySQL
    4.1. 運行
    ??啟動命令如下:

    [root@mail root]# /etc/init.d/mysqld start


    4.2. 測試
    ??啟動MySQL后,首先檢查日志/var/log/messages有無錯誤信息,然后檢查進程,應該有如下進程存在:

    [root@mail root]# pstree | grep mysqld



    |-safe_mysqld---mysqld---mysqld---2*[mysqld]




    ??接著檢查端口,應該有如下端口打開:

    [root@mail root]# netstat -an | grep LISTEN



    tcp??0??0 0.0.0.0:3306??0.0.0.0:*??LISTEN





    4.3. 配置
    ??MySQL安裝配置好以后,在MySQL中創建郵件用戶數據庫,并添加一個測試用戶“tester”:

    [root@mail root]# mysql mysql

    Reading table information for completion of table and column names

    You can turn off this feature to get a quicker startup with -A



    Welcome to the MySQL monitor. Commands end with ; or \g.

    Your MySQL connection id is 1 to server version: 3.23.52



    Type @#help;@# or @#\h@# for help. Type @#\c@# to clear the buffer.



    mysql> CREATE DATABASE mail;

    Query OK, 1 row affected (0.00 sec)



    mysql> GRANT ALL ON mail.* TO mail@localhost

    ??-> IDENTIFIED BY "secret";

    Query OK, 0 row affected (0.00 sec)



    mysql> FLUSH PRIVILEGES;

    Query OK, 0 row affected (0.00 sec)



    mysql> USE mail;

    Database changed



    mysql> CREATE TABLE USER (

    ??-> USERNAME varchar(32) not null default @#@#,

    ??-> PASSWORD varchar(64) not null default @#@#,

    ??-> FORWARD varchar(128) not null default @#@#,

    ??-> PATITION varchar(32) not null default @#default@#,

    ??-> QUOTE int not null default @#1024@#,

    ??-> STATUS tinyint not null default @#1@#);

    Query OK, 0 rows affected (0.00 sec)



    mysql> CREATE INDEX USER ON USER (USERNAME,PASSWORD,FORWARD,STATUS);

    Query OK, 0 rows affected (0.00 sec)

    Records: 0 Duplicates: 0 Warnings: 0



    mysql> INSERT INTO USER (USERNAME,PASSWORD,FORWARD)VALUES

    ??-> (@#tester@#,@#$1$pi.WVgBx$a3dUCzBnbY76jnZlqWQCQ/@#,@#tester@#);

    Query OK, 1 row affected (0.01 sec)



    mysql> \q

    Bye


    ??上面的mail數據庫的user表用來保存用戶信息:

    USERNAME和PASSWORD字段就是用戶名和MD5-Crypt密碼。這里采用了加密密碼是為了更好的安全性。
    FORWARD字段默認情況下與USERNAME一樣,在此情況下,郵件遞交到本地郵箱(由于Postfix區分郵箱的大小寫,所以通過這樣的一個轉發,正好可以消除大小寫的區別);如果FORWARD字段是另外一個用戶名或者郵件地址,則該郵件被轉發到別的用戶或其它郵件地址。
    STATUS字段用來指示該用戶是否有效,可以通過修改該值為0來臨時禁止某個用戶。


    5. 安裝pam_mysql
    5.1. 下載
    ??http://sourceforge.net/projects/pam-mysql/

    [root@mail root]# cd /usr/src

    [root@mail src]# wget http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.4.7.tar.gz


    ??注:如果不能訪問該網站取得pam_mysql,請自行使用代理服務器訪問。

    5.2. 編譯與安裝
    ??編譯pam_mysql:

    [root@mail src]# tar -zxf pam_mysql-0.5.tar.gz

    [root@mail src]# cd pam_mysql


    ??修改pam_mysql.c的源代碼,去掉調試消息:

    [root@mail pam_mysql]# vi +54 pam_mysql.c


    ??將如下一行:

    #define DEBUG

    ??修改為:

    /* #define DEBUG */

    ??然后編譯:

    [root@mail pam_mysql]# make

    [root@mail pam_mysql]# cp pam_mysql.so /lib/security




    ??有些情況下,這個編譯會報錯,但是如果編譯能生成pam_mysql.so模塊,還是可以用的。

    5.3. 配置
    ??創建/etc/pam.d/mail,它用來支持Cyrus-IMAP的imap認證、pop認證和Postfix的smtp認證:

    [root@mail pam_mysql]# cd /etc/pam.d

    [root@mail pam.d]# echo auth sufficient pam_mysql.so user=mail passwd=secret \

    > host=localhost db=mail table=USER usercolumn=USERNAME passwdcolumn=PASSWORD \

    > crypt=1> /etc/pam.d/mail

    [root@mail pam.d]# echo account required pam_mysql.so user=mail passwd=secret \

    > host=localhost db=mail table=USER usercolumn=USERNAME passwdcolumn=PASSWORD \

    > crypt=1>> /etc/pam.d/mail

    [root@mail pam.d]# echo auth sufficient pam_unix_auth.so >> /etc/pam.d/mail

    [root@mail pam.d]# echo account sufficient pam_unix_acct.so >> /etc/pam.d/mail


    ??這里前面兩行是指通過mysql數據庫來認證用戶,后面兩行指是通過UNIX的基本方式認證用戶(即系統用戶)。這里我們之所以保留UNIX系統認證模式,是因為我們下面要通過系統用戶cyrus來管理cyrus-imap郵箱。不過你也可以選擇將這個管理帳號cyrus放入mysql認證數據庫里面,只需要你在上面的數據庫里面添加一個cyrus用戶。

    ??通過給上面的crypt賦予不同的值可以使用多種密碼存儲方式:

    crypt=0:表示使用明文來存儲密碼。這樣存儲的好處是簡單,但是不夠安全。
    crypt=1:表示使用UNIX系統的DES加密密碼方式來存儲。即通常的UNIX的/etc/passwd(老式系統加密口令存儲在這里)或/etc/shadow(較為新的系統加密口令存放在這里)中存儲的加密口令。加密口令有兩種,一種是普通的des加密的,也叫crypt(),這種密碼是13位長,前面兩個字符是加密種子;還有一種是使用了MD5算法增強了的,也叫MD5 crypt(),這種密碼的加密種子是以$1$開頭的12個字符,密碼長度不定。
    crypt=2:表示使用mysql的SQL函數password()加密方式來存儲。
    crypt=3:表示使用md5的散列方式來存儲。這種方式和MD5 crypt()是不一樣的。
    ??一般如果從系統用戶遷移到使用數據庫的虛擬用戶時,可以使用crypt=1方式,系統會自動辨別兩種加密口令。如果需要開發用戶修改口令的功能時,C和Perl里面的crypt函數不能支持MD5 crypt()口令,需要使用額外的編程或模塊來支持。

    ??做個符號鏈接/etc/pam.d/imap,它用來支持Cyrus-IMAP的imap認證:

    [root@mail pam.d]# [ -f imap ] && mv imap imap.orig


    [root@mail pam.d]# ln -s mail imap



    ??同樣創建/etc/pam.d/pop ,它用來支持Cyrus-IMAP的pop3認證:

    [root@mail pam.d]# [ -f pop ] && mv pop pop.orig


    [root@mail pam.d]# ln -s mail pop


    ??同樣創建/etc/pam.d/smtp ,它用來支持Postfix的smtp auth認證:

    [root@mail pam.d]# [ -f smtp ] && mv smtp smtp.orig

    [root@mail pam.d]# ln -s mail smtp


    ??系統上可能已經存在了這些文件,請將原來的改名或者刪除。

    6. 安裝Cyrus-SASL
    6.1. 下載
    ??http://asg.web.cmu.edu/cyrus/download/

    [root@mail pam.d]# cd /usr/src

    [root@mail src]# wget ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/cyrus-sasl-2.1.12.tar.gz


    6.2. 編譯與安裝
    ??編譯Cyrus-sasl,只支持需要的plain和login認證方式:

    [root@mail src]# tar -zxvf cyrus-sasl-2.1.12.tar.gz

    [root@mail src]# cd cyrus-sasl-2.1.12

    [root@mail cyrus-sasl-2.1.12]# ./configure --disable-sample \

    > --disable-pwcheck --disable-cram --disable-digest \

    > --disable-krb4 --disable-gssapi --disable-anon \

    > --with-saslauthd=/var/run/saslauthd \

    > --enable-plain --enable-login



    [root@mail cyrus-sasl-2.1.12]# make

    [root@mail cyrus-sasl-2.1.12]# make install



    [root@mail cyrus-sasl-2.1.12]# [ -d /usr/lib/sasl2 ] && mv /usr/lib/sasl2 /usr/lib/sasl2.orig

    [root@mail cyrus-sasl-2.1.12]# ln -s /usr/local/lib/sasl2 /usr/lib/sasl2


    ??系統上如果已經安裝了SASL 2,請先刪除這些RPM或/usr/lib/sasl2這個目錄。



    ??加載鏈接庫:

    [root@mail cyrus-sasl-2.1.12]# echo /usr/local/lib >> /etc/ld.so.conf

    [root@mail cyrus-sasl-2.1.12]# echo /usr/local/lib/sasl2 >> /etc/ld.so.conf

    [root@mail cyrus-sasl-2.1.12]# ldconfig


    6.3. 配置
    ??設置Postfix使用SASL的saslauthd認證守護進程來支持smtp auth認證:

    [root@mail cyrus-sasl-2.1.12]# echo pwcheck_method: saslauthd > /usr/lib/sasl2/smtpd.conf


     ??Cyrus-IMAP的SASL配置不使用標準的sasl語法,它的配置文件放在/etc/imapd.conf中,詳細配置在Cyrus-IMAP部分說明。

    6.4. 運行
    ??運行saslauthd守護進程,并使其使用pam認證模式來提供認證信息:

    [root@mail cyrus-sasl-2.1.12]# /usr/local/sbin/saslauthd -a pam


    ??整個系統使用的認證機制比較復雜。所有的應用(SMTP、IMAP、POP3等)都采用SASL V2的saslauthd來認證;而saslauthd是通過它所支持的PAM模式來借助pam_mysql接口對存儲在MySQL數據庫中用戶信息進行認證的。請參閱上面的系統結構以了解認證流程。



    7. 安裝Postfix
    7.1. 下載
    ??http://www.postfix.org/ftp-sites.html

    [root@mail cyrus-sasl-2.1.12]# cd /usr/src

    [root@mail src]# wget http://postfix.energybeam.com/source/official/postfix-2.0.7.tar.gz


    7.2. 編譯與安裝
    ??如果你的系統上原來有sendmail,先將其停止并將其文件改名:

    [root@mail src]# /etc/init.d/sendmail stop

    [root@mail src]# mv /usr/bin/newaliases /usr/bin/newaliases.orig

    [root@mail src]# mv /usr/bin/mailq /usr/bin/mailq.orig

    [root@mail src]# mv /usr/sbin/sendmail /usr/sbin/sendmail.orig




    ??然后添加兩個組:postfix和maildrop和一個用戶:postfix

    [root@mail src]# groupadd -g 12345 postfix

    [root@mail src]# groupadd -g 12346 postdrop

    [root@mail src]# useradd -u 12345 -g 12345 -c postfix -M -d/no/where -s/no/shell postfix


    ??這里的組和用戶的ID是系統中未使用的ID。



    ??編譯Postfix,并支持mysql和sasl:

    [root@mail src]# tar -xvzf postfix-2.0.7.tar.gz

    [root@mail src]# cd postfix-2.0.7



    [root@mail postfix-2.0.7]# make -f Makefile.init makefiles \

    > @#CCARGS=-DUSE_SASL_AUTH -DHAS_MYSQL -I/usr/include/mysql -I/usr/local/include/sasl@# \

    > @#AUXLIBS=-L/usr/lib/mysql -L/usr/local/lib/sasl2 -lmysqlclient -lsasl2 -lz -lm@#

    [root@mail postfix-2.0.7]# make install


    ??安裝時,安裝程序會提問一些問題,可以直接按回車采用默認值。

    ??這里切記要專門指定你剛安裝的SASL2的INCLUDE和LIB位置。由于現在很多linux發行版上都已經帶有了sasl,如果不指定的話,很可能會使用了不同版本的頭文件和庫,在這種情況下,每次連接SMTP時,smtpd就會發生致命錯誤“Fatal: SASL per-connection server init...”而崩潰。



    ??修改系統的別名數據庫位置:

    [root@mail postfix-2.0.7]# cd /etc

    [root@mail etc]# mv aliases aliases.orig

    [root@mail etc]# ln -s postfix/aliases aliases


    ??給postfix用戶做一個系統別名,并將超級用戶的郵箱轉發到一個普通用戶如tester。使用/etc/postfix/aliases別名數據庫:

    [root@mail etc]# cd postfix

    [root@mail postfix]# echo @#root: tester@# >> /etc/postfix/aliases


    ??生成/etc/postfix/aliases別名數據庫:

    [root@mail postfix]# postalias /etc/postfix/aliases



    7.3. 配置
    ??修改/etc/postfix/master.cf中的關于cyrus的配置,(cyrus的命令行和以前有不兼容的地方,確保你的cyrus的參數如下使用了-r ${sender}參數):

    [root@mail postfix]# vi master.cf


    ??將如下兩行:

    cyrus unix - n n - - pipe
    ?user=cyrus argv=/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}

    ??修改為:

    cyrus unix - n n - - pipe
    ?user=cyrus argv=/usr/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}

    ??這里要把cyrus的路徑修改為你的cyrus實際安裝路徑(我們下面會將cyrus-imap安裝到/usr/cyrus)。 記著user=...這行前面是以空格縮進的。



    [root@mail postfix]# vi main.cf




    ??修改/etc/postfix/main.cf的配置:

    myhostname = mail.cngnu.org

    mydomain = cngnu.org

    myorigin = $mydomain

    mydestination = $mydomain,$myhostname



    alias_maps = hash:/etc/postfix/aliases

    alias_database = hash:/etc/postfix/aliases



    home_mailbox = Maildir/




    mailbox_transport = cyrus

    fallback_transport = cyrus



    virtual_maps = hash:/etc/postfix/virtual,mysql:/etc/postfix/mysql-virtual.cf



    smtpd_sasl_auth_enable = yes

    smtpd_recipient_restrictions = permit_sasl_authenticated permit_auth_destination reject

    broken_sasl_auth_clients = yes

    smtpd_sasl_security_options = noanonymous


    ??在上面的配置文件里面使用了SASL來進行SMTP發信認證。這里沒有使用smtpd_sasl_local_domain參數來指定本地認證域,如果指定了,需要注意的是,在上面的數據庫里面的USERNAME字段要以以下格式包括這個本地域:tester@cngnu.org。



    ??創建/etc/postfix/mysql-virtual.cf,它提供了本地用戶和郵件轉發功能。FORWARD字段和USERNAME字段值默認是相同的,此時郵件本地遞交到用戶郵箱:USERNAME@mydomain.com里面;FORWARD是另外一個郵件地址或用戶時,郵件轉發到新的地址。此外,由于Postfix對于郵箱區別大小寫,通過virtual功能的重寫,可以保證大小寫的郵件地址都可以正確接收。

    [root@mail postfix]# vi mysql-virtual.cf




    #

    # mysql config file for alias lookups on postfix

    #



    # the user name and password to log into the mysql server

    hosts = localhost

    user = mail

    password = secret



    # the database name on the servers

    dbname = mail



    # the table name

    table = USER



    select_field = FORWARD

    where_field = USERNAME

    additional_conditions = and STATUS = @#1@# limit 1




    ??創建上面指定的/etc/postfix/virtual的DB庫:

    [root@mail postfix]# postmap virtual


    ??保留db格式的virtual庫是為了系統添加一些虛擬域和轉發方便起見。

    7.4. 運行
    ??啟動命令如下:

    [root@mail postfix]# /usr/sbin/postfix start


    7.5. 測試Postfix
    ??啟動Postfix后,首先檢查日志/var/log/messages有無錯誤信息,然后檢查進程,應該有如下進程存在:檢查端口及進程:

    [root@mail postfix]# pstree |grep master



    |-master-+-pickup




    ??接著檢查端口,應該有如下端口打開:

    [root@mail postfix]# netstat -an |grep LISTEN



    tcp??0??0 0.0.0.0:25??0.0.0.0:*??LISTEN




    ??再檢測SMTP服務是否正常:

    [root@mail postfix]# telnet localhost 25

    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is @#^]@#.
    220 mail.cngnu.org ESMTP Postfix
    QUIT
    221 Bye
    Connection closed by foreign host.


    ??使用如下命令測試postfix的SMTP的認證:

    ??PLAIN認證方式:

    [root@mail postfix]# printf @#tester\0000tester\0000testpw@#|mmencode

    dGVzdGVyAHRlc3RlcgB0ZXN0cHc=



    [root@mail postfix]# telnet localhost 25

    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is @#^]@#.
    220 mail.cngnu.org ESMTP Postfix

    EHLO cngnu

    250-mail00.cngnu.org

    250-PIPELINING

    250-SIZE 10240000

    250-VRFY

    250-ETRN

    250-AUTH LOGIN PLAIN

    250-AUTH=LOGIN PLAIN


    250-XVERP

    250 8BITMIME

    AUTH PLAIN dGVzdGVyAHRlc3RlcgB0ZXN0cHc=

    235 Authentication successful

    QUIT

    221 Bye

    Connection closed by foreign host.


    ??LOGIN認證方式:

    [root@mail postfix]# printf @#tester@# |mmencode

    dGVzdGVy

    [root@mail postfix]# printf @#testpw@# |mmencode

    dGVzdHB3



    [root@mail postfix]# telnet localhost 25

    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is @#^]@#.
    220 mail.cngnu.org ESMTP Postfix

    EHLO cngnu

    250-mail.cngnu.org

    250-PIPELINING

    250-SIZE 10240000

    250-VRFY

    250-ETRN

    250-AUTH LOGIN PLAIN

    250-AUTH=LOGIN PLAIN


    250-XVERP

    250 8BITMIME

    AUTH LOGIN

    334 VXNlcm5hbWU6

    dGVzdGVy

    334 UGFzc3dvcmQ6

    dGVzdHB3

    235 Authentication successful

    QUIT

    221 Bye

    Connection closed by foreign host.


    ??此時,由于還沒有安裝Cyrus-IMAP以及創建郵箱,所以還不能提交郵件,請繼續下一步。

    ??這里使用了mmencode來得到MIME-Base64編碼的驗證串。mmencode可以在metamail這個包里面找到。此外,你也可以使用Perl里面的MIME::Base64模塊(需要安裝)來取得這個驗證串:perl -MMIME::Base64 -e @#print base64_encode("tester\0tester\0testpw");@#。

    8. 安裝Cyrus-IMAP
    8.1. 下載
    ??http://asg.web.cmu.edu/cyrus/download/

    [root@mail postfix]# cd /usr/src

    [root@mail src]# wget ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/cyrus-imapd-2.1.12.tar.gz


    8.2. 編譯與安裝
    ??編譯Cyrus-IMAP,并取消kerberos支持(在Redhat中,kerberos庫有問題,很難編譯通過,Mandrake則可以通過;此外,我們也不需要kerberos的支持)和snmp的支持:

    [root@mail src]# tar -zxf cyrus-imapd-2.1.12.tar.gz

    [root@mail src]# cd cyrus-imapd-2.1.12



    [root@mail cyrus-imapd-2.1.12]# ./configure --with-cyrus-prefix=/usr/cyrus \

    > --with-sasl=/usr/local/lib/sasl2 --with-auth=unix \

    > --without-ucdsnmp



    [root@mail cyrus-imapd-2.1.12]# make depend

    [root@mail cyrus-imapd-2.1.12]# make all CFLAGS=-O

    [root@mail cyrus-imapd-2.1.12]# make install


    ??如果編譯時提示沒有找到com_err.h,請復制當前目錄的et目錄下面的com_err.h到/usr/include:

    [root@mail cyrus-imapd-2.1.12]# cp et/com_err.h /usr/include




    ??Cyrus-IMAP的安裝腳本有問題,cyradm(現在使用的是Perl版本,原來的TCL版本不再支持)所需要的perl模塊被安裝到一些不在Perl的@INC的目錄里,需要手工安裝。



    [root@mail cyrus-imapd-2.1.12]# cd perl/imap

    [root@mail imap]# perl Makefile.PL

    [root@mail imap]# make install




    8.3. 配置
    ??創建主配置文件/etc/cyrus.conf:

    [root@mail imap]# cd ../..

    [root@mail cyrus-imapd-2.1.12]# cp master/conf/small.conf /etc/cyrus.conf


    ??添加cyrus-imap的管理賬號cryus,該帳戶不需要設置密碼,通常不會使用它來登錄:

    [root@mail cyrus-imapd-2.1.12]# useradd -g mail -M -s/no/shell cyrus




    ??創建IMAP配置文件/etc/imapd.conf,管理員是cyrus:

    [root@mail cyrus-imapd-2.1.12]# vi /etc/imapd.conf




    configdirectory: /var/imap

    partition-default: /var/spool/imap

    admins: cyrus

    sasl_pwcheck_method: saslauthd


    ??關于imapd.conf可以參閱Cyrus-IMAP的文檔來配置其他可用的參數。



    ??由于Cyrus-IMAP的管理程序cyradm及其模塊在認證管理用戶時會在/etc/sasldb2里面查找認證信息,所以需要單獨創建該文件:

    [root@mail cyrus-imapd-2.1.12]# saslpasswd2 -c cyrus

    Password: cyrus

    Again (for verification): cyrus

    [root@mail cyrus-imapd-2.1.12]# chown -R cyrus /etc/sasldb2




    ??建立Cyrus-IMAP服務器的目錄結構:

    [root@mail cyrus-imapd-2.1.12]# mkdir -p /var/imap/sieve

    [root@mail cyrus-imapd-2.1.12]# mkdir /var/spool/imap



    [root@mail cyrus-imapd-2.1.12]# chown -R cyrus:mail /var/imap

    [root@mail cyrus-imapd-2.1.12]# chown -R cyrus:mail /var/spool/imap



    [root@mail cyrus-imapd-2.1.12]# su -s/bin/bash cyrus

    bash-2.05$ tools/mkimap

    bash-2.05$ exit


    ??這里tools/mkimap這個實用程序在cyrus-imap的源程序目錄里面。



    ??創建日志:

    [root@mail cyrus-imapd-2.1.12]# echo local6.debug /var/log/imapd.log >> /etc/syslog.conf

    [root@mail cyrus-imapd-2.1.12]# echo auth.debug /var/log/auth.log >> /etc/syslog.conf



    [root@mail cyrus-imapd-2.1.12]# /etc/rc.d/init.d/syslog restart


    ??設置郵件限額:

    [root@mail cyrus-imapd-2.1.12]# chattr -R +S /var/imap/user

    [root@mail cyrus-imapd-2.1.12]# chattr -R +S /var/imap/quota

    [root@mail cyrus-imapd-2.1.12]# chattr -R +S /var/spool/imap




    ??由于Cyrus-IMAP的主控進程和Postfix的主控進程名字一樣,容易混淆而且不方便控制,所以將Cyrus-IMAP服務器的主控進程做個別名連接:cyrusd。

    [root@mail cyrus-imapd-2.1.12]# cd /usr/cyrus/bin

    [root@mail bin]# ln -s master cyrusd


    8.4. 運行
    ??啟動命令如下:

    [root@mail bin]# /usr/cyrus/bin/cyrusd&


    8.5. 測試Cyrus-IMAP
    ??啟動Cyrus-IMAP后,首先檢查日志/var/log/messages、/var/log/imapd.log和/var/log/auth.log有無錯誤信息,然后檢查進程,應該有如下進程存在:

    [root@mail bin]# pstree |grep cyrusd



    |-cyrusd


    ??接著檢查端口,應該有如下端口打開:

    [root@mail bin]# netstat -an |grep LISTEN



    tcp??0??0 0.0.0.0:110??0.0.0.0:*??LISTEN

    tcp??0??0 0.0.0.0:143??0.0.0.0:*??LISTEN




    ??現在創建郵箱。

    ??使用cyradm來創建和刪除郵箱,它是Cyrus-IMAP自己帶的交互式管理界面,現在的版本是用Perl寫的。你也可以直接調用Cyrus::IMAP::Admin模塊創建自己的CGI或腳本來做郵箱管理,可以參考Cyrus::IMAP::Shell模塊的程序。

    [root@mail bin]# cyradm --user cyrus localhost

    IMAP Password:

    mail.cngnu.org> cm user.cyrus

    mail.cngnu.org> sq user.cyrus STORAGE 10240000

    mail.cngnu.org> cm user.tester

    mail.cngnu.org> sq user.tester STORAGE 10240000


    mail.cngnu.org> lm

    user.cyrus ????user.tester

    mail.cngnu.org> quit


    ??如果要刪除一個IMAP郵箱,需要先給管理員cyrus授予C(Create)和D(Delete)的權限才可以刪除。

    [root@mail bin]# cyradm --user cyrus localhost

    IMAP Password:

    mail.cngnu.org> cm user.testdel

    mail.cngnu.org> lm

    user.cyrus ????user.tester ????user.testdel

    mail.cngnu.org> sam user.testdel cyrus cd

    mail.cngnu.org> dm user.testdel

    mail.cngnu.org> lm

    user.cyrus ????user.tester


    mail.cngnu.org> quit




    ??再檢測POP3和IMAP服務:

    [root@mail bin]# telnet localhost 110

    +OK mail.cngnu.org Cyrus POP3 v2.1.12 server ready

    USER tester

    +OK Name is a valid mailbox

    PASS testpw

    +OK Maildrop locked and ready

    QUIT

    +OK

    [root@mail bin]# imtest -m login -a tester localhost
    C: C01 CAPABILITY
    S: * OK mail.cngnu.org Cyrus IMAP4 v2.1.12 server ready
    S: * CAPABILITY IMAP4 IMAP4rev1 ACL QUOTA LITERAL+ NAMESPACE UIDPLUS ID NO_ATOMIC_RENAME UNSELECT MULTIAPPEND SORT THREAD=ORDEREDSUBJECT THREAD=REFERENCES IDLE
    S: C01 OK Completed
    Password:
    C: L01 LOGIN tester {6}
    + go ahead
    C: <omitted>
    L01 OK User logged in
    Authenticated.
    Security strength factor: 0
    . logout
    * BYE LOGOUT received
    . OK Completed




    9. 安裝IMP
    9.1. 下載
    ??http://www.php.net/get_download.php?df=php-4.3.1.tar.gz

    ??http://www.horde.org/horde/

    ??http://www.horde.org/imp/3.2.1/

    ??http://www.horde.org/turba/

    [root@mail bin]# cd /usr/src

    [root@mail src]# wget http://www.php.net/distributions/php-4.3.1.tar.gz

    [root@mail src]# wget ftp://ftp.horde.org/pub/horde/horde-2.2.1.tar.gz

    [root@mail src]# wget ftp://ftp.horde.org/pub/pear/pear-1.0.1.tar.gz

    [root@mail src]# wget ftp://ftp.horde.org/pub/imp/imp-3.2.1.tar.gz

    [root@mail src]# wget ftp://ftp.horde.org/pub/turba/turba-1.2.tar.gz




    9.2. 配置Apache與PHP
    ??IMP對PHP的環境要求較高。所以通常需要升級PHP包,并安裝由Horde定制后的PEAR包。編譯新的PHP包前請確認系統中存在Apache(這里使用了Apache 2)以及其它相關的軟件包。

    ??RedHat的httpd-devel包中沒有apache 2用來安裝dso模塊的腳本:instdso.sh,請自行從apache 2.x的發行包中取得,并放入/usr/lib/httpd/build中。

    [root@mail src]# tar zxf php-4.3.1.tar.gz

    [root@mail src]# cd php-4.3.1

    [root@mail php-4.3.1]# ./configure --prefix=/usr --with-config-file-path=/etc \

    > --with-mysql --with-apxs2 \

    > --enable-ftp --enable-magic_quotes --with-xml \


    > --with-gettext --with-imap \

    > --with-imap-ssl --with-kerberos=/usr/kerberos

    [root@mail php-4.3.1]# make

    [root@mail php-4.3.1]# make install

    [root@mail php-4.3.1]# [ -f /etc/php.ini ] && mv /etc/php.ini /etc/php.ini.orig

    [root@mail php-4.3.1]# cp php.ini-dist /etc/php.ini


    ??修改/etc/php.ini,將register_globals功能打開。

    register_globals = On


    ??安裝PEAR包:

    [root@mail php-4.3.1]# cd /usr/lib

    [root@mail lib]# [-d php ] && mv php php.orig

    [root@mail lib]# tar zxf /usr/src/pear-1.0.1.tar.gz

    [root@mail lib]# mv pear php


    ??最后重新啟動Apache:

    [root@mail lib]# /etc/rc.d/init.d/httpd restart


    9.3. 配置Horde
    ??安裝Horde:

    [root@mail lib]# cd /var/www/html

    [root@mail html]# tar zxf /usr/src/horde-2.2.1.tar.gz

    [root@mail html]# mv horde-2.2.1 horde

    [root@mail html]# cd horde/scripts/db



    [root@mail db]# mysql < mysql_create.sql



    [root@mail db]# cd ../../config

    [root@mail config]# for foo in *.dist; do cp $foo `basename $foo .dist`;done


    ??然后修改config目錄下面的horde.php。

    [root@mail config]# vi horde.php


    ??修改148行:

    $conf[@#prefs@#][@#driver@#] = @#none@#;


    ??為:

    $conf[@#prefs@#][@#driver@#] = @#sql@#;


    ??修改157行至162行,將其注釋去掉并寫入horde數據庫的口令:

    // $conf[@#prefs@#][@#params@#][@#phptype@#] = @#mysql@#;
    // $conf[@#prefs@#][@#params@#][@#hostspec@#] = @#localhost@#;
    // $conf[@#prefs@#][@#params@#][@#username@#] = @#horde@#;
    // $conf[@#prefs@#][@#params@#][@#password@#] = @#*****@#;
    // $conf[@#prefs@#][@#params@#][@#database@#] = @#horde@#;
    // $conf[@#prefs@#][@#params@#][@#table@#] = @#horde_prefs@#;



    ??為:

    $conf[@#prefs@#][@#params@#][@#phptype@#] = @#mysql@#;
    $conf[@#prefs@#][@#params@#][@#hostspec@#] = @#localhost@#;
    $conf[@#prefs@#][@#params@#][@#username@#] = @#horde@#;
    $conf[@#prefs@#][@#params@#][@#password@#] = @#horde@#;
    $conf[@#prefs@#][@#params@#][@#database@#] = @#horde@#;
    $conf[@#prefs@#][@#params@#][@#table@#] = @#horde_prefs@#;



    ??這里我們沒有修改horde數據庫的默認的數據庫設置,如果在實際使用中,至少應該取一個比較復雜的密碼。



    ??再來修改config目錄下面的registry.php。

    [root@mail config]# vi registry.php


    ??修改23行至24行,將其注釋去掉:

    // $this->registry[@#auth@#][@#login@#] = @#imp@#;
    // $this->registry[@#auth@#][@#logout@#] = @#imp@#;



    ??為:

    $this->registry[@#auth@#][@#login@#] = @#imp@#;
    $this->registry[@#auth@#][@#logout@#] = @#imp@#;



    ??然后修改109、118行激活IMP和Turba:

    @#status@# => @#inactive@#



    ??為:

    @#status@# => @#active@#



    ??最后在瀏覽器中訪問如下URL測試Horde需要的環境是否滿足:

    http://你的IMP服務器的IP/horde/test.php


    ??如果發現有紅色的提示,可能需要修改你的PHP的安裝和配置(參見上一節),然后再重新測試。

    9.4. 配置IMP
    ??安裝IMP:

    [root@mail config]# cd ..

    [root@mail horde]# tar zxf /usr/src/imp-3.2.1.tar.gz

    [root@mail horde]# mv imp-3.2.1 imp

    [root@mail horde]# cd imp/config

    [root@mail config]# for foo in *.dist; do cp $foo `basename $foo .dist`;done


    ??然后修改config目錄里面的conf.php:

    [root@mail config]# vi conf.php


    ??修改37行:

    $conf[@#menu@#][@#apps@#] = array();


    ??為:

    $conf[@#menu@#][@#apps@#] = array(@#turba@#);


    ??修改57行:

    $conf[@#user@#][@#allow_resume_all@#] = false;


    ??為:

    $conf[@#user@#][@#allow_resume_all@#] = true;


    ??修改63行:

    $conf[@#user@#][@#allow_resume_all_in_drafts@#] = false;


    ??為:

    $conf[@#user@#][@#allow_resume_all_in_drafts@#] = true;




    ??然后修改prefs.php:

    [root@mail config]# vi prefs.php


    ??將自動維護功能關閉,修改424、425行:

    @#value@# => 1,
    @#locked@# => false,



    ??為:

    @#value@# => 0,
    @#locked@# => true,



    ??再注釋773行:

    @#value@# => @#@#,


    ??為:

    //@#value@# => @#@#,


    ??取消注釋774行:

    // @#value@# => @#localsql@#,


    ??為:

    @#value@# => @#localsql@#,




    ??最后修改servers.php:

    [root@mail config]# vi servers.php


    ??注釋除“cyrus”服務器外的所有服務器配置,然后修改“cyrus”服務器的配置為:

    $servers[@#cyrus@#] = array(
    @#name@# => @#Cyrus IMAP Server@#,
    @#server@# => @#localhost@#,
    @#protocol@# => @#imap/notls@#,
    @#port@# => 143,
    @#folders@# => @#@#,
    @#namespace@# => @#INBOX.@#,
    @#maildomain@# => @#cngnu.org@#,
    @#realm@# => @#cngnu.org@#,
    @#preferred@# => @#@#
    );





    9.5. 配置Turba
    ??安裝Turba:

    [root@mail config]# cd ../..

    [root@mail horde]# tar zxf /usr/src/turba-1.2.tar.gz

    [root@mail horde]# mv turba-1.2 turba

    [root@mail horde]# cd turba/config

    [root@mail config]# for foo in *.dist; do cp $foo `basename $foo .dist`;done


    ??然后修改config目錄里面的conf.php:

    [root@mail config]# vi conf.php


    ??修改32行:

    $conf[@#menu@#][@#apps@#] = array();


    ??為:

    $conf[@#menu@#][@#apps@#] = array(@#imp@#);




    9.6. 測試IMP
    ??最后在瀏覽器中訪問如下URL:

    http://你的IMP服務器的IP/horde/


    ??輸入用戶名tester和密碼testpw登錄。

    10. 其他
    10.1. 啟動腳本
    ??可以編寫一個啟動腳本mailsys來啟動這些進程,這樣就不需要單獨啟動postfix和cyrusd了:

    #!/bin/bash
    #
    # mailsys This shell script takes care of starting and stopping
    # Postfix and Cyrus-IMAP.
    # author : xingyu.wang <wxy@cngnu.org> 2003/2/5
    #
    # chkconfig: 2345 80 30
    # description: Postfix is a Mail Transport Agent, which is the program
    # that moves mail from one machine to another.Cyrus-IMAP is a Mail
    # Deliver Agent, which provide POP3 and IMAP4 services for user and
    # deliver mail to local mailbox.
    #
    # processname: mailsys
    # pidfile: /var/run/mailsys.pid
    # Source function library.
    . /etc/rc.d/init.d/functions
    # Source networking configuration.
    . /etc/sysconfig/network

    # Check that networking is up.
    [ ${NETWORKING} = "no" ] && exit 0
    [ -f /usr/sbin/postfix ] || exit 0
    [ -f /usr/cyrus/bin/cyrusd ] || exit 0
    RETVAL=0
    prog="Mail System"

    start() {
      # Start daemons.
      echo -n $"Starting $prog: "
      echo -n $"SASL "
      /usr/local/sbin/saslauthd -a pam
      echo -n $"SMTP "
      /usr/sbin/postfix start > /dev/null 2>&1 &

      echo -n $"POP3 IMAP4 "
      /usr/cyrus/bin/cyrusd > /dev/null 2>&1 &

      RETVAL=$?

      if [ $RETVAL -eq 0 ]; then
        touch /var/lock/subsys/mailsys
        success $"$prog start"
      else
        failure $"$prog start failure"
      fi

      echo
      return $RETVAL
    }

    stop() {
      # Stop daemons.
      echo -n $"Shutting down $prog: "

      echo -n $"SMTP "
      /usr/sbin/postfix stop > /dev/null 2>&1 &

      echo -n $"POP3 IMAP4 "
      killproc cyrusd

      echo -n $"SASL "
      killproc saslauthd

      RETVAL=$?

      if [ $RETVAL -eq 0 ]; then
        rm -f /var/lock/subsys/mailsys
        success $"$prog stop"
      else
        failure $"$prog stop failure"
      fi

      echo
      return $RETVAL
    }

    # See how we were called.
    case "$1" in
      start)
        start
      ;;
      stop)
        stop
      ;;
      restart|reload)
        stop
        start
        RETVAL=$?
      ;;
      *)
        echo $"Usage: $0 {start|stop|restart}"
        exit 1
    esac
    exit $RETVAL




    [root@mail root]# chmod 755 /etc/rc.d/init.d/mailsys

    [root@mail root]# cd /etc/rc3.d

    [root@mail rc3.d]# ln -s ../init.d/mailsys S80mailsys

    [root@mail rc3.d]# rm -rf S80sendmail


    10.2. 整體測試
    ??創建郵箱后,測試發信功能:

    [root@mail root]# mail tester

    Subject: test by me

    this is a test.

    .

    CC:

    [root@mail root]# mailq

    Mail queue is empty

    [root@mail root]# tail /var/log/mail/*




    ??使用mailq來查看郵件隊列是否有錯誤,并查看/var/log/mail/*是否有錯誤信息。如果一切正常,說明信件已經發送到tester了。

    ??測試收信,先測試POP3:

    [root@mail root]# telnet localhost 110

    +OK mail.cngnu.org Cyrus POP3 v2.1.12 server ready

    USER tester

    +OK Name is a valid mailbox

    PASS testpw

    +OK Maildrop locked and ready

    LIST

    1 400

    TOP 1 10

    Return-Path: <root@cngnu.org>
    X-Sieve: cmu-sieve 2.0
    Return-Path: <root@cngnu.org>
    Received: by mail. (Postfix, from userid 0)
    id 5F1EF90005; Mon, 20 May 2002 18:03:43 +0800 (CST)
    To: tester@cngnu.org
    Subject: test by me
    Message-Id: <20020520100343.5F1EF90005@mail00.cngnu.org>
    Date: Mon, 20 May 2002 18:03:43 +0800 (CST)
    From: root@cngnu.org (root)

    this is a test.

    .

    QUIT

    +OK


    ??再測試IMAP:

    [root@mail root]# imtest -m login -a tester localhost
    C: C01 CAPABILITY
    S: * OK mail.cngnu.org Cyrus IMAP4 v2.1.12 server ready
    S: * CAPABILITY IMAP4 IMAP4rev1 ACL QUOTA LITERAL+ NAMESPACE UIDPLUS ID NO_ATOMIC_RENAME UNSELECT MULTIAPPEND SORT THREAD=ORDEREDSUBJECT THREAD=REFERENCES IDLE
    S: C01 OK Completed
    Password:
    C: L01 LOGIN tester {6}
    + go ahead
    C: <omitted>
    L01 OK User logged in
    Authenticated.
    Security strength factor: 0

    . select inbox
    * FLAGS (\Answered \Flagged \Draft \Deleted \Seen)
    * OK [PERMANENTFLAGS (\Answered \Flagged \Draft \Deleted \Seen \*)]
    * 1 EXISTS
    * 1 RECENT
    * OK [UIDVALIDITY 1021736432]
    * OK [UIDNEXT 3]
    . OK [READ-WRITE] Completed

    . fetch 1:1 (FLAGS BODY[HEADER.FIELDS (DATE FROM)])
    * 1 FETCH (FLAGS (\Seen) BODY[HEADER.FIELDS (DATE FROM)] {68}
    Date: Mon, 20 May 2002 09:26:09 +0800 (CST)
    From: wxy@cngnu.org

    )
    . OK Completed
    . logout
    * BYE LOGOUT received
    . OK Completed




    ??最后測試IMP,在瀏覽器中訪問如下URL:

    http://你的IMP服務器的IP/horde/


    ??輸入用戶名tester和密碼testpw登錄。



    ??你也可以使用任何其它的郵件客戶端程序來測試,如kmail、Outlook Express等等。

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>