如何在Qmail里配置SMTP
在Qmail里配置SMTP不復雜,請看下文。
一、操作系統(tǒng)
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規(guī)則。
relay的意思是:服務器接受客戶端的smtp請求,將客戶端發(fā)往第三方的郵件進行轉發(fā)。
relay 必須是可控制的。qmail下控制relay很簡單,只要客戶端接入的smtp進程的環(huán)境變量里
包含(RELAYCLIENT="")就允許relay ,否則拒收。實現方法是在/etc/tcp.smtp 里對需要relay
的IP逐條設置(RELAYCLIENT=""),然后用tcprules 生成規(guī)則表。因為本文要實現SMTP認證后的
relay ,不需要對任何IP進行預先設定,所以默認規(guī)則設置成“只對本服務器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 目錄下。為了與原來的執(zhí)行文件有區(qū)別,
這里把新的執(zhí)行文件改名為 qmail-smtpd.auth 。
5、設置 /bin/checkpassword 或 /home/vpopmail/bin/vchkpw 可以SetUID和SetGID。這點
很重要,否則認證無法通過。這是因為smtpd 的進程是由qmaild 執(zhí)行的。而密碼驗證程序
原來只使用于pop3進程,分別由root或vpopmail執(zhí)行,為的是讀shadow或數據庫中的密碼,
并取出用戶的郵件目錄。這些操作qmaild 都沒有權限去做。如果smtp進程要調用密碼驗證
程序,則必須要使用 setuid 和setgid 。其實這點大可放心,這兩個密碼驗證程序都是帶
源代碼的,本身非常安全,只需要放在安全的目錄里就可以了(設置其他用戶除qmaild 可
執(zhí)行外都沒有權限執(zhí)行;其實如果沒有其他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 兩種驗證方式下均已實踐通過。
通過上文的介紹,我們都知道了如何在Qmail里配置SMTP,希望對大家有所幫助!
【編輯推薦】