GB | BIG5
|
| 首頁 > 應用技術 > Qmail > 正文 |
 |
| Qmail技巧與提示 |
| 本文出自:http://linuxaid.com.cn 作者:iamafan (2002-01-29 21:00:41) |
以下是對Qmail的初學者的一些建議,都是由熱心的網友提供的。 文章來源:www.qmail.org
●必要時重啟你的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 <nelson@crynwr.com> http://www.crynwr.com/~nelson 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 (http://www.qmail.org/) # # Version: @(#) /etc/init.d/qmail 1.00 03-Sep-1997 # # Author: Larry Doolittle <ldoolitt@cebaf.gov> # derived from skeleton by Miquel van Smoorenburg, # <miquels@drinkel.nl.mugnet.org> # # 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't # 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/:.*//' <virtualdomains | cat - locals | sort >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 下運行,多危險!。
(http://www.fanqiang.com)
進入【UNIX論壇】
|
|
| 相關文章 |
|
===輝=== |
|
|
 |
★ 樊強制作 歡迎分享 ★ |