免费注册 查看新帖 |

Chinaunix

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

[Mail] Linux下Sendmail在Mail Relay过程中的进一步探讨 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-06-07 21:47 |只看该作者 |倒序浏览
这一段时间一直在忙着做反垃圾邮件这方面的工作, 对于这方面有了一些想法同时也实现了预期的功能, 但是仍旧在某些网站的个别案例会存在问题,下面列出来一齐进行探讨.
1. 我把Sendmail放在网关机上, 并且使用iptables让所有外出端口指向25的都指向到本地, 也就是本地的sendmail.
2. sendmail 接收到邮件以后进行分析监查是否为垃圾邮件或者不允许外发的邮件, 否则不予通过.
3. 当检测通过以后, 使用sendmail的relay机制把邮件直接发送到邮件接收者的邮件服务器.
4. 我使用的是linux, 而且用的是sendmail的最新版8.12.11, 经过一段时间的测试, 一切正常.
但是现在出现了一些小的问题, 就是当邮件的发送者和接收者同为163.com, 或者126.com等其它个别域名的时候, 就会发不出去,返回的消息也都基本差不多, 大多数是
550 <aaa@abc.com>;: Invalid User       说明:aaa@abc.com为发送者的邮箱地址
后来想了很多的办法, 也都无济于事, 其实我的这个做法有点类试于很多的邮件快递的机制, 同时他们也都存在这样的情况.看来这就是abc.com 域邮件服务器可能禁止掉了使用他们的有效用户进行relay了, 但是我现在仍旧不相信就没有办法解决它, 所以期待进一步探讨.
:em12:

论坛徽章:
0
2 [报告]
发表于 2004-06-07 22:56 |只看该作者

Linux下Sendmail在Mail Relay过程中的进一步探讨

telnet m133.163.com 25

220 Coremail SMTP(Anti Spam) System (163com[20030606])
helo myogd.com
250 192.168.1.133
mail from:rhinofly@oss4e.net
250 Ok
rcpt to:hackerbay@163.com
250 Ok
data
354 End data with <CR>;<LF>;.<CR>;<LF>;
gogogogo
.
250 Ok: queued as LsA4G1iBxEBAALsC.1
quit
221 Bye


失去了跟主机的连接。


220 Coremail SMTP(Anti Spam) System (163com[20030606])
helo ggg.com
250 192.168.1.133
mail from:mygodqwer1@163.com
550 <mygodqwer1@163.com>;: Invalid User
mail from:hackerbay@163.com
550 <hackerbay@163.com>;: Invalid User
mail from:postmaster@263.net
250 Ok
rcpt to:hackerbay@163.com
250 Ok
data
354 End data with <CR>;<LF>;.<CR>;<LF>;
goto hell.
.
250 Ok: queued as EYI4G6SBxEBWALsC.1
quit
221 Bye


失去了跟主机的连接。

论坛徽章:
0
3 [报告]
发表于 2004-06-07 23:08 |只看该作者

Linux下Sendmail在Mail Relay过程中的进一步探讨

看上面的telnet测试,他不是禁止有效用户作mail from,而是禁止所有@163.com结尾的作mail from;

你可以参考 这个帖子的讨论 http://bbs.chinaunix.net/forum/14/20040605/341477.html

我已经提出了在postfix下的实现思路。

作这个限制的初衷不知道是什么,不过他得到的一个效果是,163.com自己的用户是不能通过163.com的MX server发信的,MX server只用于接收来自其他域的信;163.com自己的用户发信必须使用专门提供的smtp.163.com这个服务器(发信必须作smtp验证),这个服务器不是163.com的mx server。

由于这个限制是在163.com的mx server上实现的,所以你无法在sendmail里突破它;

你可以考虑设置静态邮件路由,让发给163.com的信都发给smtp.163.com,同时你还得修改semdnail,让其代理用户去作smtp验证;我不知道sendmail有没有这样的功能。

论坛徽章:
0
4 [报告]
发表于 2004-06-08 10:20 |只看该作者

Linux下Sendmail在Mail Relay过程中的进一步探讨

[root@ljf code1]# telnet m209.163.com 25
Trying 202.108.44.209...
Connected to m209.163.com.
Escape character is '^]'.
220 Coremail SMTP(Anti Spam) System (163com[20030606])
EHLO abc.com
250-192.168.1.209
250-PIPELINING
250-ETRN
250-AUTH LOGIN PLAIN NTLM
250-AUTH=LOGIN PLAIN NTLM
250 8BITMIME
quit
221 Bye
Connection closed by foreign host.
[root@ljf code1]#
看见了没有,这里它的mx接收邮件的时候也需要认证, 为什么要含有呢?
另外如果让sendmail代理用户去作smtp验证, sendmail是作不到的,当然我可以通过修改源码做到这一点, 但是我作这个不是只为163.com的用户作的, 而是为所有的邮箱用户做的, 而有很多的还是不需要验证的.
事实上要这么作是仅仅让sendmail 做一个proxy, 这个我通过其它程序早就可以实现了, 但是它少了很多的机制, 比如说邮件队列等等, 我是想使用sendmail的很多高级的功能才借用它的.

论坛徽章:
0
5 [报告]
发表于 2004-06-08 10:26 |只看该作者

Linux下Sendmail在Mail Relay过程中的进一步探讨

另外我借鉴过一个邮件快递的功能, 它是这么做的,如下:
[root@ljf code1]# telnet m209.163.com 25
Trying 202.108.44.209...
Connected to m209.163.com.
Escape character is '^]'.
220 Coremail SMTP(Anti Spam) System (163com[20030606])
HELO abc
250 192.168.1.209
MAIL FROM: <onetwo@163.coml>;
250 Ok
RCPT TO: <computer1and2@163.com>;
250 Ok
DATA
354 End data with <CR>;<LF>;.<CR>;<LF>;

dfksjf
.
250 Ok: queued as YkHYQyYjxUAOAH0k.1
quit
221 Bye
Connection closed by foreign host.
[root@ljf code1]#
看见没有,他修改了mail from的值, 另外他在data的时候而保持From域值不变,但事实上还是变了, 这样作非常的不妥.

论坛徽章:
0
6 [报告]
发表于 2004-06-08 10:52 |只看该作者

Linux下Sendmail在Mail Relay过程中的进一步探讨

  1. 看见了没有,这里它的mx接收邮件的时候也需要认证, 为什么要含有呢?
复制代码


用foxmail试了一下;

那个ehlo的回馈只表示服务器支持smtp auth,并不是要求通过此MX server发送给@163.com需要auth;相反,如你说的,如果试图mail from:abc@163.com rcpt to:def@163.com 是不行的,即使你使用真实的帐户通过了smtp auth,mx server一样拒绝,报告非法用户。

快递程序的做法,对于163.com来说,可谓道高一尺,魔高一丈;如果163.com使用更严格的mx检查和mail from检查,这个做法就不行了。

论坛徽章:
0
7 [报告]
发表于 2004-06-08 11:23 |只看该作者

Linux下Sendmail在Mail Relay过程中的进一步探讨

[root@ljf code1]# telnet m83.126.com 25
Trying 202.108.45.83...
Connected to m83.126.com.
Escape character is '^]'.
220 Coremail SMTP(Anti Spam) System (126com[030901])
HELO abc.com
250 mx4
AUTH LOGIN
334 VXNlcm5hbWU6
YmlyZGllbHU=
334 UGFzc3dvcmQ6
NzkwNTMx
235 Authentication successful
MAIL FROM: <birdielu@126.com>;
550 <birdielu@126.com>;: Invalid User
QUIT
221 Bye
Connection closed by foreign host.
[root@ljf code1]#
这个是指向126的mx地址, 认证通过了,但是 mail from 仍然是错误的,的确是这个样子,而且我以前也这样测试过很多次, 但是它的mx具有认证机制肯定不是凭空就支持的, 它是有它的作用的, 对不对?
这个问题就距离我本身的问题有点近了, 我个人认为,他这里的认证是对relay主机的认证, 而不是对一个用户的认证, 也就是说, 它认证的是当邮件的发送者是本地域名(126.com)的时候,就开始检测是否是它们的认证主机转发过来的,然后进行通过.如果是这样的话,那么问题就简单了, 我的主机如果通过了它的认证,其不是也可以发送它的域名的用户到它的域名的用户了.

论坛徽章:
0
8 [报告]
发表于 2004-06-10 22:12 |只看该作者

Linux下Sendmail在Mail Relay过程中的进一步探讨

要实现这样的功能可以用postfix实现
postfix的smtp支持smtp认证,你可以按照postfix的文档来作。
http://learn.tsinghua.edu.cn/homepage/2001315450/mutt.html

很早前看过这篇文档,没想到今天搜索一下,第一篇就是。

然后在master.cf中加一项
smtp2163 smtp -o smtp_sasl_auth_enable=yes -o smtp_sasl_password_maps=hash:/etc/postfix/sasl_passwd -o smtp_sasl_security_options= -o relayhost=mails.tsinghua.edu.cn


然后编辑transport
163.com            smtp2163:


postmap transport

postfix reload
就可以测试了。

论坛徽章:
0
9 [报告]
发表于 2004-06-11 09:08 |只看该作者

Linux下Sendmail在Mail Relay过程中的进一步探讨

不知道它这是通过什么机理来实现的呢?我们能探讨一下吗?

论坛徽章:
0
10 [报告]
发表于 2004-06-11 11:56 |只看该作者

Linux下Sendmail在Mail Relay过程中的进一步探讨

就是163.com不允许本地用户发给本地用户的时候不做smtp auth。
postfix的 smtp可以在发信的时候实现这个功能,所以对于所有163.com
的信件都启动smtp auth,这样信就可以发过去了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP