[ 永遠的UNIX::UNIX技術資料的寶庫 ]   GB | BIG5

首頁 > 應用技術 > Qmail > 正文
帶SMTP認証功能的qmail配置
http://www.linuxforum.net 作者:陶然 (2001-04-21 16:58:41)
一、操作系統
 
    RatHat Linux 6.2
 
二、必需的軟件
    
   1、qmail-1.03 (www.qmail.org)
   2、checkpassword (cr.yp.to/checkpwd.html) 或  vpopmail (www.inter7.com/vpopmail)
   3、qmail-smtpd.c (www.nimh.org/hacks/qmail-smtpd.c) 關鍵文件
 
   其實,qmail和checkpassword都可以是編譯好的,並正在使用中的。這樣只需一個文件就可以搞定,
   而且不影響正常使用。
 
三、軟件的安裝
 
   1、正常安裝qmail,checkpassword 或 vpopmail 。
 
   2、設置relay規則。
           relay的意思是:服務器接受客戶端的smtp請求,將客戶端發往第三方的郵件進行轉發。
     relay 必須是可控制的。qmail下控制relay很簡單,只要客戶端接入的smtp進程的環境變量裡
     包含(RELAYCLIENT="")就允許relay ,否則拒收。實現方法是在/etc/tcp.smtp 裡對需要relay
     的IP逐條設置(RELAYCLIENT=""),然用tcprules 生成規則表。因為本文要實現SMTP認証的
     relay ,不需要對任何IP進行預先設定,所以默認規則設置成“只對本服務器relay”。
 
          echo '127.0.0.1:allow,RELAYCLIENT=""' > /etc/tcp.smtp
          /usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
 
   3、將qmail-smtpd.c 拷貝到qmail 的源文件目錄裡,最好先將原文件備份。
      單獨編譯 qmail-smtpd 。(vi Makefile;找到跟qmail-smtpd有關的命令)
 
          ./compile qmail-smtpd.c
 
          ./load qmail-smtpd rcpthosts.o commands.o timeoutread.o \
          timeoutwrite.o ip.o ipme.o ipalloc.o control.o constmap.o \
          received.o date822fmt.o now.o qmail.o cdb.a fd.a wait.a \
          datetime.a getln.a open.a sig.a case.a env.a stralloc.a \
          alloc.a substdio.a error.a str.a fs.a auto_qmail.o  `cat \
          socket.lib`
 
   4、將新生成的qmail-smtpd 拷貝到/var/qmail/bin 目錄下。為了與原來的執行文件有區別,
      這裡把新的執行文件改名為 qmail-smtpd.auth 。
   
   5、設置 /bin/checkpassword 或 /home/vpopmail/bin/vchkpw 可以SetUID和SetGID。這點
      很重要,否則認証無法通過。這是因為smtpd 的進程是由qmaild 執行的。而密碼驗証程序
      原來只使用pop3進程,分別由root或vpopmail執行,為的是讀shadow或數據庫中的密碼,
      並取出用戶的郵件目錄。這些操作qmaild 都沒有權限去做。如果smtp進程要調用密碼驗証
      程序,則必須要使用 setuid 和setgid 。其實這點大可放心,這兩個密碼驗証程序都是帶
      源代碼的,本身非常安全,只需要放在安全的目錄裡就可以了(設置其他用戶除qmaild 可
      執行外都沒有權限執行;其實如果沒有其他SHELL帳戶,也就不用這麻煩了)。
         
          chmod 4755 /bin/checkpassword  或
          chmod 4755 /home/vpopmail/bin/vchkpw
 
   6、命令行測試:
      如果使用的是vpopmail,要把下面的 /bin/checkpassword 換成 /home/vpopmail/bin/vchkpw 。
 
          #su - qmaild -c "/var/qmail/bin/qmail-popup localhost /bin/checkpassword  pwd"〈回車>
          +OK ,〈18789.978689240@localhost>
          user realuser〈回車>
          +OK
          pass password〈回車>
 
      如果結果顯示的是用戶目錄,說明成功了;如果顯示"-ERR authorization failed",除檢查
      密碼外,還要檢查用戶上級的各個目錄是否可讀,還有密碼驗証程序的權限是否設置正確。
 
   7、修改smtpd啟動命令行,原來是:
 
          /usr/local/bin/tcpserver  -H -R -l 0 -t 1  -c 100 -x/etc/tcp.smtp.cdb -u604 -g601 \
          0 smtp /var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd 3 & 
 
      (其中604是qmaild 的UID,601是qmaild 的GID),改為:
 
          /usr/local/bin/tcpserver  -H -R -l 0 -t 1  -c 100 -x/etc/tcp.smtp.cdb -u604 -g601 \
          0 smtp /var/qmail/bin/qmail-smtpd.auth /bin/checkpassword /bin/true 2>&1 \
          | /var/qmail/bin/splogger smtpd 3 & 
 
      如果使用的是vpopmail,要把上面的 /bin/checkpassword 換成 /home/vpopmail/bin/vchkpw 。
   
   8、KILL掉原來的smtpd進程,啟動新的smtpd進程。
   
   9、在客戶端上使用 OutlookExpress 和 Netscape 4.6 以上版本的郵件軟件進行檢驗。
   
四、以上設置在 checkpassword 和 vpopmail 兩種驗証方式下均已實踐通過。
 
 
 

陶然
2001/01/05 (http://www.fanqiang.com)
    進入【UNIX論壇

相關文章

======
 

★  樊強制作 歡迎分享  ★