发布网友 发布时间:2022-05-14 13:18
共1个回答
热心网友 时间:2023-10-18 11:09
为什么从主机上发送邮件会被当成垃圾邮件而进了 Spam?为什么会有人冒充你的域名发送邮件?这些问题的原因很可能是你没有 SPF 记录。一、SPF 介绍说来也神奇,互联网诞生至今已经几个世纪了(嗯?),但是目前互联网上发送电子邮件还是使用着最古老的「简单邮件传输协议」(SMTP),这协议在设计之初就没有考虑过多的安全性与防伪造性。但是那时候使用互联网的人都很纯洁啊,不会用 SMTP 来发垃圾邮件,但是现在的人不同了,由于 SMTP 可以不需要验证,所以随便找个主机,就能大量地向任何一个邮箱地址发送邮件了,垃圾邮件(Spam)就开始泛滥了。另外,发邮件的时候随便填写一下别人的域名,就可以冒充别的网站来发送邮件了,欺诈邮件(Phishing)也就开始泛滥了。为了解决这种情况,两大针对域名的主要防范措施被推出:SPF 和 PTR。由于 PTR 需要 ISP 等支持,不是人人都可以做到的,所以此文暂时不介绍,主要讲一下 SPF。Sender Policy Framework (SPF) is an email validation system designed to prevent email spam by detecting email spoofing, a common vulnerability, by verifying sender IP addresses. SPF allows administrators to specify which hosts are allowed to send mail from a given domain by creating a specific SPF record (or TXT record) in the Domain Name System (DNS). Mail exchangers use the DNS to check that mail from a given domain is being sent by a host sanctioned by that domain's administrators.这是Wikipedia 上对SPF 的介绍,大意是说,SPF 是一种对发送邮件者的 IP 地址来进行简单的邮件验证的系统,域名的管理员通过 SPF 记录或 TXT 记录来规定这个域名下哪些 IP 地址是「允许」发送邮件的,这样如果有人用别的 IP 地址来伪造发送的话,收件方可以根据 SPF 来选择拒收这些邮件。二、为什么要设置 SPF相信各位读者也看出来了,这是需要发送方和接收方都配合才能生效的一套系统。如果发送方在 SPF 里拼命规定「某某 IP 不是我们的,如果从那里发邮件千万不要相信!」,但是接收方根本不去看 SPF 的话,那也是白搭。还好,很多国外的邮箱提供商都会去检查发送者域名的 SPF 的,一部分邮箱提供商如果发送发送者的域名没有 SPF 的话,会直接拒收邮件,所以我们要给自己的域名设置 SPF!三、SPF 语法格式咳咳,相信细心的读者也发现了,上面说 SPF 是通过「SPF 记录」和「TXT 记录」来检查的。为什么会有 TXT 记录呢?这只是兼容性的考量:一部分老的 DNS 服务器不支持 SPF 记录,因此只能拿 TXT 记录来代替一下, OpenSPF 建议在这段过渡时期,SPF 记录和 TXT 记录都要添加……SPF 记录和格式和 TXT 记录因此也是非常相近的:1234wzyboy@vermilion:~$ digwzyboy.im txt +short"v=spf1 include:_spf.wzyboy.im include:_spf.google.com ~all"wzyboy@vermilion:~$ digwzyboy.im spf +short"v=spf1 include:_spf.wzyboy.im include:_spf.google.com ~all"嗯,记录类型不一样,记录内容是一模一样的……如果要在 BIND9 里设置的话,是这样的:12wzyboy.im. 3600 IN TXT "v=spf1 include:_spf.wzyboy.im include:_spf.google.com ~all" wzyboy.im. 3600 IN SPF "v=spf1 include:_spf.wzyboy.im include:_spf.google.com ~all"还是比较容易理解的,如果使用第三方的 DNS 解析服务的话,在也差不多是这样设置。根据OpenSPF 的介绍,我编造了一个 SPF 的示例:v=spf1 mx a:pluto.example.net ip4:192.168.0.1/16 ip6:1080::8:800:200C:417A/96 include:aspmx.googlemail.com -all看起来很长的样子,其实很多成分是可选的,我只是尽量把它们都列出来而已,如果拆解看来看是这样的:v=spf1 这说明这是 SPF 第一版,这个一定要有 mx 这个说明把这个域名上的 MX 记录所对应的服务器加入「信任列表」。可选。 a:pluto.example.net 代表把 pluto.example.net 这个域名 A 记录所对应的 IP 加入「信任列表」。可选。 ip4:192.168.0.1/16 代表把这一段 IPv4 的地址段加入「信任列表」。可选。 ip6:1080::8:800:200C:417A/96 代表把这一段 IPv6 的地址段加入「信任列表」。可选。 include:aspmx.googlemail.com 代表读取这个域名上的 SPF,然后把它们都加入「信任列表」。可选。 -all 或 ~all 或 ?