LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 691|回复: 3

qmail邮件发送认证的问题

[复制链接]
发表于 2003-12-29 10:28:33 | 显示全部楼层 |阅读模式
如何才能只让合法用户通过邮件服务器发送邮件,不至于让我的邮件服务器成为垃圾邮件的源头呢????对于转发的概念我有点不清楚,tcp.smtp里面设置的RELAYCLIENT和allow有啥不同??谢谢指点
发表于 2003-12-29 11:00:10 | 显示全部楼层
我用这篇配置成功的smtp认证(中国Linux论坛)



带SMTP认证功能的qmail配置

taoran [本站会员]

                                             
                  

一、操作系统

    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




  
中国Linux论坛 版权所有
 楼主| 发表于 2003-12-29 13:56:09 | 显示全部楼层
文章倒是很好,就是那个关键的C文件没法下载。站点不可用!能麻烦你告诉我哪里有下么?
发表于 2003-12-30 15:10:10 | 显示全部楼层
非常抱歉,我没有验证过那个连接
http://www.nimh.org/dl/qmail-smtpd.c
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表