如何在Qmail里配置SMTP
在Qmail里配置SMTP不復(fù)雜,請看下文。
一、操作系統(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) 關(guān)鍵文件
其實,qmail和checkpassword都可以是編譯好的,并正在使用中的。這樣只需一個文件就可以搞定,
而且不影響正常使用。
三、軟件的安裝
1、正常安裝qmail,checkpassword 或 vpopmail 。
2、設(shè)置relay規(guī)則。
relay的意思是:服務(wù)器接受客戶端的smtp請求,將客戶端發(fā)往第三方的郵件進(jìn)行轉(zhuǎn)發(fā)。
relay 必須是可控制的。qmail下控制relay很簡單,只要客戶端接入的smtp進(jìn)程的環(huán)境變量里
包含(RELAYCLIENT="")就允許relay ,否則拒收。實現(xiàn)方法是在/etc/tcp.smtp 里對需要relay
的IP逐條設(shè)置(RELAYCLIENT=""),然后用tcprules 生成規(guī)則表。因為本文要實現(xiàn)SMTP認(rèn)證后的
relay ,不需要對任何IP進(jìn)行預(yù)先設(shè)定,所以默認(rèn)規(guī)則設(shè)置成“只對本服務(wù)器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有關(guān)的命令)
./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、設(shè)置 /bin/checkpassword 或 /home/vpopmail/bin/vchkpw 可以SetUID和SetGID。這點
很重要,否則認(rèn)證無法通過。這是因為smtpd 的進(jìn)程是由qmaild 執(zhí)行的。而密碼驗證程序
原來只使用于pop3進(jìn)程,分別由root或vpopmail執(zhí)行,為的是讀shadow或數(shù)據(jù)庫中的密碼,
并取出用戶的郵件目錄。這些操作qmaild 都沒有權(quán)限去做。如果smtp進(jìn)程要調(diào)用密碼驗證
程序,則必須要使用 setuid 和setgid 。其實這點大可放心,這兩個密碼驗證程序都是帶
源代碼的,本身非常安全,只需要放在安全的目錄里就可以了(設(shè)置其他用戶除qmaild 可
執(zhí)行外都沒有權(quán)限執(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〈回車>
如果結(jié)果顯示的是用戶目錄,說明成功了;如果顯示"-ERR authorization failed",除檢查
密碼外,還要檢查用戶上級的各個目錄是否可讀,還有密碼驗證程序的權(quán)限是否設(shè)置正確。
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進(jìn)程,啟動新的smtpd進(jìn)程。
9、在客戶端上使用 OutlookExpress 和 Netscape 4.6 以上版本的郵件軟件進(jìn)行檢驗。
四、以上設(shè)置在 checkpassword 和 vpopmail 兩種驗證方式下均已實踐通過。
通過上文的介紹,我們都知道了如何在Qmail里配置SMTP,希望對大家有所幫助!
【編輯推薦】