[ 永遠的UNIX::UNIX技術資料的寶庫 ]   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論壇

相關文章

======
 

★  樊強制作 歡迎分享  ★