关于SPF与SRS

SPF很多人都知道,Sender Policy Framework,用来标识邮件发送身份。例如,gmx.net的SPF记录:

v=spf1 ip4:213.165.64.0/23 ip4:74.208.5.64/26 ip4:212.227.126.128/25 ip4:212.227.15.0/25 ip4:212.227.17.0/27 ip4:74.208.4.192/26 ip4:82.165.159.0/24 -all

这说明,只有从上述IP地址段发送出去的gmx.net域的信件,才是合法信件。非上述IP段发送的信件,其他MTA可以拒收。

我在之前的博文里写过,个人并不喜欢SPF,它会带来一些问题,一个明显问题就是邮件转发。例如,考虑如下转发情况:

[email protected]发送邮件给[email protected],pobox转发给[email protected]。如果orig.com设置了SPF,而pobox.com在转发时,仍然使用了[email protected]这个envelope地址,那么如果thrid.com检查SPF,则这封邮件会违背SPF,有可能被拒收。

当然,pobox绝不会这么干,pobox的创始人是SPF发明者之一,他不会蠢到发明一条规则来把自己的业务干掉。我个人也有个pobox.com地址,作为专业邮件人士,我也认可pobox的邮件转发服务的确牛叉。所以,针对这种情况,产生一种新的协议,叫做SRS,即Sender Rewriting Scheme

SRS如何工作,简言之就是在转发时,改写发送者地址,如下图:

[email protected]发送邮件给[email protected],pobox转发给[email protected]。但是在转发时,pobox改写了envelope地址,即mail from不再是[email protected],而是[email protected]。这个sender是pobox自己域的,并且从pobox自己的IP发送,所以不会违背SPF。

如果[email protected]产生退信,那么pobox的系统,会从这个改写过的地址里,还原出原始发信人的地址[email protected],并且将退信转发给原始发信人。改写的地址里yf09和Cw是什么含义,见如下描述:

To prevent bad guys from using forwarders as an open relay, SRS adds a hash (yf09). It also adds a timestamp (Cw) which causes addresses to expire.

还有种情况是多重转发,例如A转发给B,B转发给C,这种情况如何处理?见如下示意图:

接以前的流程,[email protected]收到信后,再转发给[email protected],fourth.com再转发给[email protected]。third.com和fourth.com在转发时,envelope地址变成上述标红的两个。

第2次、第3次转发时,envelope地址里首位标记变成了SRS1,而第一个转发的标记是SRS0。SRS0告诉后来者,SRS已经发生了。后来者在再次转发时,将这个标记改为SRS1。还有个重要地方,后来的转发者,在envelope地址里加上第一个转发者的域名,如果发生退信,直接退给第一个转发者。最后,envelope里的sender domain,当然要改成自己的域名,这是SRS最基本的作用。

对于专业邮件提供商,要在MTA里实现SRS标准,有个SRS Library Implementations可以利用。如果是个人或小型邮件提供者,可以利用srs这个工具,如图:

互联网上大多数MTA并没有执行SRS,所以不要轻易使用人家的转发工具,包括Namecheap、Tuffmail这样的知名邮件商。而像Pobox、Gmail这样的技术型倡导者,是实现了SRS的,可以放心使用。

此条目发表在Common分类目录,贴了标签。将固定链接加入收藏夹。