今天有客户打电话来,说不能发送邮件给我们,总是被退回,赶紧去服务器上翻了一下日志,大概列出部分内容如下:
(原文链接 http://ddbiz.com/?p=229)
...
2008-11-05 14:59:56.376147500 qmail-smtpd: spf-reject: HELO(ppt.com) from 220.168.182.245. MAILFROM:[email protected]
2008-11-05 15:16:39.026731500 qmail-smtpd: spf-reject: HELO(163.com) from 119.131.38.59. MAILFROM:[email protected]
2008-11-05 15:33:12.943852500 qmail-smtpd: spf-reject: HELO(ibm.com) from 220.168.176.161. MAILFROM:[email protected]
2008-11-05 16:52:05.517020500 qmail-smtpd: spf-reject: HELO(126.com) from 116.5.186.79. MAILFROM:[email protected]
2008-11-05 17:15:36.937319500 qmail-smtpd: spf-reject: HELO(ppt.com) from 220.168.182.245. MAILFROM:[email protected]
2008-11-05 17:42:48.931191500 qmail-smtpd: spf-reject: HELO(ibm.com) from 220.168.176.161. MAILFROM:[email protected]
2008-11-06 02:44:26.545103500 qmail-smtpd: spf-reject: HELO(ibm.com) from 220.168.182.67. MAILFROM:[email protected]
2008-11-06 04:00:36.046467500 qmail-smtpd: spf-reject: HELO(s1.mediagrade.com) from 209.188.84.148. MAILFROM:[email protected]
2008-11-06 04:07:57.727258500 qmail-smtpd: spf-reject: HELO(s1.mediagrade.com) from 209.188.84.148. MAILFROM:[email protected]
2008-11-06 06:32:27.099898500 qmail-smtpd: spf-reject: HELO(ibm.com) from 220.168.182.67. MAILFROM:[email protected]
2008-11-06 06:53:53.347006500 qmail-smtpd: spf-reject: HELO(ibm.com) from 220.168.182.67. MAILFROM:[email protected]
2008-11-07 04:39:26.862175500 qmail-smtpd: spf-reject: HELO(s1.mediagrade.com) from 209.188.84.148. MAILFROM:[email protected]
2008-11-07 04:48:58.700226500 qmail-smtpd: spf-reject: HELO(s1.mediagrade.com) from 209.188.84.148. MAILFROM:[email protected]
2008-11-07 09:16:31.707701500 qmail-smtpd: spf-reject: HELO(s1.mediagrade.com) from 209.188.84.148. MAILFROM:[email protected]
2008-11-05 14:59:56.319463500 CHKUSER accepted sender: from <[email protected]::> remote <ppt.com:unknown:220.168.182.245> rcpt <> : sender accepted
2008-11-05 14:59:56.376147500 qmail-smtpd: spf-reject: HELO(ppt.com) from 220.168.182.245. MAILFROM:[email protected]
2008-11-05 17:15:35.892904500 CHKUSER accepted sender: from <[email protected]::> remote <ppt.com:unknown:220.168.182.245> rcpt <> : sender accepted
2008-11-05 17:15:36.937319500 qmail-smtpd: spf-reject: HELO(ppt.com) from 220.168.182.245. MAILFROM:[email protected]
...
查证后知道,上面大多数被 spf-reject 的邮件确实是非法的spammers伪造邮件,如 [email protected],这些邮件都是spammers伪造的。但是也有正常的邮件,如: [email protected] 只不过对方发送来的helo的域名为 s1.mediagrade.com,而不是mediagrade.com,并且两个域名的ip地址也不同,尽管都是同一个ip段的。
看来客户最近在调整服务器,而新的服务器配置没有做SPF Record. 造成我的服务器认为对方被假冒了,从而拒收邮件。下面我们先大概讲解一下SPF的概念,因为我的邮件服务器是用的Qmail,所有就结合Qmail的配置来说吧。
SPF - Sender Policy Framework
SPF是一个基于DNS的 MX反向解析系统,采用在DNS内加入 SPF Record 的方式,用来指明只有域用户才被允许发送邮件。其目的是为了防止域用户的邮件地址被spammers伪造。
在Qmail中,SPF有4个配置文件(/var/qmail/control),一般系统漠然安装的话,会仅产生一个配置文件。
1. spfbehavior
spfbehavior是指明qmail系统是否启用反向解析。以前的qmail默认值是0(不启用),qmail-toaster 1.0.5以后,默认值就改为3. spfbehavior的取值意义为:
0: 不做SPF检查
1: 仅仅生成 Received-SPF 头,但是不阻止邮件投递
2: 如果DNS检查出现问题,则产生一个 temporary 错误
3: SPF解析错误是拒绝邮件,通常是指 deny
4: SPF解析出现 softfail 时,拒绝邮件
5: SPF解析出现 neutral 时,拒绝邮件
6: SPF解析过程出现任何错误,拒绝邮件
环境变量 SPFBEHAVIOR 会覆盖 spfbehavior 的配置文件。当客户的请求环境中被设置了 RELAYCLIENT 时,Qmail不会启用 SPF 检查.
2. spfrules
spfrules 配置文件指明,如果根据 spfbehavior 的设定,一封邮件在检查SPF失败后(包括 fail, softfail, neutral),再执行 spfrules 的设定;spfrules 每行都表明了一条规则,如:
include: spf.abc.com
include: jxx.ori.com
3. spfguess
spfguess 配置文件指明,如果邮件发送者的服务器没有提供SPF配置(如目前花生壳上所作的域名就不能设置SPF Record),Qmail将进行 spfguess 指明的检查。如:
a mx
a 仅接收域名(如 domain.com)的IP地址为其A记录发送出来的邮件
mx 允许接收域名(如 domain.com)的MX服务器发送的邮件,如果日后域名增加了其他的mx记录,这些mx记录将被自动列入允许范围
4. spfexp
spfexp是自定义一个解释语句,当邮件发送者的发送请求被拒绝时,此语句显示给发送者。如
550 SPF not exist.
以上设定了 Qmail 的 SPF检查规则。我们还需要为自己的邮件服务器(域名)设置 SPF 规则,这样在发往其他域的邮件时,可以让别的服务器对我们的域名进行判定,防止某些人冒用我们的地址发送邮件:
通过 http://old.openspf.org/wizard.html 可以为我们完成格式化的TXT记录,如果我们的域名是 domain.com, 则类似如下:
v=spf1 a mx a:sub1.domain.com mx:mail.domain.com ~all
其中: sub1.domain.com 是区别于domain.com的IP的另外一个或者几个IP(可以添加多项)
mail.domain.domain.com是domain.com的mx记录,此处也可以不用写,因为 spf1 a mx 已经允许 a, mx 的ip 发送邮件
~all 表明除了前面列出的 (a mx a:sub1.domain.com mx:mail.domain.com)的服务器,其他的服务器都不可以发送邮件
为邮件服务器设定SPF的更详细解释,可以参考另外一篇文章
(原文链接 http://ddbiz.com/?p=229)