Gentoo Logo

qmail/vpopmail 虛擬郵件管理系統指南

內容:

1.  介紹

不管是您正為了只是系統服務,一個單獨的伺服器,一個網域,或為了許多虛擬網域而要提供電子郵件服務, qmail 可以 很簡單地被設定起來管理您的需求。這篇指南將協助您在這些場景中,集中於遠端存取與加密通訊上面的完整方法中設定 qmail。

按照套件類別來說,這篇指南會協助有關 qmail、courier-imap、vpopmail,與 horde/imp。這些主要的套件將還會需要 daemontools、 ucspi-tcp、mysql、apache與 mod_php。qmail 提供主要的郵件傳輸機制 (MTA) 功能,courier-imap 提供遠端存取服務,vpopmail 提供虛擬網域管理,而 hordeimp 提供網頁郵件存取服務。

在使用 emerge 所有套件前,您會需要使用下面的 USE 環境變數。如果您已經 emerge 過這其中的任何套件,您可能還需要再 emerge 他們一次。USE="maildir ssl imap mysql" 。此外,如果您想要使用 horde/imp 來做為您的網頁郵件存取服務, 您會需要先 USE="nls" 後,再 emerge mod_php。

注意: 注意:這篇指南是按步驟來撰寫,如果您在任何部份已經都‘完整’的設定過了,您就不需要再做一次。

整個過程的最後一步是確定自己要使用 qmail 系統。還有許多套件可以讓您建立自己的 e-mail 系統。現在正是開始探索與選定 qmail 的時候了。我們有另一個大家所喜愛的指南是關於 Postfix 的,或者您可以參考看看 exim,您可以自己選擇哪一個才是對您 最好的解決方案,現在我們開始介紹如何使用 qmail。

2.  qmail (以我自己來說)

原始碼 2.1: Emerge qmail

# 安裝 qmail

重要: 重要:這節指南是針對 vpopmail-5.4.6 或以後的版本所設計。較早的版本也可以適用嗎?也許。您應該要升級嗎?當然,如果您要確 定這節指南是可用的。

警告: 警告:如果您遇到一個像 the virtual/mta package conflicts with another package 這樣的訊息,您會需要確定已經在您的系統上 移除安裝其它的 MTA。 要找出是哪些有衝突的套件,只要執行 emerge qmail -p 就可以了。

安裝 qmail 將會一起安裝 ucspi-tcp 與 daemontools 套件。如果您喜歡,您可以閱讀有 關 ucspi-tcpdaemontools 的文件。基本 上,daemontools 是負責管理 qmail 的服務,而 ucspi-tcp 是負責管理要進來 qmail 服務的 TCP 連線。

首先,我們需要在安裝後進行一些設定步驟。

原始碼 2.2: qmail 立即可用的設定

(設定符合您個人的資訊)
# nano /var/qmail/control/servercert.cnf
# ebuild /var/db/pkg/mail-mta/qmail-1.03-r*/qmail-1.03-r*.ebuild config

qmail 在設計時最主要就是針對完整個安全性。為了這個目的,e-mail 是永遠不會送給 root 帳號。所以現在您需要選擇在機器上的 一個帳號來收下專門要寄送給 root 的郵件。在這篇指南中,從現在開始,我會以我自己系統上的使用者來做設定,帳號 'vapier' 。

原始碼 2.3: 將系統帳號設定給非 root 帳號

# cd /var/qmail/alias
# echo vapier > .qmail-root
# echo vapier > .qmail-postmaster
# echo vapier > .qmail-mailer-daemon

現在我們要讓 qmail 遞送服務啟動,並且運行。

原始碼 2.4: 啟始 qmail 遞送服務

# rc-update add svscan default
# /etc/init.d/svscan start
# cd /service
# ln -s /var/qmail/supervise/qmail-send qmail-send

我們要確定 qmail 是正確的運作中,這是一個快速的測試。

原始碼 2.5: 測試遞送服務

# ssh vapier@localhost
# maildirmake .maildir
# qmail-inject root << EOF
test root e-mail!
EOF
# qmail-inject postmaster << EOF
test postmaster e-mail!
EOF
# qmail-inject vapier << EOF
test vapier e-mail!
EOF
# mutt
(您現在應該有三封電子郵件在您的信箱中)

就是這樣子!現在您有一個郵件系統可以管理您本地主機的郵件,並且讓系統服務與使用者可以使用它了。

警告: 警告:如果您收不到收任何郵件或者您在記錄檔中看到奇怪的錯誤 (檢查 /var/log/qmail/ ) 有出現 'localhost.localhost', 這表示您的 網域/名稱網域服務(domain/dns) 資訊沒有設定正確。 qmail 利用主機名稱的輸出 --fqdn (完整合法網域 名稱)來做預設值。 如果在您的機器上回應是 'localhost',先檢查 /etc/hostname/etc/hosts 與確定您的 dns 相關設 定都正確後,還有出現的話,請編輯 /var/qmail/control/ 裡的設定檔。如果您需要一些幫助,使用下面的範例來進行設定。

原始碼 2.6: 第二層網域在 /var/qmail/control/ 下的檔案範例

# hostname --fqdn
wh0rd.org
# cat me
wh0rd.org
# cat defaultdomain
wh0rd.org
# cat plusdomain
wh0rd.org
# cat locals
wh0rd.org
# cat rcpthosts
wh0rd.org

原始碼 2.7: 第三層網域在 /var/qmail/control/ 下的檔案範例

# hostname --fqdn
mail.wh0rd.org
# cat me
mail.wh0rd.org
# cat defaultdomain
wh0rd.org
# cat plusdomain
wh0rd.org
# cat locals
mail.wh0rd.org
# cat rcpthosts
mail.wh0rd.org

3.  vpopmail

原始碼 3.1: 安裝 vpopmail

# emerge vpopmail

重要: 重要:這節指南是針對 vpopmail-5.4.0_rc1 或以後的版本所設計。較早的版本也可以適用嗎?也許。您應該要升級嗎?當然, 如果您要確定這節指南是可用的。

vpopmail 會需要比上一個套件較多的力氣來安裝。因為 vpopmail 需要與 mysql 搭配使用,我們將必需先確定 mysql 是啟動且運行著。 然後我們就可以進行設定 vpopmail 資料庫,在做這個步驟之前,您應該要確定您已經安裝並且正確的設定 mysql。注意到我所使用給 vpopmail 資料庫的密碼是 'vpoppw', 您無論如何,都應該要選擇一個不一樣的密碼來使用。

原始碼 3.2: 在 mysql 裡設定 vpopmail

# rc-update add mysql default
如果您是第一次安裝 mysql,確定您執行的是 ebuild <mysql.ebuild> config 指令,並且在
啟動 mysql 伺服器前有按照指示。
# /etc/init.d/mysql start
# nano /etc/vpopmail.conf
(將密碼從'secret'更改為'vpoppw')
# mysql -p << EOF
create database vpopmail;
use mysql;
grant select, insert, update, delete, create, drop on vpopmail.* to vpopmail@localhost identified by 'vpoppw';
flush privileges;
EOF
(下面的步驟可能或可能不是需要的,但是我們執行的目的只是為了確認)
# chown root:vpopmail /etc/vpopmail.conf
# chmod 640 /etc/vpopmail.conf
# chown root:vpopmail /var/vpopmail/bin/vchkpw
# chmod 4711 /var/vpopmail/bin/vchkpw

警告: 警告:如果您遇到 mysql/vpopmail 權限上的問題,您可以能會想試著重新啟動 mysql。只要執行 /etc/init.d/mysql restart 即可。

到現在為止,vpopmail 已經可以使用了。在這節指南中,我們將提供網域 'wh0rd.org' 的虛擬主機代管。這表示我們需要告訴 vpopmail 關於這個網域是由我們管理。所以我們也要馬上增加一個使用者帳號 'vapier'。

原始碼 3.3: 增加一個 domain

(如果下面 vadddomain 的步驟執行後的結果是 "command not found", 您才需要執行)
# source /etc/profile

(您可能會想要查閱記錄檔來為 vpopmail 除錯)
# mysql -u vpopmail -p
mysql> select * from vpopmail.vlog;

# vadddomain wh0rd.org postpass
(現在馬上驗證網域的設定是正確的)
# printf "postmaster@wh0rd.org\0postpass\0blah\0" | vchkpw `which id` 3<&0
uid=89(vpopmail) gid=89(vpopmail) groups=0(root)
(如果您沒有看到跟上面很像的內容,可能在某些地方權限上是錯誤的)
# vadduser vapier@wh0rd.org vappw

由 vpopmail 建立的所有網域應搭配一個 'postmaster' 帳號。我們在這裡告訴 vpopmail , postmaster 帳號的密碼是 'postpass'。 在 vpopmail 可以被真正的使用前,我們需要可以透過 courier 套件與 qmail 和 SMTP 來收發郵件。

4.  Courier POP/IMAP

原始碼 4.1: Emerge courier-imap

# 安裝 net-mail/courier-imap

重要: 重要:您必需在安裝 vpopmail 之後才可以安裝 courier-imap 套件。這樣 authvchkpw 模組才會被建立。

重要: 重要:這節指南是針對 net-mail/courier-imap-3.0.7 或以後的版本所設計。較早的版本也可以適用嗎?也許。您應該要升級嗎?當然, 如果您要確定這節指南是可用的。

現在開始一般後置設定步驟。這個步驟只在您需要執行 SSL 加密通訊時進行 (當然要囉!)。 否則您可以跳過下面兩個 code listings 的步驟, 並在每一次 init sciprt 中移除 '-ssl' 設定。

原始碼 4.2: POP3/SSL 立即可用的設定

# nano /etc/courier/authlib/authdaemonrc
(設定 authmodulelist 環境變數只包含 "authvchkpw")
# cd /etc/courier-imap
# nano pop3d.cnf
(編輯 [ req_dn ] 部份)
# mkpop3dcert
# rc-update add courier-pop3d-ssl default
# /etc/init.d/courier-pop3d-ssl start

原始碼 4.3: IMAP/SSL 立即可用的設定

# cd /etc/courier-imap
# nano imapd.cnf
(編輯 [ req_dn ] 部份)
# mkimapdcert
# rc-update add courier-imapd-ssl default
# /etc/init.d/courier-imapd-ssl start

您的郵件客戶端軟體應該現在可以登入到有運行 courier 的主機中,而且還可以接收虛擬主機的郵件。 以我為例,我現在可以使用帳號 'vapier@wh0rd.org' 與密碼 'vappw' 來登入。

5.  qmail (設定SMTP 服務)

讓我們使 SMTP 啟動並且運行,並確定我們沒有產生其他垃圾郵件漏洞可以被其他人濫用。

原始碼 5.1: 啟動 qmail SMTP 服務

# cd /var/qmail/control/
# nano conf-smtpd
(拿掉 SMTP-AUTH 環境變數前的註解符號, 並且設定 QMAIL_SMTP_CHECKPASSWORD 為 /var/vpopmail/bin/vchkpw)
# nano servercert.cnf
(編輯 [ req_dn ] 部份)
# mkservercert
# cd /service
# ln -s /var/qmail/supervise/qmail-smtpd qmail-smtpd
# /etc/init.d/svscan restart

假設您根本沒有動過 qmail 控制檔,qmail 現在會允許要遞送給本地主機使用者與虛擬網域 wh0rd.org 的郵件。 而且, qmail 還會 轉送所有透過 127.0.0.1 與所有被 vpopmail 認證通過所發送的任何人的郵件。當您設定您的郵件客戶端軟體來遞送郵件時,請確定您 有選擇 '伺服器需要驗證' 的選項。以我為例,我設定使用者帳號為 'vapier@wh0rd。org' ,密碼為 'vappw' 。最後細節的地方是要確定您 告訴您的郵件客戶端軟體要使用 SSL/TLS 來做為 SMTP 的通訊方式。如果您的通訊期間是未加密的,qmail 將不會讓您認證通過。

6.  Horde / IMP 網頁郵件軟體

即使已經有很多網頁郵件軟體(webmail clients)存在(您可以免費使用任何一個), 我寧可選擇 Horde 架構中 的 IMP Webmail Client, 最主要的原因在於 Horde 可以簡單地提供 Webmail 存取,或者您可以輕易地增加其他元件來管理位址簿,行事曆,工作,等等… 如果這樣不足以讓您信服, 您可能需要自己把 Horde 研讀一番。

知道這麼好的東西後!我們現在需要安裝 IMP。

原始碼 6.1: 安裝 IMP

# emerge horde-imp

重要: 重要:這節指南是針對 horde-2.2.x 與 horde-imp-3.2.x 為基礎。CVS 版本(與下一個主要釋出版本)將很有可能有非常不一樣的配 置設定。並且注意 php-5.x 可能會搞爛 horde-2.x。

Horde 目前不是那麼容易地可以被設定,除非您完全知道您自己正在做什麼。您真是幸運,我確實知道該怎麼做,所以您也可以。

原始碼 6.2: Horde 立即可用的設定

# cd /var/www/localhost/htdocs/horde/config/
# for f in *.dist ; do mv ${f} ${f/.dist} ; done
# nano horde.php
('Horde Authentication': 下面)
$conf['auth']['driver'] = 'imap';
$conf['auth']['params']['dsn'] = '{localhost:993/imap/ssl/novalidate-cert}';

('Horde Logging': 下面)
$conf['log']['name'] = '/var/log/apache2/horde.log';

('Problem Reporting': 下面)
$conf['problems']['enabled'] = true;
$conf['problems']['email'] = 'webmaster@wh0rd.org';

# nano registry.php
(Under 'Handlers':)
$this->registry['auth']['login'] = 'imp';
$this->registry['auth']['logout'] = 'imp';

('Application registry': 下面)
在 applications['imp'] 裡的 'status' 環境中將 'inactive' 設定為 'active'

# touch /var/log/apache2/horde.log
# chown apache:apache /var/log/apache2/horde.log

注意: 注意:您可能會想要將 'webmaster' 的 e-mail 位址更改為其他設定。如果您想要使用那個 e-mail 位址,請記得您必需要在 vpopmail 裡增加那個使用者帳號(或者查看下面關於 qmailadmin 的部份)。

現在我們會設定 IMP 較快些。

原始碼 6.3: IMP 立即可用的設定

# cd /var/www/localhost/htdocs/horde/imp/config/
# for f in *.dist ; do mv ${f} ${f/.dist} ; done
# nano servers.php

(Edit the $servers['imap'] array:)
$servers['imap'] = array(
	'name' => 'wh0rd.org',
	'server' => 'localhost',
	'protocol' => 'imap/ssl/novalidate-cert',
	'port' => 993,
	'folders' => '',
	'namespace' => 'INBOX.',
	'maildomain' => 'wh0rd.org',
	'smtphost' => 'localhost',
	'realm' => '',
	'preferred' => ''
);

最後,我們要啟動 apache ,這樣才可以使用 webmail。

原始碼 6.4: 啟動 apache

# nano /etc/conf.d/apache2
(拿掉 APACHE2_OPTS="-D SSL -D PHP4" 前的註解符號)
# rc-update add apache2 default
# /etc/init.d/apache2 start

警告: 警告:您應該確實查看在 horde 中的使用者透過 https 的連線。這個不是一個很鎖碎的事, 但是您應該為了安全的理由好好查看一下。

試新的 IMP 設定,打開網頁瀏覽器,並參訪 http://localhost/horde/ (或把 localhost 更改為您所設定的 server 名稱) 您應該會看到 Horde 的登入歡迎頁面。再一次,在我的設定中,我簡單的使用帳號 'vapier@wh0rd。org' 與密碼 'vappw' 來做登入。

在這個部份,Horde 與 IMP 已經完全設定好了,您應該,不管如何,回到原來設定的目錄中,調整每一個您心裡想要的設定內容。

7.  額外套件

qmailadmin

第一個我會建議研究的套件是 qmailadmin。 這是一個管理虛擬網域的網頁式管理介面,簡單的執行 emerge net-mail/qmailadmin ,然後將網頁瀏覽器指 到 http://localhost/cgi-bin/qmailadmin 來使用。它讓生活更簡單。

qmHandle

如果您遇到 qmail 佇列的問題並且花太多時間對佇列進行偵錯,您可以試 試 qmHandle。這是一個簡單的 perl 程式,可以讓您去查看 並管理 qmail 郵件佇列。再一次,您需要做的就是執行 emerge net-mail/qmhandle

horde 增加的套件

我非常強烈的建議看看 Horde 其它的應用程式。 TurbaKronolith,與 Nag 應用程式讓 IMP 在使用上變的非常好。他們的設定都很類 似 IMP ,所以您應該不會在設定時遇到麻煩。只要記住在 horde 的 config 目錄裡修改 registry.php ,您將會在 horde 的網 站下面發現到新應用程式的出現。

ucspi-tcp

qmail 利用 ucspi-tcp 來管理進來 qmail 的連線。 如果您想要自行設定這些過濾規則, 查看一下在 /etc/tcprules.d/ 裡 的配置檔案 ( qmail 舊一點的版本將檔案放在 /etc 裡) 。在這裡您會找到每一個服務有兩個檔案,配置檔 (如: tcp.qmail-smtp) 與 提供 ucspi-tcp 使用的編譯過版本 (如: tcp.qmail-smtp.cdb)。每當您更新過配置檔,您必需要重新建立二進位版本的檔案。只要執行 tcprules tcp.qmail-smtp.cdb tcp.qmail-smtp.tmp < tcp.qmail-smtp。每次每一個要連到 qmail 服務的連線被建立,被編 譯過的規則檔就會被再重新讀取,所以不需要重新啟動這個服務。

qmail-scanner

如果您希望在您的郵件伺服器上做內容過律(垃圾郵件與病毒), 您將需要使用一個不同於預設管理佇列的程式。 一個很不錯的程式可以做 到, 它就是 qmail-scanner。 執行 emerge qmail-scanner 並且修改 /etc/tcprules.d/tcp.qmail-smtp 檔案就可以了。

重要: 重要:qmail-scanner 在建立的過程中有點討厭,為了要使用可被支援的程式,您必需要先將這些程式安裝在您的系統中。這表示您將需 要先安裝 SpamAssassin 與/或 Clam AntiVirus 在安裝 qmail-scanner 之前進行。查看有關接下來的部份以取得較多的資訊。

原始碼 7.1: 更改佇列管理

# cd /etc/tcprules.d/
# nano tcp.qmail-smtp
(增加 QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue" 設定於允許規則中來取得)
# tcprules tcp.qmail-smtp.cdb tcp.qmail-smtp.tmp < tcp.qmail-smtp

查看接下來的部份來設定垃圾信與病毒過濾功能。 您可以透過修改 /var/qmail/bin/qmail-scanner-queue.pl 來設定自 己想要的選項設定。

SpamAssassin

其中一個最佳的開放源碼垃圾信過濾軟體就屬 SpamAssassin。 只要執行 emerge mail-filter/spamassassin 就可以安裝完成。 這個軟體有兩個主要的用法,一個是在文字列下直接使用,另一個是客戶端/伺服端版本。對伺服器而言,管理一個較小數量的郵件, 使用文字列的方式是足夠的,但是當有人的伺服器需要管理較相當繁重的量時,就應該使用客戶端/伺服端版本。

原始碼 7.2: SpamAssassin 立即可用的設定

# nano /etc/mail/spamassassin/local.cf
(所有基本的設定中,增加下面設定:)
required_hits 6
skip_rbl_checks 1

# rc-update add spamd default
# /etc/init.d/spamd start
# nano /var/qmail/bin/qmail-scanner-queue.pl
(確定 $spamc_binary 環境設定為 '/usr/bin/spamc'。)
(如果是設定為 '', 請查看下面的說明。)

重要: 重要:如果您的系統上在安裝 qmail-scanner 前沒有安裝 SpamAssassin,您現在需要再重新安裝一次 qmail-scanner。 這個安裝的過程是非常討厭,並且將只會在此時的系統上偵測到該增加功能的軟體設定到 qmail-scanner 中。

在這個部份,進來的郵件應該要通過 qmail-scanner 並搭配 SpamAssassin 的掃描。

Clam AntiVirus

就如同 SpamAssassin ,Clam AntiVirus 也有兩個使用方法。我將會簡短的介紹 如何快速設定 client/server 版本。首先,就執行 emerge app-antivirus/clamav

原始碼 7.3: Clam AntiVirus 立即可用的設定

# nano /etc/conf.d/clamd
(設定 START_CLAMD=yes)
# nano /etc/clamav.conf
(設定裡面您想要的設定)
# rc-update add clamd default
# /etc/init.d/clamd start
# nano /var/qmail/bin/qmail-scanner-queue.pl
(確定 $clamscan_binary 環境變數是被設定為 '/usr/bin/clamscan'。)
(如果是設定為 '', 請查看下面的說明。)
# nano /var/qmail/control/conf-common
(如果 ClamAV 回報記憶體問題,請試著增加 softlimit 的設定)

重要: 重要:如果您的系統上在安裝 qmail-scanner 前沒有 Clam AntiVirus,您現在需要再重新安裝一次 qmail-scanner。 這個安裝的過程是有點討厭,並且將只會在此時的系統上偵測到該增加功能的軟體設定到 qmail-scanner 中。

在這個部份,進來的郵件應該要通過 qmail-scanner 並搭配 Clam Antivirus 的掃描。

8.  最後說明

我沒有最後說明,但是如果您在這篇指南中有遇到任何麻煩,請與聯繫 或使用Gentoo的Bugtracking網站將臭蟲回報。如果您對增加這 篇指南有一些興趣,當然可以把內容寄送給我。我喜愛 qmail 而且將會很樂意地增加這些可以豐富使用者經驗與 MTA 的內容。



列印

最後更新 2005年 4月 24日

這份文件的原始版本已不再被維護

大綱: 這個文件會詳細說明如何使用 qmail、vpopmail、courier-imap、mysql 與 horde's imp 來建立一個郵件管理系統。

Mike Frysinger
Author

Jack Liu
Translator

Benny Chuang
Translator

Donate to support our development efforts.

Support OSL

Support OSL

Gentoo Centric Hosting: vr.org

VR Hosted

Tek Alchemy

Tek Alchemy

SevenL.net

SevenL.net

Global Netoptex Inc.

Global Netoptex Inc.

Bytemark

Bytemark

Linux World Expo

Linux World Expo

Copyright 2001-2008 Gentoo Foundation, Inc. Questions, Comments? Contact us.