邮件发送和接收协议的问题

2013-01-18 15:47:07 +08:00
 sunsongxp
我们知道SMTP协议用来发送邮件,比如smtp@gmail.com,通过自己的帐户认证就可以从a@gmail.com到b@domain.com;我们还知道POP协议用来检索自己的邮箱信件。

问题来了

1、gmail在收到用户通过smtp协议发送的邮件后,肯定转发到domain.com的smtp服务器上,那么domain.com的服务器是不是不需要来自Gmail服务器的认证信息(因为domain.com没法确认来自XXX@gmail.com的邮件是不是本人发出),直接明文发送内容为from ... to... Subject... Content这样的邮件。

2、如果domain.com需要来自gmail邮箱的身份确认,那么确认的机制是什么(SSL只能认证对方的身份,自己主动连接对方服务器的时候出示client的证书)?

3、如果无法确认,是不是可以这样理解,gmail用户发送到gmail服务器通过的是SMTP协议,并且有身份认证,但是两个电子邮箱服务器之间,虽然也是使用SMTP服务器,但是没有身份认证?

4、如果3是正确的,那么我是不是可以直接使用SMTP协议,伪造一个 admin@admin.com ,然后直接发送到 b@domain.com ?
4068 次点击
所在节点    程序员
10 条回复
sunsongxp
2013-01-18 15:48:13 +08:00
更新下,是smtp.gmail.com不是smtp@gmail.com
cloudcn
2013-01-18 16:01:09 +08:00
关键是怎么伪造呢?
就像伪造ip一样,说起来简单。
BOYPT
2013-01-18 16:16:25 +08:00
SMTP服务器之间没有严格的身份认证机制,因为协议太古老,必须向下兼容,只有通过一些侧面去猜测是不是,最常见有是:

1. domian.com发来SMTP的来源IP,和domian.com的域名解释是否相近;
2. 来源IP是否可以revert-dns查询到记录;
3. domian.com是否包含SPF记录;
BOYPT
2013-01-18 16:17:55 +08:00
这些属于反垃圾邮件规则了,因为最开始的SMTP发信就是随便扔的,垃圾邮件泛滥后才开始有这些规则出现,但是SMTP依然不变。
sunsongxp
2013-01-18 16:25:00 +08:00
感谢@BOYPT的回复,我刚才找到一篇博客

http://php.js.cn/blog/smtp-mail/

上面写明了,原来接受方的mail server会检查发送方mail server的DNS记录中spf记录,比如文中例子:

“首先需要设置 php.js.cn 域名的 txt 记录为:v=spf1 ip4:173.230.145.228 ~all 。意思是增加一个spf记录,允许173.230.145.228ip发送邮件。邮件服务器收到邮件的时候会检查这个。”

这样一句话就解释了所有问题
sNullp
2013-01-18 16:31:19 +08:00
但事实上伪造一个没有SFP记录的domain的邮件,比如 admin@v2ex.com 发到gmail,是完全可行的。
jackyz
2013-01-18 17:12:18 +08:00
对,所以防止邮件被放到垃圾里的要点就是做 IP 地址的 DNS 反向解析。否则就会被高度怀疑为垃圾邮件。
swulling
2013-01-18 17:20:00 +08:00
@sunsongxp 那是垃圾邮件泛滥后的解决办法,但是不是SMTP标准

所以依然可以伪造邮件,只不过容易被各大邮件服务提供商标记为垃圾邮件而已
lqs
2013-01-18 17:59:51 +08:00
我们学校以前的邮件系统,写邮件界面的『发件人』一栏是个文本框可以随便填邮箱。
gamexg
2013-01-19 17:42:37 +08:00
确认机制 DKIM (域密钥识别邮件)技术
http://www.ifanr.com/180826

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/58010

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX