|
 |
栏目导栏 |
|
| |
|
|
|
|
 |
资料搜索 |
|
| |
|
|
|
|
 |
热门文章 |
|
| |
|
|
|
|
 |
最新文章 |
|
| |
|
|
|
| |
| |
|
|
|
|
[ 作者: 加入时间:2006-07-09 01:08:38 来自:Linux联盟收集
] | |
|
一、操作系统sjDLinux联盟 sjDLinux联盟 RatHat Linux 6.2sjDLinux联盟 sjDLinux联盟 二、必需的软件sjDLinux联盟 sjDLinux联盟 1、qmail-1.03 (www.qmail.org)sjDLinux联盟 2、checkpassword (cr.yp.to/checkpwd.html) 或 vpopmail (www.inter7.com/vpopmail)sjDLinux联盟 3、qmail-smtpd.c (www.nimh.org/hacks/qmail-smtpd.c) 关键文件sjDLinux联盟 sjDLinux联盟 其实,qmail和checkpassword都可以是编译好的,并正在使用中的。这样只需一个文件就可以搞定,sjDLinux联盟 而且不影响正常使用。sjDLinux联盟 sjDLinux联盟 三、软件的安装sjDLinux联盟 sjDLinux联盟 1、正常安装qmail,checkpassword 或 vpopmail 。sjDLinux联盟 sjDLinux联盟 2、设置relay规则。sjDLinux联盟 relay的意思是:服务器接受客户端的smtp请求,将客户端发往第三方的邮件进行转发。sjDLinux联盟 relay 必须是可控制的。qmail下控制relay很简单,只要客户端接入的smtp进程的环境变量里sjDLinux联盟 包含(RELAYCLIENT="")就允许relay ,否则拒收。实现方法是在/etc/tcp.smtp 里对需要relaysjDLinux联盟 的IP逐条设置(RELAYCLIENT=""),然后用tcprules 生成规则表。因为本文要实现SMTP认证后的sjDLinux联盟 relay ,不需要对任何IP进行预先设定,所以默认规则设置成“只对本服务器relay”。sjDLinux联盟 sjDLinux联盟 echo '127.0.0.1:allow,RELAYCLIENT=""' > /etc/tcp.smtpsjDLinux联盟 /usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtpsjDLinux联盟 sjDLinux联盟 3、将qmail-smtpd.c 拷贝到qmail 的源文件目录里,最好先将原文件备份。sjDLinux联盟 单独编译 qmail-smtpd 。(vi Makefile;找到跟qmail-smtpd有关的命令)sjDLinux联盟 sjDLinux联盟 ./compile qmail-smtpd.csjDLinux联盟 sjDLinux联盟 ./load qmail-smtpd rcpthosts.o commands.o timeoutread.o sjDLinux联盟 timeoutwrite.o ip.o ipme.o ipalloc.o control.o constmap.o sjDLinux联盟 received.o date822fmt.o now.o qmail.o cdb.a fd.a wait.a sjDLinux联盟 datetime.a getln.a open.a sig.a case.a env.a stralloc.a sjDLinux联盟 alloc.a substdio.a error.a str.a fs.a auto_qmail.o `cat sjDLinux联盟 socket.lib`sjDLinux联盟 sjDLinux联盟 4、将新生成的qmail-smtpd 拷贝到/var/qmail/bin 目录下。为了与原来的执行文件有区别,sjDLinux联盟 这里把新的执行文件改名为 qmail-smtpd.auth 。sjDLinux联盟 sjDLinux联盟 5、设置 /bin/checkpassword 或 /home/vpopmail/bin/vchkpw 可以SetUID和SetGID。这点sjDLinux联盟 很重要,否则认证无法通过。这是因为smtpd 的进程是由qmaild 执行的。而密码验证程序sjDLinux联盟 原来只使用于pop3进程,分别由root或vpopmail执行,为的是读shadow或数据库中的密码,sjDLinux联盟 并取出用户的邮件目录。这些操作qmaild 都没有权限去做。如果smtp进程要调用密码验证sjDLinux联盟 程序,则必须要使用 setuid 和setgid 。其实这点大可放心,这两个密码验证程序都是带sjDLinux联盟 源代码的,本身非常安全,只需要放在安全的目录里就可以了(设置其他用户除qmaild 可sjDLinux联盟 执行外都没有权限执行;其实如果没有其他SHELL帐户,也就不用这么麻烦了)。sjDLinux联盟 sjDLinux联盟 chmod 4755 /bin/checkpassword 或sjDLinux联盟 chmod 4755 /home/vpopmail/bin/vchkpwsjDLinux联盟 sjDLinux联盟 6、命令行测试:sjDLinux联盟 如果使用的是vpopmail,要把下面的 /bin/checkpassword 换成 /home/vpopmail/bin/vchkpw 。sjDLinux联盟 sjDLinux联盟 #su - qmaild -c "/var/qmail/bin/qmail-popup localhost /bin/checkpassword pwd"〈回车>sjDLinux联盟 +OK ,〈18789.978689240@localhost>sjDLinux联盟 user realuser〈回车>sjDLinux联盟 +OKsjDLinux联盟 pass password〈回车>sjDLinux联盟 sjDLinux联盟 如果结果显示的是用户目录,说明成功了;如果显示"-ERR authorization failed",除检查sjDLinux联盟 密码外,还要检查用户上级的各个目录是否可读,还有密码验证程序的权限是否设置正确。sjDLinux联盟 sjDLinux联盟 7、修改smtpd启动命令行,原来是:sjDLinux联盟 sjDLinux联盟 /usr/local/bin/tcpserver -H -R -l 0 -t 1 -c 100 -x/etc/tcp.smtp.cdb -u604 -g601 sjDLinux联盟 0 smtp /var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd 3 & sjDLinux联盟 sjDLinux联盟 (其中604是qmaild 的UID,601是qmaild 的GID),改为:sjDLinux联盟 sjDLinux联盟 /usr/local/bin/tcpserver -H -R -l 0 -t 1 -c 100 -x/etc/tcp.smtp.cdb -u604 -g601 sjDLinux联盟 0 smtp /var/qmail/bin/qmail-smtpd.auth /bin/checkpassword /bin/true 2>&1 sjDLinux联盟 | /var/qmail/bin/splogger smtpd 3 & sjDLinux联盟 sjDLinux联盟 如果使用的是vpopmail,要把上面的 /bin/checkpassword 换成 /home/vpopmail/bin/vchkpw 。sjDLinux联盟 sjDLinux联盟 8、KILL掉原来的smtpd进程,启动新的smtpd进程。sjDLinux联盟 sjDLinux联盟 9、在客户端上使用 OutlookExpress 和 Netscape 4.6 以上版本的邮件软件进行检验。sjDLinux联盟 sjDLinux联盟 四、以上设置在 checkpassword 和 vpopmail 两种验证方式下均已实践通过。sjDLinux联盟
Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论 |
|
|
|
|
|