前言
sendmail的功能是足夠強大的,然而它的配置和管理也是十分復雜的。有另一個也很常用的郵件服務程序稱為qmail。
需要注意的是,許多人認為qmail要比sendmail簡單一些。就筆者個人的感覺,不能同意這種說法。但是,qmail在配置一些稀奇古怪的功能方面確實比sendmail要稍微容易一 些。另外qmail與sendmail不同之處在於,缺省的時候qmail將在用戶的宿主目錄中存儲郵件,而不是像sendmail那樣不分青紅皂白地放在/var/spool/mail下面,並且qmail不 需要使用文件鎖定,所以可以把用戶郵件放在NFS服務器上,這樣,可以使用多台服務器 來提供服務。對於大型郵件系統這是很重要的。(在sendmail也可以這樣做,但必須非 常小心以免造成郵件丟失)。但是這個功能雖然不錯,卻又產生了一些十分討厭的後果 。對於大型的ISP,qmail也很重要,它可以簡化虛擬域的設置。我們將試圖介紹如何用 qmail構造一個郵件服務器。當然,這裡的介紹不可能像介紹sendmail那樣細致,如果要 使用一些比較高級的功能,你也許必須研究qmail的文檔。
軟件包:
qmail-1.03 qmail基本系統。在http://em.ca/~brUCeg/qmail+patches/上有一個好的補丁包,裡面有若干針對Qmail的POP3d及其他問題的補丁,筆者建議您把它下載過來。
ucspi-tcp-0.88 tcpsever服務程序
daemontools-0.70 監視工具
checkpassWord-0.81 pop3驗證用戶的程序
ezmlm-0.53 郵件轉發
vpopmail-4.9.6-1 虛擬域用戶pop3支持
qmailadmin-0.35 虛擬域web管理
autorespond-1.0.0 自動回復程序
sqwebmail-1.2.0 webmail
vqsignup-0.4 web方式用戶注冊
軟件來源:
http://www.qmail.org
http://www.inter7.com/qmail
每個包安裝前務必先仔細閱讀INSTALL和FAQ,很多問題在FAQ都有解決方法。
安裝步驟:
1. #mkdir /var/qmail
2.設定組、用戶權限
# groupadd nofiles
# useradd -g nofiles -d /var/qmail/alias alias
# useradd -g nofiles -d /var/qmail qmaild
# useradd -g nofiles -d /var/qmail qmaill
# useradd -g nofiles -d /var/qmail qmailp
# groupadd qmail
# useradd -g qmail -d /var/qmail qmailq
# useradd -g qmail -d /var/qmail qmailr
# useradd -g qmail -d /var/qmail qmails
3.
#tar xzvf qmail-1.03.tar.gz
進入qmail目錄後,仔細閱讀一下README和INSTALL文件.然後開始編譯qmail
#make setup check
4. #cd qmail-1.03
#./config
5.建立系統別名
# (cd ~alias; touch .qmail-postmaster .qmail-mailer-daemon .qmail-root)
# chmod 644 ~alias/.qmail*
6.
# cp /var/qmail/boot/home /var/qmail/rc
# chmod 755 /var/qmail/rc
編輯 /var/qmail/rc
修改其中 ./Mailbox 成為 ./Maildir ,如下:
# !/bin/sh
# Using splogger to send the log through syslog.
# Using qmail-local to deliver messages to ~/Maildir by default.
exec env - PATH="/var/qmail/bin:$PATH"
qmail-start ./Maildir splogger q
其中 splogger qmail 指令是用來將紀錄文件紀錄於 / 中。
建立樣板
$ /var/qmail/bin/maildirmake /etc/skel/Maildir
$ echo ./Maildir/ > ~/.qmail
注意 Maildir 必須為該使用者所有,可以 chown 變更,並以 chmod 700 Maildir 設定權限。
7.安裝 ucspi-tcp-0.88
# tar zxvf ucspi-tcp-0.88.tar.gz
# cd ucspi-tcp-0.88
# make
# make setup check
執行檔將被安裝於 /usr/local/bin 中。
8.安裝 checkpassword
# tar zxvf checkpassword-0.81.tar.gz
# cd checkpassword-0.81
# make
# make setup check
# chmod og-rx /bin/checkpassword
執行檔 checkpassword 將被安裝於 /bin 中如果不對/etc/passwd中的用戶開放mail,不需要裝checkpassword,只要裝vpopmail
9.安裝 daemontools
# tar zxvf daemontools-0.70.tar.gz
# cd daemontools-0.70
# make
# make setup check
執行檔將安裝於 /usr/local/bin 中。安裝本工具後可以用
# mkdir /var/run/qmail
# supervise /var/run/qmail /var/qmail/rc
來啟動qmail,可以用svc來關閉活重起qmail,用svstat監視qmail運行情況,(qmail FAQ)
10.安裝 vpopmail
# groupadd vchkpw
# useradd -g vchkpw vpopmail
# mkdir ~vpopmail/etc
# echo ":allow" > ~vpopmail/etc/tcp.smtp
# tar zvfz vpopmail-4.9.6-1.tar.gz
# cd vpopmail-4.9.6-1
# ./configure --enable-roaming-users=y --enable-default-domain=mydomain.com --enable-passwd=n
# make
# make install-strip
# crontab -e
40 * * * * /home/vpopmail/bin/clearopensmtp 2>&1 > /dev/null
# cd /home/vpopmail/bin
# ./vadddomain mydomain.com mydomain
append mydomain.com to /var/qmail/control/rcpthosts
11.從Sendmail向Qmail遷移
如果你的系統以前安裝使用著Sendmail,就需要進行下面的步驟:
11.1.首先找到Sendmail的啟動程序,一般是在/etc/rc.d目錄中,看上去像這樣的命令:“sendmail -bd -q15m”,將其注釋掉。
11.2. 殺掉Sendmail進程。如果Sendmail有子進程,可以反復用-STOP和-CONT信號殺,直到沒有子進程後用-TERM後加-CONT殺就可以了。
11.3. 檢查E-mail隊列中是否還有信,如果認為有必要將它們發送出去,可以在以後一段時間不定期地運行“sendmail.bak -q”,直到隊列清空。
11.4. 去掉Sendmail等文件的setuid bit:
# chmod 0 /usr/lib/sendmail
# chmod 0 /usr/sbin/sendmail
# chmod 0 /usr/lib/sendmail.mx
# mv /usr/lib/sendmail /usr/lib
/sendmail.bak
# mv /usr/sbin/sendmail /usr
/sbin/sendmail.bak
11.5. 將csh -cf ′/var/qmail/rc &&′添加到啟動文件中去。
11.6. 安裝Qmail的Sendmail外殼:
# ln -s /var/qmail/bin/sendmail /usr/lib/sendmail
# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
11.7. 虛擬域與虛擬用戶。
將虛擬域名加入/var/qmail/
control/local和/var/qmail/control/rcpthosts 。然後在/var/
qmail/control/virtualdomains中加入your.virtual.domains:youracct。
這樣,所有發往
[email protected]的郵件都將以
[email protected]的形式發給youracct。VmailMgr是一個Qmail的增強工具,它擴展了Qmail的口令驗證功能,使用戶可以通過POP3 及IMAP訪問自己的虛擬郵箱,我們將在以後的內容中重點介紹VmailMgr。
12.激活qmail SMTP , POP3 daemon 系統服務
建立 SMTP 轉信規則
建立 /etc/tcp.smtp 內容為
:allow
此為接受任何Client端所發出之轉送信件
若要拒絕某些IP所發出之Relay則改為 /etc/tcp.smtp如下
1.2.3.4:allow,RELAYCLIENT=""
127.:allow, RELAYCLIENT=""
如此,除1.2.3.4及127.*之外的所有地址,都將被拒絕轉送信件。
接下來,轉換 tcp.smtp 成為 cdb 格式。
# /usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
注意:若對 tcp.smtp 有任何變更,都必須經過 tcprules 轉換成為 cdb 才會生效。另外,tcp.smtp 若為空白,則表示拒絕所有的轉送,因為預設的規則為 deny。至此,轉送規則已建立,稍後將依此規則激活 qmail-smtpd。
設定 SMTP 及 POP3 daemon 之激活
請移除 inetd.conf 中有關 smtp 及 pop3 的設定 (加上 # 號)
編輯 /etc/services,改為以下設定:
smtp 25/tcp mail
# pop-3 110/tcp #pop version 3
# pop-3 110/udp
pop3 110/tcp
pop3 110/udp
激活 SMTP:
/usr/local/bin/tcpserver -v -x /etc/tcp.smtp.cdb
-u UID -g GID 0 smtp /var/qmail/bin/qmail-smtpd 2>&1
/var/qmail/bin/splogger smtpd 3 &
其中UID和GID為前述新增 qmail 系統帳號之 qmaild 之 User ID,
smtp 25/tcp mail
# pop-3 110/tcp #pop version 3
# pop-3 110/udp
pop3 110/tcp
pop3 110/udp
激活 SMTP:
/usr/local/bin/tcpserver -v -x /etc/tcp.smtp.cdb
-u UID -g GID 0 smtp /var/qmail/bin/qmail-smtpd 2>&1
/var/qmail/bin/splogger smtpd 3 &
其中UID和GID為前述新增 qmail 系統帳號之 qmaild 之 User ID,