- 论坛徽章:
- 0
|
我是如何解决qmail的openrelay的问题并处理好漫游用户的
李润安 msn:leera#163.net
首先要感谢国内的两位前辈:大麻和iceblood,他们为大家做出了很多贡献。
另外我参阅了以下文档:
- http://www.pipeline.com.au/staff/mbowe/isp/webmail-server.htm
- http://www.chinaemail.com.cn/peizhi/ShowArticle.asp?ArticleID=2630
- http://www.lifewithqmail.org/
- http://www.qmail.org
复制代码
首先大家看看自己管理的邮件服务器是不是openrelay的吧
http://www.spamhelp.org/shopenrelay/
填入你的邮件服务器的ip地址,提交再等一会,就有结果了。
如果你的服务器是openrelay的,那么你需要好好看一下以下的文档了
什么是openrely
Openrelay的邮件服务器不需要smtp用户验证就可以给其他邮件服务器发送邮件,也就是说网上任何一个人都可以用你的邮件服务器给任何地址发信。
Open relay有啥坏处
垃圾邮件制造者们会不断的发现网上的openrelay服务器,然后利用openrelay 的服务器发送大量的垃圾邮件,这会对你的邮件收发速度,带宽,磁盘,cpu等造成很大影响。最重要的是垃圾邮件防护联盟会把你的服务器列入openrely server黑名单,造成你可能再也不能给受保护的服务器发邮件了
首先看看
- /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里面去。
比如:
- http://www.mail-abuse.com/an_sec3rdparty.html#Qmail
- http://www.qmail.org/open-smtp.tar.gz
- http://untroubled.org/relay-ctrl/relay-ctrl-3.1.1.tar.gz
复制代码
都是这样的解决办法
2) 通过vpopmail 来解决,vpopmail安装的时候有选项,支持漫游用户。只要用户一收信件,马上将ip地址记载入mysql数据库,这个ip地址就有权利relay了。我觉得这个解决方案不错,毕竟没有手工修改qmail的代码,便于以后的升级
OK,看看我的操作过程:
- cd /usr/local/src/vpopmail-5.4.10
- ./configure \
- [color=Red] --enable-roaming-users=y \
- --enable-tcprules-prog=/usr/local/bin/tcprules \
- --enable-tcpserver-file=/etc/tcp.smtp \
- --enable-relay-clear-minutes=1440 \[/color]
- --enable-logging=p \
- --disable-passwd \
- --enable-clear-passwd \
- --disable-domain-quotas \
- --enable-auth-module=mysql \
- --enable-auth-logging \
- --enable-sql-logging \
- --enable-valias \
- --disable-mysql-limits \
- --enable-incdir=/data/app/mysql/include \
- --enable-libdir=/data/app/mysql/lib
复制代码
注意上面加了红字的代码,漫游用户需要enable这些。1440代表24小时,就是说用户认证1次后,24小时内都可以用这个ip地址relay。
- make clean;make;make install-strip
复制代码
#make clean 删除以前编译过的二进制文件
- vi /var/qmail/supervise/qmail-smtpd/run
- #确认qmail用的是/etc/tcp.smtp.cdb
- …tcpserver … -x /etc/tcp.smtp.cdb …
复制代码
- qmailctl cdb
- qmailctl restart
复制代码
再认证的时候如果提示密码不对,可能是vpopmail用户没有create数据表的权限,开放权限,或者手工创建表就可以了:
- CREATE TABLE "relay" (
- "ip_addr" char(18) NOT NULL default '',
- "timestamp" char(12) default NULL,
- PRIMARY KEY ("ip_addr")
- );
复制代码
到数据库里面去看看:
建立了relay数据表
这样,你的用户只要通过pop3收信1次以后,在指定的时间内就可以relay了。
但是有以下问题:你的用户在上线后,没有pop3收信就去smtp发信,理论上可能会有问题,但我确实还没有碰到,因为我记得outlook打开以后默认就会先去pop3收信,总之,这种办法不失为一种好的解决办法。当然了,希望qmail以后能够向vpopmail一样提供漫游的编译选项,也好让我们这些管理员省点事情。
欢迎大家指正,谢谢。 李润安 leera2008#yahoo.com.cn
[ 本帖最后由 leera 于 2006-1-23 19:48 编辑 ] |
|