Open WebMail

Open WebMail 的官方網址是 http://openwebmail.org, 這部機器位於美國 Spring Link 骨幹上的機房, 是由熱心的網友 Daniel Pentecost 還有他的公司 Norvasen 與 Pentecost Inc. 所完全免費提供 , 目前並由網友 Thomas Chung 負責整個網站的運行與維護 . 在發展 Open WebMail 的過程中 , 受到許許多多來自世界各地朋友的幫助 , 實在是感動良多 , 真的讓人有一種世界村 , 天涯若比鄰的感覺 ...

至於 http://turtle.ee.ncku.edu.tw/openwebmail 則是程式發展的中心 , 所有最新的程式碼都是在這裡測試完後才開始對外公佈 , 然後複製 (mirror) 到官方站台及各地的 mirror site.

 

Open WebMail 安裝需求

  • 支援 CGI 的 Web server
  • Perl 5.005 以上 (需有 suid perl 支援)
  • CGI.pm-3.05.tar.gz (必要)
  • MIME-Base64-3.01.tar.gz (必要)
  • Digest-1.08.tar.gz (必要)
  • Digest-MD5-2.33.tar.gz (必要)
  • libnet-1.19.tar.gz (必要)
  • Text-Iconv-1.2.tar.gz (必要)
  • libiconv-1.9.1.tar.gz ( 可選擇 , 多國語言內碼轉換 )
  • CGI-SpeedyCGI-2.22.tar.gz (可選擇, 常駐執行)
  • Compress-Zlib-1.33.tar.gz (可選擇, 網頁壓縮)
  • ispell-3.1.20.tar.gz (可選擇, 拼字檢查)
  • Quota-1.4.10.tar.gz (可選擇, Quota control)
  • Authen-PAM-0.14.tar.gz (可選擇, 外掛式認證)
  • ImageMagick-5.5.3.tar.gz (可選擇, 縮圖製作)
  • tnef-1.2.3.1.tar.gz (可選擇, MS-Tnef 支援)
  • antiword-0.35.tar.gz (可選擇, MSWord 檔預覽)
  • openssl-0.9.7d.tar.gz (可選擇, POP3 的 SSL 支援, 若系統有 libssl 則不需要)
  • Net_SSLeay.pm-1.25.tar.gz (可選擇, POP3 的 SSL 支援)
  • IO-Socket-SSL-0.96.tar.gz (可選擇, POP3 的 SSL 支援)
  • clamav-0.70.tar.gz (可選擇, 病毒信掃描)
  • Mail-SpamAssassin-2.63.tar.gz (可選擇, 垃圾信判讀/學習)

以上的套件, 一般來說是透過 source 安裝, 但如果您用的是 RedHat Linux, 那也有 rpm 可以快速安裝

 

安裝套件 (由 source 安裝)

首先請先到 http://turtle.ee.ncku.edu.tw/openwebmail/download/packages/ 下載上述的各個套件

安裝 CGI.pm 套件

cd /tmp
tar -zxvf CGI.pm-3.05.tar.gz
cd CGI.pm-3.05
perl Makefile.PL
make
make install

: 可能您原本的機器上就已經安裝了 CGI.pm 這個套件 , 不過由於有使用者回報 Open WebMail 如果使用太舊的 CGI.pm 版本 , 會在上傳附件時 , 發生當住的情形 , 所以我們建議您安裝 2.74 以後或是更信的版本 . 檢查 CGI.pm 版本的方式如下 ;

perl -MCGI -e 'print $CGI::VERSION'


安裝 MIME-Base64 套件

cd /tmp
tar -zxvf MIME-Base64-3.01.tar.gz
cd MIME-Base64-3.01
perl Makefile.PL
make
make install

; 雖然您的機器可能已經安裝了 MIME-Base64 這個套件 , 還是建議您從 source 重新裝一次 . 這樣做的話 , 可以確定 MIME-Base64 中的 XS 支援有被啟動 , 可以大幅地增加處理 MIME 附件編碼與解碼的速度


安裝 libnet 套件

cd /tmp
tar -zxvf libnet-1.19.tar.gz
cd libnet-1.19
perl Makefile.PL (ans 'no' if asked to update configuration)
make
make install

安裝 Text-Iconv-1.2 套件 (自 openwebmail 1.80起)

openwemail 自 1.80 版以後開始支援多國的字集轉換功能(如: 中文的簡繁轉換, 日文的 Shif-JIS/ISO-2022-JP/EUC-JP 轉換, 或是各種字集對 Unicode (UTF-8) 的轉換), 這個轉換的動作是透過 Text-Icon 套件來完成的. 而由於 Text-Iconv 事實上只是提供對系統 iconv() 相關函式 的一個 perl 介面, 所有首先要確認系統上是否支援 iconv() 相關函式, 方法如下

man iconv

如果下完命令後沒有出現相關的 manpage 說明文件 , 表示系統可能不支援 iconv() 相關函式 , 不過別擔心 , 我們可以透過安裝 libiconv 這個套件來替系統加上對 iconv() 的支援

cd /tmp
tar -zxvf libiconv-1.9.1.tar.gz
cd libiconv-1.9.1
./configure
make
make install

現在再試一次 'man iconv' 確認 libiconv 已經被成功的安裝到系統之中

接下來就可以開始安裝 Text-Iconv 這個套件了

cd /tmp
tar -zxvf Text-Iconv-1.2.tar.gz
cd Text-Iconv-1.2
perl Makefile.PL

註: 如果您用的是 FreeBSD, 或是您剛才用手動安裝 libiconv-1.9.1.tar.gz 這個套件, 請在執行 perl Makefile.PL 之前, 先修改 Makefile.PL 檔案, 將 LIBS 和 INC 這兩行設定如下

'LIBS' => ['-L/usr/local/lib -liconv'], # e.g., '-lm'
'INC' => '-I/usr/local/include', # e.g., '-I/usr/include/other'

make
make test

註: 如果 make test 失敗, 代表您的 OS 不支援 iconv() 這個功能或是 Makefile.PL 中的 LIB, INC 設定有誤. 您可以將 misc/patches/iconv.pl.fake 拷貝到 iconv.pl 這個檔案上, 讓 openwebmail 不透過 iconv 進行字集轉換. 這樣簡/繁轉換 功能會還在, 但是會喪失如 自動轉換 UTF-8 格式信件的功能.

make install

 

安裝套件 (由 rpm 安裝)

如果您用的是 RedHat Linux, 那麼您可以透過 rpm 快速安裝, 下載 rpm 的網址在 http://turtle.ee.ncku.edu.tw/openwebmail/download/redhat/rpm/packages/

  1. 首先是安裝 CGI, MIME-Base64 和 libnet 這三個套件

wget http://turtle.ee.ncku.edu.tw/openwebmail/download/redhat/rpm/packages/rh73/perl-CGI-2.752-34.99.6.i386.rpm
rpm -Uvh --force perl-CGI-2.752-34.99.6.i386.rpm

wget http://turtle.ee.ncku.edu.tw/openwebmail/download/redhat/rpm/packages/rh73/perl-MIME-Base64-2.12-14.i386.rpm
rpm -Uvh --force perl-MIME-Base64-2.12-14.i386.rpm

wget http://turtle.ee.ncku.edu.tw/openwebmail/download/redhat/rpm/packages/rh73/perl-libnet-1.0901-17.i386.rpm
rpm -Uvh --force perl-libnet-1.0901-17.i386.rpm

註: 您可以透過 rpm -qa | grep -i keyword 的方式來查詢系統上是否已安裝某特定套件
註: 如果想要讓 wget 透過 proxy 去抓資料的話, 請在使用 wget 前先執行下列命令

export http_proxy=http://your_proxy_server:3128 (for bash)
setenv http_proxy http://your_proxy_server:3128 (for csh/tcsh)

  1. 接著檢查您的系統是否有裝 suidperl 套件

    rpm -q -a|grep -i suidperl

    如果您的 7.3 系統沒有裝 suidperl 的話, 請

    wget http://turtle.ee.ncku.edu.tw/openwebmail/download/redhat/rpm/packages/rh73/perl-suidperl-5.6.1-34.99.6.i386.rpm
    rpm -Uvh --force perl-suidperl-5.6.1-34.99.6.i386.rpm

    如果您的 8.x 系統沒有裝 suidperl 的話, 請

    wget http://turtle.ee.ncku.edu.tw/openwebmail/download/redhat/rpm/packages/rh80/perl-suidperl-5.8.0-55.i386.rpm
    rpm -Uvh --force perl-suidperl-5.8.0-55.i386.rpm


如果您的 9.x 系統沒有裝 suidperl 的話, 請

wget http://turtle.ee.ncku.edu.tw/openwebmail/download/redhat/rpm/packages/rh9/perl-suidperl-5.8.0-88.i386.rpm
rpm -Uvh --force perl-suidperl-5.8.0-88.i386.rpm

  1. 接著是檢查您的系統是否有裝 Texi-Iconv 套件

    rpm -q -a|grep -i iconv

    如果您的 7.3 系統沒有裝 Text-Iconv 的話, 請

    wget http://turtle.ee.ncku.edu.tw/openwebmail/download/redhat/rpm/packages/rh73/perl-Text-Iconv-1.2-RH73.i386.rpm
    rpm -Uvh --force perl-Text-Iconv-1.2-RH73.i386.rpm

    如果您的 8.x 系統沒有裝 Text-Iconv 的話, 請

    wget http://turtle.ee.ncku.edu.tw/openwebmail/download/redhat/rpm/packages/rh80/perl-Text-Iconv-1.2-RH80.i386.rpm
    rpm -Uvh --force perl-Text-Iconv-1.2-RH80.i386.rpm

    如果您的 9.x 系統沒有裝 Text-Iconv 的話, 請

    wget http://turtle.ee.ncku.edu.tw/openwebmail/download/redhat/rpm/packages/rh9/perl-Text-Iconv-1.2-RH80.i386.rpm
    rpm -Uvh --force perl-Text-Iconv-1.2-RH80.i386.rpm

安裝 Open WebMail

http://turtle.ee.ncku.edu.tw/openwebmail/download/release/ 下可以下載 Open WebMail 的各個 Release (openwebmail-x.yy.tar.gz), 這是屬於經過測試後, 功能較為穩定的版本. 而在 http://turtle.ee.ncku.edu.tw/openwebmail/download/current/ 下的 openwebmail-current.tar.gz 則是含有最新功能或修正, 但是沒有經過詳細的測試的程式碼. 至於 http://turtle.ee.ncku.edu.tw/openwebmail/download/snapshot/ 是擺放 current 的每日快照版本, 主要是為了方便追蹤每天程式碼變動的 current 的快照版本

如果您的作業系統是 FreeBSD, 而且您的 apache 是透過 pkg_add 方式安裝

恭喜您 , 您的作業環境和 Open WebMail 發展小組是一樣的 , 所以安裝手續非常的簡單

  1. chmod 4555 /usr/bin/suidperl
  2. cd /usr/local/www
    tar -zxvBpf openwebmail-X.XX.tar.gz
  3. /usr/local/www/cgi-bin/openwebmail/openwebmail-tool.pl --init


註: 透過FreeBSD 本身的 PORTS, 可以很方便地安裝 Open WebMail,

cd /usr/ports/mail/openwebmail
make install clean

如果您的作業系統是 Linux RedHat 7.x/8.x/9.x, 而您想自己從 source 安裝的話

  1. cd /var/www
    tar -zxvBpf openwebmail-X.XX.tar.gz
    mv data/openwebmail html/
    rmdir data
  2. cd /var/www/cgi-bin/openwebmail
    修改 etc/auth_unix.conf (由 etc/defaults/auth_unix.conf copy 過來改)
    1. passwdfile_encrypted 設成 /etc/shadow
    2. passwdmkdb 設成 none
  3. 修改 etc/openwebmail.conf
    1. mailspooldir 設成 /var/spool/mail
    2. ow_htmldir 設成 /var/www/html/openwebmail
      將 ow_cgidir 設成 /var/www/cgi-bin/openwebmail
    3. spellcheck 設成 /usr/bin/ispell
  4. /var/www/cgi-bin/openwebmail/openwebmail-tool.pl --init
  5. 將下列文字加到 /etc/logrotate.d/syslog 讓系統定期砍掉過去的 log
    /var/log/openwebmail.log {
    postrotate
    /usr/bin/killall -HUP syslogd
    endscript
    }

: 如果您的作業系統是Linux RedHat 6.2(CLE 0.9), 請用 /home/httpd 取代上述的 /var/www

: 如果您的 Linux 是 Redhat, 建議參考由 Emir Litric 所寫的 RedHat-README.txt

如果您的作業系統是 Linux RedHat 7.x/8.x/9.x, 而您想快速安裝的話,

您可以利用由 Thomas Chung 所準備的 redhat

  1. 安裝 Open WebMail 的 released rpm,
    請到 http://turtle.ee.ncku.edu.tw/openwebmail/download/redhat/rpm/release/ 找出版本最新的 released rpm

    wget http://turtle.ee.ncku.edu.tw/openwebmail/download/redhat/rpm/release/openwebmail-2.10-1.i386.rpm
    rpm -Uvh openwebmail-2.10-1.i386.rpm

    如果您想要安裝最新的 current rpm (比 released rpm 新, 但是可能有 bug),
    請到 http://turtle.ee.ncku.edu.tw/openwebmail/download/redhat/rpm/daily-build/ 找出日期最新的 current rpm

    wget http://turtle.ee.ncku.edu.tw/openwebmail/download/redhat/rpm/daily-build/openwebmail-2.10-20031002.i386.rpm
    rpm -Uvh openwebmail-2.10-20031002.i386.rpm
  2. /var/www/cgi-bin/openwebmail/openwebmail-tool.pl --init

如果您的作業系統是其他的 Unix, 配合 Apache

  1. 首先找到您的 Apache data 和 cgi-bin 目錄的父目錄,
    以下我們以 /usr/local/apache/share 作例子,
    並假設 openwebmail-x.yy.tar.gz 放在 /tmp
  2. cd /usr/local/apache/share
    tar -zxvBpf openwebmail-x.yy.tar.gz
    mv data/openwebmail htdocs/
    rmdir data
  3. cd /usr/local/apache/share/cgi-bin/openwebmail/
    修改 etc/openwebmail.conf
    1. mailspooldir 設成 您系統中的 mail spool, 一般是 /var/mail 或是 /var/spool/mail
    2. ow_htmldir 設成 /usr/local/apache/share/htdocs
      將 ow_cgidir 設成 /usr/local/apache/share/cgi-bin
  4. 修改 etc/auth_unix.conf (由 etc/defaults/auth_unix.conf copy 過來改)
    1. passwdfile_encrypted 設成 '/etc/shadow'
    2. passwdmkdb 設成 'none'

: 各 Unix 平台改法不見得相同, 請參考 defaults/auth_unix.conf 中的說明, 以便得知確切的改法

  1. cd /usr/local/apache/share/cgi-bin/openwebmail

    修改所有 openwebmail*.pl 的 perl script, 包括

    openwebmail.pl, openwebmail-main.pl,
    openwebmail-read.pl, openwebmail-viewatt.pl,
    openwebmail-send.pl, openwebmail-spell.pl,
    openwebmail-prefs.pl, openwebmail-folder.pl,
    openwebmail-abook.pl, openwebmail-advsearch.pl,
    openwebmail-cal.pl and openwebmail-tool.pl

script 中第一行 #!/usr/bin/suidperl 改成 !您的 suidperl 所在的路徑

  1. 檢查您的 suidperl 程式的 mode, 看看是否是 r-sr-xr-x, 如果不是的話

    chmod 4555 /usr/local/bin/suidperl
  2. /usr/local/apache/share/cgi-bin/openwebmail/openwebmail-tool.pl --init


註: 如果您是在 Solaris 上安裝 Open WebMail, 請記得建立 /etc/openwebmail_path.conf 這個檔案.
然後在其中放入您 openwebmail CGI 所在的路徑

如果 openwebmail.pl 位於

/usr/local/apache/share/cgi-bin/openwebmail/openwebmail.pl

那麼 /etc/openwebmail_path.conf 應該如下:

/usr/local/apache/share/cgi-bin/openwebmail

註: 如果您用的是 Apache 2.0 以後的版本, 請在 apache 的設定檔 httpd.conf 中, 將

AddDefaultCharset ISO-8859-1

改成

AddDefaultCharset off

 

設定 Open WebMail 系統

cgi-bin/openwebmail/etc 可以發現有 defaults/openwebmail.conf, openwebmail.conf.help 和 openwebmail.conf 這三個檔, 其中

defaults/openwebmail.conf - 內定的 Open WebMail 設定檔, 包含所有可以設定的選項
openwebmail.conf.help - defaults/openwebmail.conf 所有選項的說明檔
openwebmail.conf - 主要的設定檔, 管理者要設定的選項, 應該都寫在這個檔案裡頭, 而不應該直接去改 defaults/openwebmail.conf

openwebmail.conf 的內容

# Open WebMail configuration file
#
# This file contains just the overrides from defaults/openwebmail.conf
# please make all changes to this file.
#
# This file sets options for all domains and all users.
# To set options on per domain basis, please put them in sites.conf/domainname
# To set options on per user basis, please put them in users.conf/username
#
domainnames auto
auth_module auth_unix.pl
mailspooldir /var/mail
ow_cgidir /usr/local/www/cgi-bin/openwebmail
ow_cgiurl /cgi-bin/openwebmail
ow_htmldir /usr/local/www/data/openwebmail
ow_htmlurl /openwebmail
logfile /var/log/openwebmail.log
spellcheck /usr/local/bin/ispell

enable_viruscheck no
enable_spamcheck no
enable_learnspam no

default_language en

smtp

<default_signature>
--
Open WebMail Project (http://openwebmail.org)
</default_signature>

以上的內容可能隨著您系統而有所不同 , 不過在您完成前述的安裝後 , 您可以修改以下幾個選項

domainnames

一般情況下, openwebmail 應該能正確地判斷出您 server 的 domainname, 進而正確地設定使用者的預設 Email address, 但如果發生 openwebmail 判斷錯誤或是您希望設定成其他的 domainname, 你可以將這個選項由 auto 改成您所要的 domainname, 如 mail.myserver.com.tw

spellcheck

設定拼字檢查程式所在的路徑, 一般而言, 可能是以下其中之一, 您可以用 ls -l filename 方式檢查看看

/usr/bin/apsell
/usr/bin/ispell
/usr/local/bin/aspell
/usr/local/bin/ispell

enable_viruscheck

是否呼叫外部程式進行病毒掃描, 預設是 no, 這個功能需要在系統上先安裝 ClamAV 這套軟體

enable_spamcheck

是否呼叫外部程式進行垃圾信判讀, 預設是 no, 這個功能需要在系統上先安裝 SpamAssassin 這套軟體

enable_learnspam

是否呼叫外部程式進行垃圾信學習, 預設是 no, 通常這個功能與 enable_spamcheck 要互相配合, 因為學習所得到資料庫將會在 spamcheck 進行垃圾信判讀時被參考

default_language

內定的語言, 我們把它由 en(英文) 改成 zh_TW.Big5 (繁體中文)

: 自 2.0 版 20030416 以後, 已經不需要在 openwebmail.conf 中設定 default_language 這個選項了, openwebmail 會根據使用者所用的瀏覽器設定, 自動選擇適合的內定的語言

default_signature

設定預設的簽名檔 , 設在這裡的值會成為每個新使用者的預設簽名檔 , 不過使用時每個使用者可以依自己的需求 , 設定成其他的內容

 

初始化 Open WebMail

在前面的安裝步驟裡頭, 最後一個步驟是

cd the_direcotry_of_openwebmail_cgi_scripts
./openwebmail-tool.pl --init

這個動作會建立一些 Open WebMail 在執行時會用到的對應表 , 如簡繁轉換 , 陰陽曆轉換等 . 如果這個動作沒有做的話 , 使用者將無法透過 Web 介面使用 Open WebMail

而由於在各種不同作業系統上的 perl 版本的差異 , 其所使用的 dbm 種類也不盡相同 , 有的可能需要特殊的設定後才能使用 , --init 在建立上述對應表之前 , 會測試系統上 perl dbm 種類 , 並且提供一些必要的建議事項

  1. 首先會檢查 etc/dbm.conf 中的 dbm_ext, dbmopen_ext 和 dbmopen_haslock 三個選項的設定是否正確, 如果設定有誤的話, 您會看到如下的畫面

    Please change the following 3 options in etc/dbm.conf

    from

    dbm_ext .db
    dbmopen_ext none
    dbmopen_haslock no


    to

    dbm_ext .db
    dbmopen_ext %dbm_ext%
    dbmopen_haslock yes


    管理者可以將 etc/defaults/dbm.conf copy 成 dbm.conf, 然後將正確的 dbm 設定值, 寫到 etc/dbm.conf 中
  2. 其次是檢查系統上的 dbm 是否內定使用 DB_File.pm 這個模組, 如果是而且有需要的話, 會建議您對 DB_File.pm 作一些必要的修改 (這個修改是由 DB_File.pm 作者所提供的), 您會看到如下畫面

    Please modify /usr/libdata/perl/5.00503/mach/DB_File.pm by adding

$arg[3] = 0666 unless defined $arg[3];

before the following text (about line 247)

# make recno in Berkeley DB version 2 work like recno in version 1

請務必依照以上的建議作修改, 否則您的 Open WebMail 可能會無法完全正常動作, 也請記得在做完修改之後, 別忘了重新執行一次 './openwebmail-tool.pl --init'

 

測試 Open WebMail

在完成上面的步驟後, 您可以連線到

http://your_server_hostname/cgi-bin/openwebmail/openwebmail.pl

並且登入看看是否一切正常

Sendmail.cf 的修改

為了安全的考量, 某些系統上的 sendmail.cf 內定只聽在 127.0.0.1 這個 IP, 所以 sendmail 只接受 local 的連線 (即 local 的程式可以送信出去), 但是卻無法接收 remote 端的連線(即無法接受 remote 送來的信件). 如果您的機器發生這樣的情形, 解決步驟如下:

  1. 開啟 sendmail.cf, 找到 下列部分

    # SMTP daemon options
    O DaemonPortOptions=Port=smtp,Addr=127.0.0.1, Name=MTA
  2. 127.0.0.1 改成 0.0.0.0 讓 sendmail 聽在這部機器所有的 IP 上.

    # SMTP daemon options
    O DaemonPortOptions=Port=smtp,Addr=0.0.0.0, Name=MTA
  3. kill -1 pid_of_sendmail

 

Open WebMail 成為 Server 預設的網頁

建立一個 index.html 檔案, 內容如下 a 或 b 皆可

a.
<html><head>
<meta http-equiv="Refresh"
content="0;URL=http://your_server/cgi-bin/openwebmail/openwebmail.pl">
</head></html>

b.
<html>
<body onload=
"window.open('http://your_server/cgi-bin/openwebmail/openwebmail.pl','_top')">
</body>
</html>


然後將 index.html 拷貝到 http server 的 document root,

ps: 以 FreeBSD 來說, 會在 /usr/local/www/data, 以 Linux/RedHat 來說, 會在 /var/www/html

 

預設使用中文圖示

Open WebMail 內建有許多套的圖示 (iconset), 不過預設用的是不含中文的 Default iconset. 目前含有中文的 iconset 有 Default.Chinese.Triditional, Cool3D.Chinese.Traditional 和 Cool3D.Chinese.Simplified 這三套.

例如要預設使用 Cool3D.Chinese.Traditional iconset 的話, 請在 openwebmail.conf 加上下面這行

default_iconset Cool3D.Chinese.Traditional

 

關於病毒郵件

有越來越多的病毒都是透過電子郵件進行感染與散佈 , 基本上都是

  1. 使用者收到一封含有電腦病毒附件的電子郵件
  2. 使用者基於好其打開病毒附件 , 或是郵件經過設計 , 一開啟郵件就連帶自動開啟病毒附件
  3. 附件是病毒檔 , 對郵件系統進行感染
  4. 以這個使用者的郵件系統為基地 , 透過其通訊錄或看過的網頁尋找下一個收件人 , 寄出病毒郵件給他們

如果使用者用的是 WebMail, 上述的第 4 點是不會發生的 , 因為 WebMail 本身系統並不在使用者的電腦上 , 但是仍有可能發生 2, 3 的情形 . 在目前使用者多有警覺心的情況下 , 大部分病毒都設計成不需要經由使用者點選附件 , 只要開啟郵件就會發生中毒的情形 . Open WebMail 針對此點特別設計 , 凡是這類的病毒附件被下載時都會被改名為 .txt 檔案避免附件被系統執行 .

 

關於郵件過濾

雖然說用 openwebmail 看信不必擔心中毒的問題 , 但是如果信箱總是有一堆垃圾信 / 病毒信的話 , 看起來還是很煩的 . openwebmail 除了靜態的郵件規則外 , 另外有四組動態的過濾器可以用來過濾垃圾信或是病毒信件

過濾寄件人地址格式不正確的信件: (badformatfrom filter)

這個 filter 會檢查信件的發信人地址的格式是否使用不正確的格式 , 可以用來過濾部份的垃圾信 ( 不過極少數時候會將正常的信件也過濾到垃圾筒 )

過濾偽造來源端的信件: (fakedsmtp filter)

這個 filter 會檢查信件的發信主機 (SMTP server) 是否試圖在隱藏或偽造他的名字 , 如果是的話就將信件移到垃圾桶 , 這個 filter 可以用來過濾大部份的垃圾信 ( 不過少數時候會將正常的信件也過濾到垃圾筒 )

過濾偽造寄件人地址的信件: (fakedfrom filter)

每封 Email 在發送的時候 , 會像真實世界的郵件一樣 , 有所謂的信封與信件本身兩個部分 . 這個 filter 會檢查信封的發信人與信件的發信人是否有不合的情形 , 如果就將信件移到垃圾桶 . 許多的垃圾信與病毒產生的郵件都是屬於這類

過濾偽造 EXE 附件型態的信件: (fakedexecontenttype filter)

電子郵件病毒原本只有在使用者打開信件中屬於可執行檔的附件時,才會感染病毒。 但是新近出現的一些電子郵件病毒卻能作到只要使用者開啟這封郵件就會中毒,讓使用者聞毒色變 . 這個 filter 會過濾這類的信件 , 將其移到垃圾桶 .

四個 filter 在 defaults/openwebmail.conf 中內定是關閉的, 分別是

default_filter_badformatfrom no
default_filter_fakedsmtp no
default_filter_fakedfrom no
default_filter_fakedexecontenttype no

管理者如果要將其設定成預設是開啟的話 , 請將上述的 no 改成 yes, 加到 openwebmail.conf , 這樣對於新的使用者 filter 內定就會是開啟的狀態 , 不過使用者仍可以分別在自己的 個人偏好設定中作不同的設定

: 建議 default_filter_fakedexecontenttype 一定要開, 可以過濾掉大部分的郵件病毒

: 論文 owmfilter.pdf, 投影片 owmfilter-slide.pdf

 

呼叫外部程式掃描病毒信 (viruscheck)

Open WebMail 可以透過呼叫外部程式的方式來掃描信件中是否含有病毒, 掃描的對象可以是單指由 POP3 server 抓回來的信件, 或是包含所有在新信匣中出現的新信件. 要啟動這個功能, 必須

  1. 安裝 ClamAV (http://www.clamav.net) 這套掃毒軟體 , 並且確定 ClamAV 中的掃毒引擎 clamd 已經正確地啟動
  2. openwebmail.conf 中, 確認 viruscheck_pipe 這個選項中, clamdscan (ClamAV 的 client 程式) 的路徑是正確的
  3. openwebmail.conf 中, 將 viruscheck_source_allowed 設成 pop3 或者是 all
    設成 pop3 的話, openwebmail 只會對由 pop3 抓回來的信件進行掃毒動作, 這個適合用在 mail 系統本身已經有加裝掃毒軟體的情形
    設成 all 的話, openwebmail 會掃描所有在新信匣中出現的新郵件, 這個適合用在 mail 系統本身沒有外掛防毒軟體的情形
  4. openwebmail.conf 中, 將 enable_viruscheck 設成 yes
  5. defaults/openwebmail.conf 中, 還有一些與 viruscheck 相關的選項, 可以參考 openwebmail.conf.help 設定

 

呼叫外部程式判讀廣告信 (spamcheck)

Open WebMail 可以透過呼叫外部程式的方式來判讀信件是否為廣告信, 判讀的對象可以是單指由 POP3 server 抓回來的信件, 或是包含所有在新信匣中出現的新信件. 要啟動這個功能, 必須

  1. 安裝 SpamAssassin (http://www.spamassassin.org) 這套廣告信判讀軟體 , 並且確定 Spamassassin 中的判讀引擎 spamd 已經正確地啟動

    : 請特別注意 spamd 在啟動時 , 一定要加上 --local 或是 -L 這項參數 , Spamassassin 在判讀信件時 , 不要連線到網路上去抓取資料 , 否則判讀單封信件的時間會變得久許多
  2. openwebmail.conf 中, 確認 spamcheck_pipe 這個選項中, spamc(SpamAssassin 的 client 程式) 的路徑是正確的
  3. openwebmail.conf 中, 將 spamcheck_source_allowed 設成 pop3 或者是 all
    設成 pop3 的話, openwebmail 只會對由 pop3 抓回來的信件進行判讀動作, 這個適合用在 mail 系統本身已經有加裝廣告判讀軟體的情形
    設成 all 的話, openwebmail 會判讀所有在新信匣中出現的新郵件, 這個適合用在 mail 系統本身沒有外掛廣告判讀軟體, 或是使用者希望 針對個人喜好再度進行廣告信判讀的情形.
    ( 這邊的個人喜好 , 需要讓系統透過 learnspam 這個選項配合學習 )
  4. openwebmail.conf 中, 將 enable_spamcheck 設成 yes
  5. defaults/openwebmail.conf 中, 還有一些與 spamcheck 相關的選項, 可以參考 openwebmail.conf.help 設定

: Open WebMail 是如何, 以及在何時呼叫外部程式進行信件掃描或判讀呢?

對於由 POP3 server 抓回來的信件 , 在由遠端抓回每單封信後 , 就會呼叫外部程式來掃毒或是判讀 , 這邊的抓取和掃瞄等動作 , 都是在背景執行 , 而出現在新信匣中的其他新信件 , 則是當使用者點選要瀏覽新信匣時會啟動一個背景掃瞄的行程 , 掃描新信匣中的信件 .

在 使用者個人設定中的 " 等待 信件背景過濾 時間 " 可以用來設定在讀取新信匣時 , 要等待背景過濾多長的時間後 , 才將結果回傳給使用者 , 預設值是 10 , 這個值如果設得太小 , 可能會發生廣告信 / 病毒信沒能在使用者讀取前被過濾的情形 .

設計 VirusCheck /SpamCheck 的目的, 主要是為了解決由 Open WebMail 由外部 POP3 收回的信件, 不會經由 MTA(sendmail/postfix) 或 MDA (procmail) 附掛的掃描程式檢查的這個問題, 雖然 Open WebMail 也可以用來掃描 POP3 以外的信件, 不過我們建議可能的話, 還是在 MTA/MDA 裝上掃描程式, 效能會比較好. 而且在使用者不是使用 Open WebMail 存取信件時, 也一樣有掃描的效果.

 

呼叫外部程式學習廣告信與正常信

Open WebMail 可以透過呼叫外部程式的方式來學習信件是廣告信或是正常信 , 這個功能通常是配合廣告信判讀運作 , 當判讀失誤時 , 我們可以透過糾正誤差 , 以便在下次碰上類似信件 , 不會再發生判讀錯誤的情形 . 要啟動這個功能 , 必須

  1. 安裝 SpamAssassin (http://www.spamassassin.org) 這套廣告信判讀軟體
  2. openwebmail.conf 中, 確認 learnspam_pipe 和 learnham_pipe 這個兩個選項中, sa-learn 的路徑是正確的
  3. openwebmail.conf 中, 將 enable_learnspam 設成 yes

: 學習的結果會被存在各 user home 目錄下的 .spamassassin 中, 而這個學習的結果, 一定要被廣告信過濾程式所參考才有意義. 像是 local deliver 被設定成會呼叫 spamassassin 進行信件掃描, 或是在 Open WebMail 中啟動 spamcheck 功

: Open WebMail 在 2.32 20040707 以後, 才開始支援 viruscheck, spamcheck 和 learnspam 相關功能

 

QUOTA 相關設定

所謂 QUOTA 就是指使用者所能使用的磁碟空間. 在 Open WebMail 中, 電子郵件, 行事曆, 網路硬碟等等, 所使用的磁碟空間適合併計算的. defaults/openwebmail.conf 中與 QUOTA 相關的項目一共有五個, 你可以在 openwebmail.conf 重新設定這些選項

quota_module

這是用來設定要使用哪個 quota 模組, 目前有 quota_unixfs.pl 和 quota_du.pl 這兩個模組.
其中 quota_unixfs.pl 會透過 UNIX 檔案系統的 Quota 系統得知使用者目前的空間使用量 , 效能較好 , 不過只能適用在 openwebmail 使用者也是 unix 帳號的情形下 . quota_du.pl 則是透過執行 du 這個程式來取得使用者的空間使用情形 , 效能較差 , 但是可以適用在非 unix 帳號的虛擬使用者

; 如果要使用 quota_unixfs.pl 模組, 要先安裝 Quota-1.4.10.tar.gz

quota_limit

設定使用者能使用的空間上限. 單位 Kbyte. 這個設定只有在 quota_module 不傳回使用者 quota 上限時(如 quota_du.pl) 才會被使用

quota_threshold

一般情形下, 使用者的空間使用狀況會顯示在視窗的外框上緣. 但是當使用者空間用量超過其上限的 quota_threshold% 時, 會有一個較明顯的 quota 使用量顯示在頁面的上方以提醒使用者

delmail_ifquotahit

用來設定 當使用者空間已滿時 , 是否自動刪除 各信匣中 過舊的郵件以取得一些空間

delfile_ifquotahit

用來設定 當使用者空間已滿時 , 是否自動刪除 網路硬碟中 過舊的檔案以取得一些空間

: 以上選項都是用來控制使用者在其個人目錄下的空間用量, 如果要限制使用指在 spool 所能用的空間, 請參考 opewebmail.conf.help 中 spool_limit 的說明

: 啟動 quota 後, 可能會因為使用者空間已滿, 導致 openwebmail 無法建立或更新使用者信件匣索引資料庫, 造成 "Software error: ndbm store returned -1, errno XX, ..." 之類的錯誤, 進而發生使用者無法登入 openwebmail 的問題
要避免這個問題, 可以在 openwebmail.conf 中將 use_syshomedir_for_dotdir 選項 設為 no, 讓原本在使用者 home 目錄下的 .openwebmail 改放到 ow_userdir 選項 所指定的目錄下, 接著只要 ow_userdir 這個目錄所在的 partition 沒有設定 quota, 就可以避免前述問題.

 

命令列工具 openwebmail-tool.pl

  1. 由於 Open WebMail 的 filter 是在使用者透過 Open WebMail 讀信後才開始動作, 所以可能會發生使用者透過 finger 去檢查說有新信, 但是進入 WebMail 後卻一封也沒有, 因為全部是垃圾或病毒信. openwebmail-tool.pl 可以被當作是 finger 的替代品, 他會在做完信件過濾還才開始回報信箱的狀態.

    部分系統的 fingerd 允許管理者透過 -p 參數指定一支外部程式來作信件狀態的檢查, 這時候可以拿 openwebmail-tool.pl 作為信箱檢查程式

    以 FreeBSD 為例, 修改 /etc/inetd.conf

    #finger stream tcp nowait/3/10 nobody /usr/libexec/fingerd fingerd -s

    改成

    finger stream tcp nowait/3/10 nobody /usr/libexec/fingerd fingerd -s -p /usr/local/www/cgi-bin/openwebmail/openwebmail-tool.pl

Linux 為例, 修改 /etc/xinetd.d/finger

service finger
{
socket_type = stream
wait = no
user = nobody
server = /usr/sbin/in.fingerd
disable = yes
}

改成

service finger
{
socket_type = stream
wait = no
user = nobody
server = /usr/sbin/in.fingerd
server_args = -p /var/www/cgi-bin/openwebmail/openwebmail-tool.pl
}

  1. openwebmail-tool.pl 也可以被用在定期幫使用者作信件匣 index 檢查或是抓 POP3 外部信件, 只要在 crontab 中加入

    59 5 * * * /usr/local/www/cgi-bin/openwebmail/openwebmail-tool.pl -q -a -p -i

    會在每天早上 5:59 檢查所有使用的的信件匣 index, 並且替使用者抓外部信件
  2. 如果您希望使用行事曆中的外部 Email 通知功能的話, 您也需要在 crontab 中執行 openwebmail-tool.pl

    0 */2 * * * /usr/local/www/cgi-bin/openwebmail/openwebmail-tool.pl -q -a -n

    上面這行會讓 openwebmail-tool.pl 每 2 個小時檢查一次使用者的行事曆, 看看接下來的一段時間裡 ( 時間長度由 openwebmail.conf 中的 calendar_email_notifyinterval 選項所決定, 內定是 120 分鐘) 是否使用者有事情要去辦

    註: 很明顯地, crontab 中的設定要和 calendar_email_notifyinterval 配合, 建議 calendar_email_notifyinterval 應該要比 crontab 中長一個小時或相等

 

公用通訊錄 , 公用郵件規則 , 公用行事曆

目前 Open WebMail 對於公用的通訊錄 / 郵件規則 / 行事曆 的支援還非常的原始 , 需要管理者手動去修改 . 如果管理者希望透過 Web 介面設定的話 , 步驟如下

  1. 建立一個管理公用 通訊錄 / 郵件規則 / 行事曆 的帳號 , 例如 global
  2. global 登入 unix
    mkdir mail
  3. ln -s 公用通訊錄檔名 ~global/mail/.address.book
    ln -s 公用郵件規則檔名 ~global/mail/.filter.book
    ln -s 公用行事曆檔名 ~global/mail/.calendar.book

    註: 要注意 公用通訊錄/郵件規則/行事曆 檔案的權限. 要讓 global 這個使用者可以寫入, 而其他使用者可以讀取
  4. global 登入 openwebmail, 修改其個人通訊錄 / 郵件規則 / 行事曆 即代表 修改公用通訊錄 / 郵件規則 / 行事曆

 

自動回信

Open WebMail 的自動回信功能, 是透過讓 Transpoort Agent (如 sendmail) 檢查 ~/.forward 這個檔案, 然後呼叫 vacation.pl 這個程式來完成的. 在部分的機器上, 為了安全的考量, Transport Agent 透過 smrsh 執行外部程式, 限定只有特定的程式可以被呼叫, 這時我們需要在 /etc/smrsh/ 放入一個vacation.pl 的連結, 這樣自動回信功能才能正常動作

Linux Redhat 7.x 為例

cd /etc/smrsh
ln -s /var/www/cgi-bin/openwebmail/vacation.pl .

如果您碰到自動回信功能不能正常動作的情形, 可以利用 vacation.pl 中的 -d 這個選項除錯

  1. 選定某位使用者 , 登入 openwebmail, 在個人偏好設定中 , 啟動自動回信功能
  2. 編輯使用者 home 目錄下的 .forward 這個檔案, 在 vacation.pl 的後面加入 -d 這個參數
  3. 寄一封信給這個使用者 , 測試自動回信功能
  4. 檢查 /tmp/vacation.debug 以找出可能的錯誤原因

 

虛擬主機

當您在同一部主機上設立多個虛擬主機時 , 您只需要安裝一套 Open WebMail 就可以同時讓所有的虛擬主機都有 WebMail 的功能 . Open WebMail 上允許您替每一個虛擬主機準備一個 設定檔, 所以每一部虛擬主機都可以有自己的設定, 包括 domainname, auth_module, quota limit, mailspooldir 等等

舉例而言, 要替虛擬主機 sr1.domain.com 作設定

  1. cd cgi-bin/openwebmail/etc/sites.conf/
  2. cp ../openwebmail.conf sr1.domain.com
  3. 依虛擬主機 sr1.domain.com 的需要, 修改檔案 sr1.domain.com 中的選項

 

使用者別名

Open WebMail 可以根據 sendmail virtusertable 格式的檔案的內容, 建立使用者別名. 比如說使用者登入的是 john@somedomain 這個帳號, 但是對應到系統裡頭卻是 tom@domain2. 關於 sendmail virtusertable 的設定方式, 請參考 http://www.sendmail.org/virtual-hosting.html

舉例而言, 假設您的主機原本的 domainname 是 mail.domain.com, 在上面有 use1, user2., user3 這三位使用者, 因而他們的 email address 是 [email protected], [email protected], [email protected]. 現在您因為需要, 再同一部主機上設立了一個虛擬主機 mail.virtualdomain.com, 然而這個 domain 上也有一個 user1. 為提示同一部 unix 機器只能有一個 user1 帳號. 這時候我們可以透過 virtusertable 將 [email protected] 對應到 [email protected], 但是使用者 [email protected] 卻完全不知道他用的是 [email protected]

  1. sendmail 同時承認並收取 mail.domain.com, mail.virtualdomain.com的信件
    1. 找到 /etc/mail/sendmail.cf 中 Fw-o 開頭的這一行, 記取其後的檔案名稱 (一般是 /etc/mail/local-host-names)
    2. 修改 /etc/mail/local-host-names, 加入這兩個 domain 的名字

      mail.domain.com
      mail.virtualdomain.com

 

  1. [email protected] 對應到 [email protected]
    1. 修改 /etc/mail/virtusertable, 加入下列內容

      [email protected] [email protected]

 

  1. sendmail 重讀設定檔

    kill -1 pid_of_sendmail
  2. [email protected] 要登入 openwebmail 時, 應該
    連線 http://mail.virtualdomain.com/cgi-bin/openwebmail/openwebmail.pl, 以 user1 登入
    openwebmail 會根據 virtusertable 內容, 轉為使用 user4 這個 unix 帳號

    [email protected] 要登入 openwebmail 時, 應該
    連線 http://mail.domain.com/cgi-bin/openwebmail/openwebmail.pl, 以 user1 登入
    openwebmail 會使用 user1 這個 unix 帳號

 

虛擬使用者

所謂的虛擬使用者指的是使用者在主機上沒有任何 unix 帳號 , 但是卻可以透過 POP3 或是 OpenWebMail 使用其電子信箱 . 這樣的組態 , 一方面比較不會有安全性的問題 , 同時也可以在單一部主機上支援較多的使用者

Open WebMail 的虛擬使用者功能主要是搭配 vm-pop3d 與 PostFix 來使用. 系統中 auth_vdomain.pl 這個認證模組便是用來對 vm-pop3d 與 PostFix 上的虛擬使用者進行認證的工作. 此外 Open WebMail 還提供 Web 介面, 讓被授權的使用者可就對虛擬主機下的虛擬使用者進行管理. 進行如新增帳號/刪除帳號, 修改密碼 等工作.

關於如何利用 OpenWebMAil + vm-pop3d + PostFix 建立支援虛擬使用者的郵件系統的詳細資料, 請參考 auth_vdomain.pl 中的說明. 此外 Kevin L. Ellis 也寫了一份 如何利用 openwebmail + vm-pop3d + postfix 建立虛擬使用者的文件

 

單一使用者權限設定

defaults/openwebmail.conf 中可以找到許多用來限定使用者所能使用功能的選項, 在某些情況下, 針對不同的使用者, 可能會需要設定不同的值. 使用者設定檔的位置是在 cgi-bin/openwebmail/etc/user.conf, 檔案的名稱和使用者名稱一樣 (如果是經過 virtusertable mapping 的 使用者, 以 mapping 之後的名稱為準).

舉例而言 , 你希望針對 guest 這個使用者作權限設定

  1. cd cgi-bin/openwebmail/etc/users.conf/
  2. cp SAMPLE guest (各項說明請參考 cgi-bin/openwebmail/etc/openwebmail.conf.help)
  3. 視需要 , 修改 guest 這個檔案的內容

: Open WebMail 載入設定檔的順序如下

  1. 載入 cgi-bin/openwebmail/etc/defaults/openwebmail.conf
  2. 載入 cgi-bin/openwebmail/etc/openwebmail.conf
  3. 載入 cgi-bin/openwebmail/etc/sites.conf/domainname (如果有的話)

    在載入上述設定檔後, 接著進行下面三個步驟

    載入 authentication module
    loginname 根據 virtusertable 被 mapping 到 real userid.
    userid 作密碼確認
  4. 載入 cgi-bin/openwebmail/etc/users.conf/username (如果有的話)
    由以上也可以知道, 某些選項放到 使用者設定檔是沒有效果的

同樣的選項如果同時出現在不同的設定檔中 , 後面載入的會蓋掉前面的

 

PAM 的支援

PAM 全名是 Pluggable Authentication Modules, 它提供了一致性的機制讓我們能很容易地使用外掛模組的方式來作使用者認證 (也就是密碼查核啦), 更詳細的 PAM 說明, 請參考 http://www.kernel.org/pub/linux/libs/pam/

目前已知 Solaris 2.6, FreeBSd 3.1 和 Linux 都支援 PAM, 要讓 Open WebMail使用 PAM 機制來作使用者認證, 步驟如下

  1. 下載 Perl 套件 Authen::PAM (Authen-PAM-0.14.tar.gz), 您可以在 http://www.cs.kuleuven.ac.be/~pelov/pam/ 找到最新的版本
  2. cd /tmp
    tar -zxvf Authen-PAM-0.14.tar.gz
    cd Authen-PAM-0.14
    perl Makefile.PL
    make
    make install

    註: 建議您在 make install 前先做 make test, 如果 make test 有任何錯誤訊息的話, 表示很可能您的系統無法使用 PAM
  3. 修改 /etc/pam.conf, 加入以下 3 行

    在 Solaris
    openwebmail auth required /usr/lib/security/pam_unix.so.1
    openwebmail account required /usr/lib/security/pam_unix.so.1
    openwebmail password required /usr/lib/security/pam_unix.so.1

    在 FreeBSD
    openwebmail auth required /usr/lib/pam_unix.so
    openwebmail account required /usr/lib/pam_unix.so
    openwebmail password required /usr/lib/pam_unix.so

    註 : 某些版本 FreeBSD 的 PAM 支援有問題 (例: 4.1)

    在 Linux
    openwebmail auth required /lib/security/pam_unix.so
    openwebmail account required /lib/security/pam_unix.so
    openwebmail password required /lib/security/pam_unix.so

    如果您的 Linux 沒有 /etc/pam.conf, 但是有 /etc/pam.d 這個個目錄
    請建立 /etc/pam.d/openwebmail 這個文字檔, 並放入以下 3 行

    auth required /lib/security/pam_unix.so
    account required /lib/security/pam_unix.so
    password required /lib/security/pam_unix.so

    pam.d 說明由 protech.AT.protech.net.tw 熱心提供
  4. 修改 openwebmail.conf, 將 auth_module 成 auth_pam.pl
  5. 檢查 auth_pam.pl 的內容, 看看是否有需要修改的部分

關於 PAM 設定的進一步說明, 建議您參考由 Andrew G. Morgan 所寫的 The Linux-PAM System Administrators' Guide

目前常見需要使用 auth_pam.pl 的情況, 是使用 NIS server 上的帳號系統. 當使用者帳號放在 NIS server 時, 使用 auth_unix.pl 當認證模組的話, 只能檢查使用者密碼, 卻沒有辦法修改密碼. 但是如果用 auth_pam.pl 當認證模組, 那麼密碼檢查與密碼更改功能都能正常使用.

 

Open WebMail 常駐於記憶體以加快執行速度

SpeedyCGI 簡介

SpeedyCGI 這個套件與 mod_perl 或是 FastCGI 相似, 都是能讓 CGI 程式常駐於記憶體執行的工具, 但是 要使用 mod_perl 或 FastCGI, 程式需要較大程度的修改. 而 SpeedyCGI 是針對 perl 所設計的, 能讓大部分的 perl 程式只要作少量的修改, 就可以順利地變成常駐執行的程式.

每當有使用者的 request 進到 Httpd, Httpd 都要呼叫執行 openwebmail 中對應的程式, 以 Perl CGI 的角度來看, 所需要的動作有

  1. 執行 perl interpreter
  2. perl interpreter 由硬碟上載入 openwebmail 程式碼與相關連的模組到記憶體中
  3. perl interpreter 將 openwebmail source code 編譯成 perl byte code
  4. perl interpreter 載入 byte code, 初始化環境 (initialize memory, global variable)
  5. byte code 執行

由於 Open Webmail 的程式碼相當龐大 , 步驟 2, 3 所需的時間也就相當地可觀 . 但是由於每當使用者 request 完成後 , openwebmail 就結束執行 , 所以下次使用者 request 進來時 , 只好又重複 1,2,3,4 的動作 . 其實對同一支 perl 程式而言 , 步驟 1,2,3,4 的結果 , 永遠都是一樣的 , 只有步驟 5 會根據使用者狀況產生不同的結果 . 如果能省下 重複在 1,2,3,4 步驟上的時間 , 那麼 Perl CGI 程式的速度便可以大幅地提昇 , 這就是為何我們要是使用 SpeedyCGI 的原因了 .

SpeedyCGI 的架構下, 當 Web Server 收到 request 後, 會執行一個 C 寫的 wrapper program (speedy), 這個 wrapper 會將 CGI 的參數傳給後端的 speedy_backend. speedy_backend 會確認程式是否第一次執行, 如果是的話, 由 speedy_backend 進行步驟 1到 5, speedy_backend 再將結果傳回 給 wrapper, wrapper 再將結果交由 httpd 傳回給使用者. 要注意的是這裡步驟 5 以後程式並不結束, 而是等在那裡. 等下次又有 request 進來時, speedy_backend 由 wrapper 接收 CGI 參數, 程式直接由步驟 5 開頭接著跑一次就可以了, 接著就可把結果經由 wrapper, 傳給 httpd 再回給使用者.

要使用 SpeedyCGI 的程式 , 要注意的就是因為程式會一直常駐 , 所以在記憶體管理上樣特別小心 , 同時由於步驟 4 並不重複執行 , 所以 global 變數的內容會一直保留 , 程式要針對實際的需要進行必要的處理 .

: Open WebMail 自版本 1.90 20030313 以後, 已經可以順利地在 SpeedyCGI 下環境下執行.

安裝與設定 SpeedyCGI (由 source 安裝)

  1. SpeedyCGI 套件安裝

    取得最新本的 SpeedyCGI 套件
    http://sourceforge.net/project/showfiles.php?group_id=2208
    http://daemoninc.com/SpeedyCGI/download.html

    cd /tmp
    tar -zxvf path_to_source/CGI-SpeedyCGI-2.22.tar.gz
    cd CGI-SpeedyCGI-2.22
    perl Makefile.PL (問是否裝 mod_speedycgi 時請回答 'no')

    編輯 speedy/Makefile 這個檔案
    在有 DEFINE = 這行的最後面加上 -DIAMSUID

    make
    make install
    (如果看到 mod_speedycgi 相關的錯誤, 請暫時先忽略它)

    註: 在 RedHat 中的 perl-5.8.0-88 配合使用 SpeedyCGI 時,
    某些 regular expression 寫法會造成 suid 程式 tainted variable 檢查錯誤
    請記得更換到 Open Webmail 2003/09/29 以後的版本
  2. speedy setuid root

    首先找出 speedy 被安裝在哪裡 , 通常是 /usr/bin/speedy 或是 /usr/local/bin/speedy,
    這裡我們假設它裝在 /usr/bin/speedy

cp /usr/bin/speedy /usr/bin/speedy_suid
chmod 4555 /usr/bin/speedy_suidperl

  1. 修改 openwebmail 程式以 SpeedyCGI 方式執行

    由於 openwebmail 程式碼已經是 SpeedyCGI ready, 所以您要作的只有
    把所有 cgi-bin/openwebmail/openwebmail*pl 中第一行

    #!/usr/bin/suidperl -T
    換成 #!/usr/bin/speedy_suidperl -T -- -T/tmp/speedy

    第一組 -T 是要傳給 perl interpreter 的, 而 -- 之後的 -T/tmp/speedy 則是要給 SpeedyCGI 的參數, 代表的是暫存檔路徑的前置字串

    (注意: 如果是 perl 5.8.4 以後的版本, 那麼上面那行要 改成 #!/usr/bin/speedy_suidperl 才行)

    註: 如果將來系統很忙碌的話, 您可能會看到一大堆像是 /tmp/speedy.數字 的 檔案, 所以有些管理者可能會希望把這個參數換成其他位置, 比如說是 /var/run/speedy (FreeBSD/Linux) 或是 /var/tmp (Solaris)
  2. 連上你的 OpenWebMail 看看, 享受一下加速的快感 :)

安裝與設定 SpeedyCGI (由 rpm 安裝)

  1. 如果您用的是 RedHat Linux, 那麼您可以透過 rpm 快速安裝

    如果您的 RedHat 是 7.3 的話, 請

    wget http://turtle.ee.ncku.edu.tw/openwebmail/download/redhat/rpm/packages/rh73/optional/perl-CGI-SpeedyCGI-2.21-RH73.i386.rpm
    rpm -Uvh --force perl-CGI-SpeedyCGI-2.21-RH73.i386.rpm

    如果您的 RedHat 是 8.0 的話, 請

    wget http://turtle.ee.ncku.edu.tw/openwebmail/download/redhat/rpm/packages/rh80/optional/perl-CGI-SpeedyCGI-2.21-RH80.i386.rpm
    rpm -Uvh --force perl-CGI-SpeedyCGI-2.21-RH80.i386.rpm

    如果您的 RedHat 是 9.0 的話, 請

    wget http://turtle.ee.ncku.edu.tw/openwebmail/download/redhat/rpm/packages/rh9/optional/perl-CGI-SpeedyCGI-2.21-RH9.i386.rpm
    rpm -Uvh --force perl-CGI-SpeedyCGI-2.21-RH9.i386.rpm
  2. 接著執行

    speedy_convert

    這個程式會自動設定已安裝的 Open WebMail 以便讓其以 SpeedyCGI 方式執行
  3. 連上你的 OpenWebMail 看看, 享受一下加速的快感 :)


其他 SpeedyCGI 注意事項

  1. 如果你的 Open WebMail 是裝在一台很慢的機器上, 你可能會希望別讓使用者遇到 script 第一次載入所造成的延遲, 那麼你可以試試 preload.pl 這個 script. 它基本上是一個簡單的 http client, 代替 user 連到 web server 事先啟動 openwebmail scripts.

    a. 你可以透過瀏覽器連到 http://your_server/cgi-bin/openwebmail/preload.pl
    至於內定的密碼與如何更改密碼請看 preload.pl 內說明

    b. 你也可以在命令列下執行 preload.pl, 或是在 crontab 放入下面這行, 將常用的 scripts 預先載入記憶體中

    0 * * * * /usr/local/www/cgi-bin/openwebmail/preload.pl -q openwebmail.pl openwebmail-main.pl openwebmail-read.pl

    ps: 如果你機器的記憶體夠多, 你也可以選擇 preload 全部的 scripts.

    0 * * * * /usr/local/www/cgi-bin/openwebmail/preload.pl -q --all
  2. 想再快一些嗎?

    你可以考慮使用只要一個 process 就能同時處理多個 connection 的 httpd, 例如 http://www.acme.com/software/thttpd/, 來取代原本的 apache web server. 請記得要參考 doc/thttpd.speedycgi.txt 的說明, 以便讓 thttpd 能配合 speedycgi 正常運作
  3. 與新版 Perl 5.8.4 的相容性問題

    最新版的 Perl 5.8.4 開始對 suid 的 perl script 做了更多嚴格的檢查, 因此在安裝的時候需要特別注意, 否則部份檢查可能會造成與 SpeedyCGI 的不相容的情形 以下是要注意的部份 (在此特別感謝 李彥明 提供這個解法)

    a. perl interpreter 的檔名一定要含有 'perl' 這個字串

    過去我們建議大家使用 speedy_suid 作為 suid 的 speedycgi perl interpreter 的檔名, 不過現在建議大家改用 speedy_suidperl 作為 suid 的 speedycgi perl interpreter 檔名, 以符合這個檢查的要求

    b. 傳給 perl interpreter 的參數必須和寫在 perl scipt file 中第一行 #! 的參數一致

    因為這個限制, 所以戲現在已經無法透過下面這樣的方式告訴 SpeedyCGI 改變 tmpbase 的值

    #!/usr/bin/speedy_suidperl -T -- -T/tmp/speedy

    現在各 perl script file 的第一行只能是下面這個樣子

    #!/usr/bin/speedy_suidperl

    換句話說, 就是不能透過 "-- -parameter_for_speedy" 來傳遞參數給 SpeedyCGI 系統了

    註: 如果你覺得預設 tmpbase "/tmp/speedy" 不好, 一定要改的話, 你可以使用 cgi-bin/openwebmail/misc/patches/speedycgi.tmpbase.patch 來 patch SpeedyCGi 2.22 原始碼, 這個 patch 會將 tmpbase 由 /tmp/speedy 改成 /var/run/speedy

: Kevin L. Ellis 有寫了一份關於 Open WebMail + SpeedyCGI 的說明和 Benchmark, 可參考看看

 

啟動 HTTP 壓縮功能加快傳輸

Open WebMail 2.10 後, 新增支援 HTTP 資料壓縮傳送功能, 對於透過數據機連線或是使用 PDA 上網的使用者來說, 這個功能能夠大幅地降低傳輸網頁資料所需的時間. 要讓這個功能正常動作, 必須先在您的 openwebmail server 上安裝 Compress-Zlib-1.33.tar.gz 這模組

source 安裝

cd /tmp
tar -zxvf Compress-Zlib-1.33.tar.gz
cd Compress-Zlib-1.33
perl Makefile.PL
make
make install

rpm 安裝

如果您的 RedHat 是 7.3 的話, 請

wget http://turtle.ee.ncku.edu.tw/openwebmail/download/redhat/rpm/packages/rh73/perl-Compress-Zlib-1.21-RH73.i386.rpm
rpm -Uvh --force perl-Compress-Zlib-1.21-RH73.i386.rpm

如果您的 RedHat 是 8.0 的話, 請

wget http://turtle.ee.ncku.edu.tw/openwebmail/download/redhat/rpm/packages/rh80/perl-Compress-Zlib-1.21-RH80.i386.rpm
rpm -Uvh --force perl-Compress-Zlib-1.21-RH80.i386.rpm

如果您的 RedHat 是 9.0 的話, 請

wget http://turtle.ee.ncku.edu.tw/openwebmail/download/redhat/rpm/packages/rh9/perl-Compress-Zlib-1.21-RH9.i386.rpm
rpm -Uvh --force perl-Compress-Zlib-1.21-RH9.i386.rpm

 

其他參考資料

如果您想知道 Open WebMail 會用到系統中的哪些檔案, 請參考 files.txt

如果您碰到任何問題的話, 請先參考 changes.txt 看看是否最新版的 openwebmail-current 已經解決了您的問題. 如果沒有的話, 請再看看 readme.txt 和 faq.txt 以及 Google 的 Search 和 News. 如果還是無法解決的話, 您可以將您的問題發表到 OpenWebMail 討論區 或是 BBS.

如果您有任何修正或是發現任何的臭蟲 , 請寄 Email openwebmail.AT.turtle.ee.ncku.edu.tw . 但是請注意不要將安裝上的問題寄到這個 Email 地址 , 這類的信件將會被直接地忽略掉 , 我們希望問題與解答能公開討論 , 讓大家都能分享

相關文件 for FreeBSD

 

  快速连接

# 1. 网络硬盘:
如果不想提供网络硬盘的话,可以在底下的档案:
/var/www/cgi-bin/openwebmail/etc/opewebmail.conf
加入这行:
enable_webdisk no

# 2. 提供 ssh 联机:
如果不想提供网络联机的话,可以在底下的档案:
/var/www/cgi-bin/openwebmail/etc/opewebmail.conf
加入这行:
enable_sshterm no

# 3. 让登入更简单:
如果不想在网址列输入长长的一段文字,可以修改成为:
vi httpd.conf (请依照您的系统来修订!)
ScriptAlias  /webmail     /var/www/cgi-bin/openwebmail/openwebmail.pl
or
ScriptAlias  /webmail.pl  /var/www/cgi-bin/openwebmail/openwebmail.pl
然后重新启动 apache ,如此一来,您可以在网址列输入:
http://hostname/webmail or http://hostname/webmail.pl
就可以进入 openwebmail 啰!

 

sendmail 下對所有寄出與寄進的信件存檔備份 (

  • 步驟如下
    1. 安裝【開發工具】這一類的套件
      請執行 redhat-config-packages 或從 GNOME/KDE 左下角的面版拉出 『系統設定』,再選擇『套件』。
    2. 安裝套件
      sendmail-cf, sendmail-doc, 以及 sendmail-devel。
    3. 製作負責備份的程式
      此處所用的程式取自 /usr/share/doc/sendmail/README.libmilter 的最後 一段,存檔為 filter.c (或任何你喜歡的名字)。 這裡所附的 filter.c 只有一點點不同: 筆者把存放備份郵件的位置從 /tmp 改至 /var/spool/mail.backup。 filter.c 放在某個工作目錄內,執行

gcc -o filter filter.c -lmilter -lsm -pthread

即可產生可執行檔『 filter 』。再執行

chmod u=rwx,go= filter
cp filter /usr/sbin

把它複製到 /usr/sbin 下。

    1. 修改 /etc/mail/sendmail.mc
      在檔案結尾加入

INPUT_MAIL_FILTER(`sample',`S=local:/var/run/filter.sock')dnl

    1. /etc/mail 下執行 m4 sendmail.mc > sendmail.cf。
    2. 先將 /etc/init.d/sendmail 備份,再修改該檔:
      1. 先找到以下這一段,

start() {
        # Start daemons.

        echo -n $"Starting $prog: "

在其後加上

rm -f /var/run/filter.sock
/usr/sbin/filter -p local:/var/run/filter.sock &
echo $! > /var/run/filter.pid
sleep 3
chmod go-rwx /var/run/filter.sock

      1. 再先找到以下這一段,

stop() {
       # Stop daemons.
       :  :    :
       [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/sendmail

在其後加上

       [ -f /var/run/filter.pid ] && {
        kill -KILL `cat /var/run/filter.pid`
        rm -f /var/run/filter.sock
       }

    1. 執行

mkdir /var/spool/mail.bakcup
chmod u=rwx,go= /var/spool/mail.backup

以建立 /var/spool/mail.backup 這個目錄。

    1. 執行 service sendmail restart 重新啟動 sendmail。

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

Backup mails

1.install sendmail-cf, sendmail-doc,  sendmail-devel   if they have not installed.

2.Copy file “filter.c” into a directory then enter in this directory .

3.Execute

# gcc -o filter filter.c -lmilter -lsm –pthread

generate a filter automaticly,

4.Execute

# chmod u=rwx,go= filter
#  
cp filter /usr/sbin

copy it to /usr/sbin.

5.edit file /etc/mail/sendmail.mc

add

 

INPUT_MAIL_FILTER(`sample',`S=local:/var/run/filter.sock')dnl

 

into end of file.

6.backup file /etc/init.d/sendmail

then find

 

start() {
        # Start daemons.

        echo -n $"Starting $prog: "

 

add

 

rm -f /var/run/filter.sock
/usr/sbin/filter -p local:/var/run/filter.sock &
echo $! > /var/run/filter.pid
sleep 3
chmod go-rwx /var/run/filter.sock

 

after it.

 

Find

 

stop() {
       # Stop daemons.
       :  :    :
       [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/sendmail

 

add

 

 [ -f /var/run/filter.pid ] && {
        kill -KILL `cat /var/run/filter.pid`
        rm -f /var/run/filter.sock
       }

 

after it.

 

7.execute

mkdir /var/spool/mail.bakcup
chmod u=rwx,go= /var/spool/mail.backup

8.execute

service sendmail restart

restart computer.

 

Now when somebody sent a mail, you will find a backup file in /var/spool/mail.backup by the name of msg.XXXXXXXX (where the Xs represent any combination of letters and numbers).  This file should contain the message body and headers from the email.

 

Login

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

Login at http://yourhostname/cgi-bin/openwebmail/openwebmail.pl

  use non_root account.

 

POP3 configuration

If want to make the mail system work in pop3 authentication model.

Just find openwebmail.conf and change

 

auth_module                     auth_unix.pl

 

to

 

auth_module                auth_pop3.pl

 

and add below into openwebmail.conf

 

use_syshomedir             no

use_homedirspools          no

enable_changepwd           no

enable_autoreply           no

enable_setforward          no

authpop3_server            pop3.163.com

authpop3_port              110

authpop3_getmail           yes

authpop3_delmail           yes

authpop3_usessl            no

 

(ps: change authpop3_server your want to use )

then you can logon the open web mail use the mail account which register from the pop3 provider