以下是對Qmail的初學者的一些建議,都是由熱心的網友提供的。
文章來源:
●必要時重啟你的Qmail,你會發現許多問題迎刃而解. :-) [John Mitchell]
●仔細檢查所有Qmail下文件、目錄的讀寫權限,確認是否滿足qmail的要求。 [John Mitchell]
●把你要使用的虛擬域名添加到 control/rcpthosts 文件中,否則發信者會收到服務器通知:”該域名不存在“。[John Mitchell]
●我在配置我的qmail系統時遇到一個令人發狂的問題,后來我才發現,我沒有給我的域名添加MX記錄!記住,DNS服務器的配置是重要的,特別是在使用了虛擬域名的時候。 [John Mitchell]
●如何限制別人濫用你的郵件列表You might want to limit posting to mailing lists.
●如果您想要限制你的郵件列表被濫用,你需要在郵件列表文件頭加入一個過濾程序。一種選擇是使用qmail的補丁程序 qlist ,你可以在官方站點qmail.org找到它。它會使用 pgp 來標記你的郵件信息,一個包含pgp標識的過濾的郵件列表大致如下:
|if grep "^-----BEGIN PGP MESSAGE-----$"; then exit 0; else exit 100; fi
|if grep "^-----END PGP MESSAGE-----$"; then exit 0; else exit 100; fi
|if pgp -f; then exit 0; else exit 100; fi
+list
&address
&address
...
只有郵件列表允許的用戶(假定是別名)才擁有pgp的密鑰?;蛘邽樾枰挠脩糁付ㄒ粋€密鑰文件。
另外一種過濾器通過檢查郵件,判斷是否來自本地用戶或者來自最近的qmail-smtpd進程。如果是本地用戶就允許通過,遠程站點的就退回該信件。它的形式如下:
|if grep Received: | tail +1l | grep.network; then echo
"This is a moderated list"; exit 100; fi
+list
&address
&address
...
如果不是本地系統的用戶,你可以分配一個別名(記得chmod 700 ~alias),使它能投遞到郵件列表。運行:
|grep -v ^Delivered-To: | forward LISTNAME
必須刪除 Delivered-To: 這行,否則將它放棄這個別名。
--
-russ
Crynwr Software sells network driver support | PGP ok
521 Pleasant Valley Rd. | +1 315 268 1925 voice | Peace, Justice, Freedom:
Potsdam, NY 13676-3213 | +1 315 268 9201 FAX | pick two (only mostly true
●control/virtualdomains應該包含合法的用戶名。如果你沒有在該文件中使用用戶名,這些就會由 ~alais 來處理。但是,如果你忘記使用它,而恰好創建了一個和別名同名的用戶,可能你會遇到意想不到的事情。這種情況下,使用別名代替真實用戶可以避免意外情況。 [Russ Nelson]
●當你將 .forward 轉換到 .qmail 文件時,在使用procmail這樣的過濾程序之前,一定記著先用preline處理。[Ira Abramov]
●preline是一個管道處理程序。在它處理郵件的時候,如果有某個程序關閉了標準輸入,preline就會中斷處理并給出錯誤信息:
deferral: preline:_fatal:_unable_to_copy_input:_broken_pipe/
如果你使用sendmail的vacation程序,你就會發現這個問題。請使用peter的程序來代替vacation program [ Peter Samuel]
●請從init.d 教本中啟動qmail [Larry Doolittle] 如下:
#
# qmail /etc/init.d script for qmail ()
#
# Version: @(#) /etc/init.d/qmail 1.00 03-Sep-1997
#
# Author: Larry Doolittle
# derived from skeleton by Miquel van Smoorenburg,
#
#
# Source function library.
. /etc/rc.d/init.d/functions
# See how we were called.
case "$1" in
start)
touch /var/lock/subsys/qmail
env - PATH="/var/qmail/bin:$PATH"
csh -cf qmail-start ./Mailbox splogger qmail &
# should limit RLIMIT_AS here, but bash apparently doesn
# know that exists. For now it is hacked into qmail-smtpd.
# 0.5M data should be plenty, resists DOS attacks
tcpserver -u 1911 -g 2081 0 smtp /var/qmail/bin/qmail-smtpd &
echo $! >/var/lock/subsys/qmail-smtpd
;;
stop)
killall qmail-send
kill `cat /var/lock/subsys/qmail-smtpd`
rm -f /var/lock/subsys/qmail-smtpd
rm -f /var/lock/subsys/qmail
;;
*)
echo "Usage: qmail {start|stop}"
exit 1
esac
exit 0
●創建 control/rcpthosts 文件的方法:
sed s/:.*// rcpthosts
[Russ Nelson]
●如果你想借助某些數據庫程序來投遞郵件,你可以這樣:創建一個 ~alias/.qmail-default 文件:
|if T=`X`; then forward $T; else
echo "Sorry, no mailbox here by that name (#5.1.1)";
exit 100; fi
所有都在一行。用你的程序代替X部分,這個程序應該用來查找用戶的。找到的話,返回0并打印目標地址,否則返回一個非零值。比如,你使用NIS來查找用戶,用下面這行代替X:
ypmatch $LOCAL aliases . [Russ Nelson]
●你可以使用形如incoming:outgoing的mapping文件,來實現搜索mailbox:
|if MAP=`grep -i "$LOCAL:" mapping` && T=`echo $MAP | awk -F: {print $2}` ;
then forward $T;
else echo "Sorry, no mailbox here by that name (#5.1.1)";
exit 100; fi
●某些系統日志調用TZ變量來標識郵件的時戳。而qmail的env會引起時戳錯誤,此時使用:
env - PATH="/var/qmail/bin:$PATH" TZ=CST6CDT qmail-start ./Mailbox splogger qmail
來啟動qmail。[Harald Hanche-Olsen]
●你有理由使用類sendmail的投遞,包括 .forward 文件和/var/spool/mail 郵件目錄, 使用下面的腳本:
#!/bin/sh
exec qmail-start |dot-forward .forward
|preline -f /bin/mail -f "$SENDER" -d "$USER" splogger qmail
這依賴于你系統的二進制郵件接口。當然,我不建議這么作,但需要保留/var/spool/mail 的可以使用qmail。
●假如你想使用僅允許本地投遞的私有的.qmail 文件, 你可以使用以下的測試(全在一行):
| if [ -n "`sed -n -e /invoked from network/p -e 2q`" ]; then exit 100; else exit 0; fi T
然后,看一下結果的頭行,如果郵件來自網絡遠程用戶,就退回它;否則表示來自本地用戶,轉發它。[John R. Levine]
●如果允許未知ip地址的用戶relay,這里對管理員有幾個建議:
1、使用安全的ip地址和端口,比起用戶密碼認證要安全的多。
2、如果你想要真正的安全,檢查你每一個本地客戶郵件的PGP簽名。毫不驚奇,對大多數用戶而言,PGP比XTND、XMIT補丁安全的多。
●Dan Bernstein 建議允許普通用戶通過ucspi訪問qmail-qread。建議使用如下腳本:
#!/bin/sh
exec /local/etc/tcpclient -RHl0 -- 127.0.0.1 20025 sh -c exec cat <&6
并啟動服務器:
tcpserver -u126 -g120 -R 127.0.0.1 20025 /var/qmail/bin/qmail-qread &
●使用tcpserver -Hl your.host.name 可以使qmail跳過對進入郵件的DNS查詢.對于外發郵件,使用control/smtproutes也可以做到這一點。
●如果你不想讓一份無法投遞的郵件在隊列里呆太久,你可以在 queue/info 目錄里運行
touch -d 1 week ago
來結束它的隊列生命周期。這樣,如果再次投敵不成功,這份郵件就會被退回。
●使用qmail-local的一個投遞到 動態Mailbox或者Maildir名 的方法:
|qmail-local "$USER" "$HOME" "$LOCAL" "" "nodeliver"
"$HOST" "$SENDER" "/你的/用戶/maildir/目錄/"
或許對編寫webmail很有用哦。
●如果你想對一臺裝好了qmail的Solaris系統作升級工作,記著刪除所有匹配 /etc/rc?.d/[SK]??sendmail(?表示通配符)的文件。否則,升級工作會恢復這些文件聯結,結果導致你的系統有兩個MTA運行--試想一下,sendmail和qmail爭用一個smtp端口?!
●如果你不喜歡在自己的home目錄下看見大量的.qmail 文件,可以使用 users/assign 把這些文件放到子目錄下
=vern:vern:2244:18:/home/vern:::
+vern-:vern:2244:18:/home/vern:s/::
.qmail 和 .qmail-default依然保留在home目錄下,其他放在 .qmails/ 下面。它將~/.qmail-foo 改變成 ~/.qmails/foo ,并清空了HOME目錄。
●將你的/usr/lib/linuxconf/redhat/perm 這個文件中的"/usr/sbin/sendmail"這一行刪除.這可以避免你使用linuxconf時帶來的安全漏洞。如果不這樣做,linuxconf 會將/var/qmail/bin/sendmail 設定成 suid 下運行,多危險!。