免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2069 | 回复: 2
打印 上一主题 下一主题

[Mail] 我是如何解决qmail的openrelay的问题并处理好漫游用户的(原) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-01-23 19:42 |只看该作者 |倒序浏览
我是如何解决qmail的openrelay的问题并处理好漫游用户的
李润安 msn:leera#163.net
首先要感谢国内的两位前辈:大麻和iceblood,他们为大家做出了很多贡献。

另外我参阅了以下文档:

  1. http://www.pipeline.com.au/staff/mbowe/isp/webmail-server.htm
  2. http://www.chinaemail.com.cn/peizhi/ShowArticle.asp?ArticleID=2630
  3. http://www.lifewithqmail.org/
  4. http://www.qmail.org
复制代码


首先大家看看自己管理的邮件服务器是不是openrelay的吧
http://www.spamhelp.org/shopenrelay/
填入你的邮件服务器的ip地址,提交再等一会,就有结果了。
如果你的服务器是openrelay的,那么你需要好好看一下以下的文档了

什么是openrely

Openrelay的邮件服务器不需要smtp用户验证就可以给其他邮件服务器发送邮件,也就是说网上任何一个人都可以用你的邮件服务器给任何地址发信。

Open relay有啥坏处

垃圾邮件制造者们会不断的发现网上的openrelay服务器,然后利用openrelay 的服务器发送大量的垃圾邮件,这会对你的邮件收发速度,带宽,磁盘,cpu等造成很大影响。最重要的是垃圾邮件防护联盟会把你的服务器列入openrely server黑名单,造成你可能再也不能给受保护的服务器发邮件了

首先看看
  1. /var/qmail/control/rcpthosts
复制代码
文件是否存在。
如果不存在,你的邮件服务器就是openrelay的

如何关掉openrelay
如果仅仅是关掉,那就很简单
1)        在/var/qmail/control/rcpthosts里面加入你的域名。
2)        修改/etc/tcp.smtp 把你的邮件服务器的使用者的静态ip地址填入

问题:
但是如果你的用户平时不是使用固定的ip地址连线的,比如ADSL,这种情况非常普遍。怎么办?qmail官方没有提供相关解决办法。
功能需求:没有smtp认证的外部用户不允许relay,用户smtp认证以后,读出该用户的ip地址,告诉qmail此地址可以relay。
目前的解决办法有2种:
1)        修改qmail smtp的checkpasswd.c 以找到这个ip并且加入到tcp.smtp.cdb里面去。
比如:
  1. http://www.mail-abuse.com/an_sec3rdparty.html#Qmail
  2. http://www.qmail.org/open-smtp.tar.gz
  3. http://untroubled.org/relay-ctrl/relay-ctrl-3.1.1.tar.gz
复制代码

都是这样的解决办法

2)        通过vpopmail 来解决,vpopmail安装的时候有选项,支持漫游用户。只要用户一收信件,马上将ip地址记载入mysql数据库,这个ip地址就有权利relay了。我觉得这个解决方案不错,毕竟没有手工修改qmail的代码,便于以后的升级

OK,看看我的操作过程:
  1. cd /usr/local/src/vpopmail-5.4.10

  2. ./configure \
  3. [color=Red]   --enable-roaming-users=y   \
  4. --enable-tcprules-prog=/usr/local/bin/tcprules   \
  5. --enable-tcpserver-file=/etc/tcp.smtp  \
  6. --enable-relay-clear-minutes=1440   \[/color]
  7. --enable-logging=p   \
  8. --disable-passwd   \
  9. --enable-clear-passwd   \
  10. --disable-domain-quotas   \
  11. --enable-auth-module=mysql   \
  12. --enable-auth-logging   \
  13. --enable-sql-logging   \
  14. --enable-valias   \
  15. --disable-mysql-limits   \
  16. --enable-incdir=/data/app/mysql/include   \
  17. --enable-libdir=/data/app/mysql/lib
复制代码

注意上面加了红字的代码,漫游用户需要enable这些。1440代表24小时,就是说用户认证1次后,24小时内都可以用这个ip地址relay。

  1. make clean;make;make install-strip
复制代码

#make clean 删除以前编译过的二进制文件

  1. vi  /var/qmail/supervise/qmail-smtpd/run
  2. #确认qmail用的是/etc/tcp.smtp.cdb
  3. …tcpserver … -x /etc/tcp.smtp.cdb …
复制代码

  1. qmailctl cdb
  2. qmailctl restart
复制代码


再认证的时候如果提示密码不对,可能是vpopmail用户没有create数据表的权限,开放权限,或者手工创建表就可以了:
  1. CREATE TABLE "relay" (
  2.   "ip_addr" char(18) NOT NULL default '',
  3.   "timestamp" char(12) default NULL,
  4.   PRIMARY KEY  ("ip_addr")
  5. );
复制代码


到数据库里面去看看:
建立了relay数据表
这样,你的用户只要通过pop3收信1次以后,在指定的时间内就可以relay了。
但是有以下问题:你的用户在上线后,没有pop3收信就去smtp发信,理论上可能会有问题,但我确实还没有碰到,因为我记得outlook打开以后默认就会先去pop3收信,总之,这种办法不失为一种好的解决办法。当然了,希望qmail以后能够向vpopmail一样提供漫游的编译选项,也好让我们这些管理员省点事情。

欢迎大家指正,谢谢。 李润安 leera2008#yahoo.com.cn

[ 本帖最后由 leera 于 2006-1-23 19:48 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-01-23 22:55 |只看该作者
楼主总结的挺好,有些问题来探讨一下。

open relay 就是可以从任何地址向任何地址发信,这个概念和 smtp 认证没什么关系。

关于关掉 open relay 的第二项,记录用户的静态 ip 地址,我觉得这不是必要的。

楼主所说的第二种方案的就是 POP-before-SMTP 的 relay 控制机制,这种机制1997年就开始有人用了,不过现在用的很少,因为 smtp 认证已经能满足漫游用户的需求了。

另外,感觉楼主的功能需求似乎太苛刻了。按照我的理解,只要外部用户能够通过 smtp 认证就应该可以 relay,不需要记录这位用户的 ip 然后再次验证再来 relay。

个人意见,仅供参考。

--

论坛徽章:
0
3 [报告]
发表于 2006-01-23 23:04 |只看该作者
谢谢指正:
外部用户能够通过 smtp 认证就应该可以 relay

但是,我的经验告诉我:
qmail的安装结束以后,并不是通过 smtp 认证,就可以relay了的,所以才出现了很多第三方工具smtp-relay-ctrl等
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP