设置SPF记录,防止邮件地址被盗用

因为某些原因,我的域名被各种广告机认为是企业域名,然后疯狂的给我群发各种代开发票偷税漏税的邮件。嗯,我就不说我真的不需要这些了。
由于更多的原因,我的邮箱是开启了“错误地址转发”功能的,也就是说如果给一个不存在的邮箱地址发送邮件,那么它会被投递到我的主邮箱中。方便我使用的同时也就导致了大量垃圾邮件的产生。
最近我频繁收到一些奇怪的退信,大致的意思就是我发到他们那边的邮件邮箱是不存在的。而我却压根没有发过那些邮件。检查了一下其中一封邮件,如下:

您好!您的邮件不能成功的递送到指定地址。这是一个永久的错误,因此不得不放弃继续递送。

<zengcheng@chinalightsolar.com>, the user's maildir is over the allowed quota (size : 105328857)

--- Below this line is a copy of the message.
Received: from SCWT-18.yinksoft.com ([115.63.10.56])
(envelope-sender <wljgipl9400@best33.com>)
by 192.168.16.101 with ESMTP
for <zengcheng@chinalightsolar.com>; Sun, 05 May 2013 03:25:13 +0800
Date: Sun, 5 May 2013 03:25:16 +0800
Subject:  Dz,
From: " " <Wljgipl9400@best33.com>
Reply-To: " " <Wljgipl9400@best33.com>
To: <zengcheng@chinalightsolar.com>
(以下省略)

很明显,我是不会有Wljgipl9400@best33.com这么一个邮箱的。看Received字段,有一个很神奇的域名:yinksoft.com。Google之,发现是一个垃圾邮件发送公司,鄙视。
稍微思考了一下,这封退信是这么到我的邮箱里面来的:这个叫yinksoft的公司(或者是它卖的软件)其中投递了一封邮件给zengcheng@chinalightsolar.com。而zengcheng这个倒霉鬼的邮箱早就被发爆掉了,所以chinalightsolar的邮件服务器就把这封邮件退回来了。那么退到哪里呢?好死不死的,这个yinksoft的发信软件把发件人地址填成了我域名下的邮箱wljgipl9400@best33.com。由于chinalightsolar是一个正规的邮件投递者,Gmail就没有把它当成垃圾邮件过滤,从而经过错误地址转发到达我的邮箱。
那么事情就很明显了,我的域名best33.com被盗用,盗用者伪装成我的域名下面的邮件地址给别人发送邮件。好吧,这种情况真够神奇的,由于SMTP的协议缺陷,这样做是完全没有问题的。那么要怎么解决呢?答案就是传说中的“SPF”记录了。
SPF记录的工作原理也很简单。把一条TXT记录加入到你域名下就能工作。工作的时候,接收邮件的服务器对你的DNS服务器进行查询,确认你的SPF记录,而后对SPF记录中记载的服务器进行查询,和收到邮件的IP地址比对就能确认这封邮件是不是你发送的。
由于SPF记录其实就是一条TXT记录,现在的主流解析商比如DNSPod都已经支持了。在@下的TXT记录下加入一句SPF记录就好了。我这里是Gmail的,其它邮箱的请查询你自己的提供商:
v=spf1 include:_spf.google.com ~all
只需这么一个记录就能将垃圾邮件阻挡在外啦~解析完成后可以自己dig查询一下:

$ dig best33.com txt

; <<>> DiG 9.9.2-P1 <<>> best33.com txt
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34100
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;best33.com.                    IN      TXT

;; ANSWER SECTION:
best33.com.             600     IN      TXT     "v=spf1 include:_spf.google.com ~all"

;; Query time: 102 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Fri May 10 13:47:00 2013
;; MSG SIZE  rcvd: 87

嗯,看起来毫无问题,尝试外发和收信都无压力,问题算是解决了。