什么是spf-什么是 SPF 邮箱
spf 这玩意儿实际上是让邮件服务器在发信前先打个照相机,拍一张“我是哪位”的快照。
你看发个邮件,哪怕你用的是 Outlook 要么发邮件工具,最终都要经过一个 SMTP 服务器。
这服务器有个个习惯,那就是一直在回信时把发件人地址填进去。
有时候你发个内容,它回个"250 OK",有时候却回个"251 421 12345",要么干脆回个"554 5.7.1 234",反正就是各种数字堆一堆。
这时候,要是这服务器是个诚实的,它应当告诉发件人:“嘿,我是 12345";但要是是个被黑了要么配置乱的,它就疯狂乱填,比如写个根本不存有的"0000"要么怪的字符串。
这就害得了邮件客户端收到一封信,却显示发件人是 0000,要么显示成 12345,这根本没法辨认。 这就是 SPF 的初衷。它想干嘛呢?它想搞个“黑名单”机制。也就是跟这些 SMTP 服务器签个协议,说:“嘿,要是你们发了信,但发件人地址跟这个协议里写的 IP 地址不一样,那我直接把这条邮件吞了。”好办说就是防钓鱼。
要是你用 Outlook 发信,它内部有个判断逻辑,先查一下收信人的域名。
要是收信人域名跟 SMTP 服务器域名不一样,那就默认不保险,直接拒收。
这时候,SMTP 服务器就得丢出一个 SPF 结局,告诉我们你是确实还是假的。 为了搞清楚这个日志到底长啥样,咱们得看看邮件服务器背后的配置文件,比如 Postfix 要么 Sendmail 的配置文件。里面会有一堆规则,比如准哪个 IP 发啥域名,要么限制哪个域名只能源出哪些 IP。
只要有一条规则没生效,这个邮箱地址就会被标记为"Invalid"要么"None"。便你就收到了一堆乱码要么乱数字。
这时候,RFC 5321 里的规定就派上用场了。收信人务必在这套邮件里放个“声明”,说明你是确实。
这个声明就是 SPF。 SPF 的核心就是那个 TXT 记录。你在邮件服务器的 DNS 区域文件里,针对某个域名,用 TXT 记录写一个字符串。
这个字符串由两局部组成:第一局部是授权授权书,告诉收信人“我是哪位”;第二局部是个签名,告诉收信人“这哪位的单子”要么说“哪位在签”。RFC 5321 对这两块的要求实际上挺严的。
第一块务必用空格分开,哪怕中间有个空格,要是写错了格式,收信人也会报错。
第二块别看能够自己写,但最好别忒复杂,比如别写一堆莫名其妙的动词,要么别写"0000"这种没人认得的东西。 举个栗子。假设你有个邮件,发件人是 alice 的@outsourcing.com。你在 DNS 里跟这个域名绑定了 SPF 记录。
比如你想让它能发给@outlook.com 和@outlook.de,那么记录里就写"v=spf1 include:spf.protection.outlook.com -all"。
这里的关键是那个"-"和后面的"all"。"-all"的意思是,只要这条记录里的任何 IP 地址发出一封邮件,收信人得通过验证。
只有验证通过了,邮件才能那会儿;没通过的,直接直接拒收。
这实际上是个“全有或全无”的机制。 要是你为了偷懒,只写了"v=spf1 include:spf.protection.outlook.com",没写"-all",那意味着只要 SMTP 服务器的 IP 出目前那段列表里,哪怕只有一艘船,这封邮件都能走。
要是真发件人是 0000,但 SMTP 服务器回信里填了 0000,那这条记录就被标记为通过。
这就像你买车,只要大车(0000)的引擎能拧动,你就认定自己买了新车,结局是买到了矿坑。 为了彻底防住这种“大小写不敏感”要么“空格加错”的难题,大量人就补了"v=spf1 include:spf.protection.outlook.com -all"。
这就把"include:spf.protection.outlook.com"加上了引号,说明你只准 SPF 服务的那家服务商介入。
这样,要是它回信里填了 0000,要么填了别的 IP,整个记录都立马变成 Invalid,邮件就被扔回垃圾箱。再比如,有时候你为了兼容旧系统,只写了"v=spf1 include:spf.protection.outlook.com smtp.mail,234",没写"-all",那就得确保 234 这个 IP 是跟你的 SPF 记录绑定的。 还有个小细节时常被人忽略,就是大小写。RFC 标准规定,那些字段务必严格匹配,不能大写字母混小写,也不能空格加错。
要是你在 TXT 记录里不小心把"v=spf1"写成"V=SPF1",收信人看了会认定你的域名不存有,要么直接报错。
这种低级毛病在自动化脚本里特别好办犯,比如自动生成 DNS 记录时,有时候大小写就会搞混。 再说说那局部签名。签名是你写的,也能够写,但最保险最标准的写法一般是不用签名的。也就是直接写 v=spf1 include:spf.protection.outlook.com -all。
要是你非要写签名,那就要小心了。
比如写成 v=spf1 include:spf.protection.outlook.com -all -msmtprinclude:spf.protection.outlook.com。
这里的"-msmtprinclude"就是告诉收信人,这封邮件是专门用来发邮件的,不是用来发图片要么附件的。
这实际上是个“防伪”手段,防止别人把签名的图片当邮件发出来。 你时常看到那些大厂的邮件接口文档,里面仿佛还有一堆"v=spf1 include:spf.protection.outlook.com smtp.mail,999"这样的记录。
这实际上就是为了兼容那些老旧的邮件服务器。
要是你的旧服务器不赞成 SPF,它可能会回信一个怪异的数字,比如"750 12345"要么"534 12345"。
这时候,要是你跟旧服务器的记录写的是"v=spf1",那这条记录就会生效。但要是旧服务器回信时没填任何内容,那"v=spf1"就会失效,邮件可能就找不到发件人了。 还有一个常见的误区是,有人认定只要把"include"后面的 IP 改成自己公司的域名,比如@yourcompany.com,就万事大吉了。
实际上不一定。出于"include"只负责把那些 IP 加进去,它不负责验证。SPF 验证是收信人服务器自己做活儿,它拿你的 TXT 记录里的 IP 列表,去比对 SMTP 服务器回信里的实际 IP,然后做一个精确匹配。
哪怕你写了@yourcompany.com,SMTP 服务器回信的 IP 是 0000,那验证就黄了了。 归根结底,SPF 就是个为了让邮件系统更靠谱的“身份证”检查系统。它要求发信人(用域名代表的身份)务必出示证件(TXT 记录),并且出示的证件内容不能撒谎(不能填 0000 要么填错格式)。收信人(邮件服务器)拿到证件后,会去问:“嘿,我刚刚收到的信封上写的发件人是 0000,还是@yourcompany.com?根据你给的证件,我应当信 0000 还是信@yourcompany.com?"答对了信,答错了直接拒收。 实际上大量人额外还加了一环,这就是 DKIM。DKIM 跟 SPF 类似,都是防钓鱼的,但它的“身份证”不是 TXT 记录,而是私钥加密的签名。SPF 是对身份本身的声明,比如“我是合法的域主人”;而 DKIM 是对内容的篡改检测,比如“嘿,这封邮件里夹着的附件是确实吗?”。
有时候你会看到 SPF 和 DKIM 连在一条记录里,比如"v=spf1 include:_spf.google.com -all dp=xxxxxxxx..."。
这时候,收信人需求与此同时验证身份声明和文档签名,双重保险才算到底。 说到底,SPF 不是一成不变的。当你升级了邮件服务器,要么换了新的服务商,你只需求在那段记录里把包含的域名要么 IP 换掉就行。
比如从包含 Google 的 SPF 换成包含阿里云的,只要格式不乱,收信人都认得。
这实际上把网络保险和邮件服务的适配度联系得挺紧密,说明好的配置能让邮件系统变得没那么让人头疼。
声明:演示网站所有内容,若无特殊说明或标注,均来源于网络转载,仅供学习交流使用,禁止商用。若本站侵犯了你的权益,可联系本站删除。
