SPF、DKIM和DMARC是用于增强电子邮件生态系统安全性的三种技术,其中SPF和DMARC是简单的DNS记录,DKIM主要将公共DNS记录与电子邮件服务器处理的私钥结合。三者共同帮助防止垃圾邮件发件人、网络钓鱼程序等。下文将为大家详解SPF、DKIM和DMARC的工作原理。
一、关于邮件身份验证
电子邮件身份验证一般使用诸如数字签名和加密之类的加密技术来实现,以验证发件人的身份并保护消息内容免受篡改。此过程涉及使用多种技术,包括DKIM、SPF和DMARC,这些技术协同工作以提供全面的电子邮件身份验证系统。
对电子邮件进行身份验证后,为确保邮件是合法的,会为收件人提供较高的可行度,而不是垃圾邮件或网络钓鱼。
但是除了DKIM、DMARC和SPF提供的高级保护之外,如果配置不正确,还会影响用户发送和接收电子邮件的能力,导致电子邮件被未授权方拒绝或拦截或标记为垃圾邮件等问题。这可能导致通信中断、敏感信息丢失以及个人和组织的声誉受损。
邮件身份验证的作用:
- 防止网络钓鱼攻击:网络钓鱼攻击是一种常见的电子邮件欺诈,攻击者会冒充受信任的发件人,诱骗收件人泄露敏感信息。电子邮件身份验证可以通过验证发件人的身份并确保邮件合法来帮助防止网络钓鱼;
- 保护品牌声誉:电子邮件身份验证可以防止网络犯罪分子使用虚假电子邮件地址或域发送损害组织声誉的垃圾邮件或网络钓鱼邮件,从而帮助保护组织的品牌声誉;
- 增强电子邮件安全性:电子邮件身份验证通过防止未经授权的访问,篡改和拦截电子邮件消息,有助于增强电子邮件通信的整体安全性;
- 遵守法规:某些行业和辖区的法规要求实施电子邮件身份验证。
SPF(发件人策略框架)是一项基础的邮件身份验证技术,作用是让域名所有者明确哪些IP地址有权代表这个域名发送邮件。
当收件方的邮件服务器收到一封邮件时,会先查询发件人域名的SPF记录,核对发送邮件的IP地址是否在授权清单里。如果不在,这封邮件就可能被标记为垃圾邮件,甚至直接拒收。
大家可以把SPF理解成一份公开的员工名录,比如某公司的域名是example.com,SPF记录就相当于列出只有这几个IP地址的服务器,是我们公司认可的发件服务器,收件方服务器对照这份名录就能初步判断邮件是不是冒牌货。
1、SPF记录格式
SPF记录是一段简单的文本,举个常见的例子:
v=spf1 ip4:123.123.123.123 ~all
如果这个记录属于example.com,就意味着只有IP为123.123.123.123的服务器,能发送发件人地址为user@example.com的邮件,~all则表示除了清单里的IP,其他所有IP都不被授权。
2、注意软失败和硬失败
SPF检查失败分两种情况,主要看记录里的结尾符号:
~all表示软失败,遇到未授权的发件IP时,邮件可能会被标记为垃圾邮件,但不会直接拒收;-all表示硬失败,未授权的发件IP会直接被拒绝,邮件会被拒收。
3、如何设置SPF记录
登录域名管理后台(比如Gname、Namecheap等),找到DNS记录设置板块新增一条“TXT类型”的DNS记录,写入一个有效的SPF字符串作为值并保存记录。(格式参考上面的例子)。
4、SPF记录支持的白名单令牌
- ip4:123.123.123.123:允许指定的 IPv4 地址;
- ip6:abcd:1234:90ab:cdef:5678:90de:fabc:允许指定的 IPv6 地址;
- a:example.com:允许 DNSA记录给出的 IP 地址example.com;
- mx:example.com:允许由 DNSMX记录之一给出的 IP 地址example.com;
- include:example.com:查询该域的 SPF 记录,除直接定义外,还使用其白名单。简化流行的第三方电子邮件服务的集成;
- redirect:example.com:忽略其他令牌并使用example.com。
需要同时授权自己的服务器IP和第三方邮件服务,可以这样写:
三、DKIMv=spf1 ip4:123.123.123.123 include:sendgrid.net ~all
DKIM代表域名密钥识别邮件,核心是用加密签名保证邮件的真实性,一方面确认邮件来自声称的发件人域名,另一方面保证邮件在传输过程中没有被篡改。如果说SPF是验证发件服务器是否被授权,而DKIM就是直接验证邮件本身是否可信。
1、收件方服务器收到邮件后,会通过DKIM验证三个关键点:
- 离开发件人后,电子邮件的标题是否被修改过?
- 离开发件人后,电子邮件的正文是否被篡改过?
- 发送服务器是否被授权作为这个域发送?
如果DKIM验证失败,收件方服务器会把这封邮件归为不可信,大多会扔进垃圾邮件文件夹,也可能直接删除。
2、DKIM的工作原理
DKIM基于公钥加密技术,记录存储了域名的公钥,邮件服务器收到来自该域名的电子邮件时,可以检查此记录以获得公钥;而私钥由发件方保管,存放在自己的邮件服务器里。发件时,服务器会用私钥给邮件的关键信息生成一个数字签名并添加到邮件头里。
3、如何设置DKIM
不同的邮件服务器设置DKIM的步骤略有不同,这里以常用的Postfix为例:
# Install OpenDKIM implementation
sudo apt install opendkim opendkim-tools# Add the Postfix user to the OpenDKIM group
sudo gpasswd -a postfix opendkim
打开OpenDKIM的配置文件/etc/opendkim.conf,取消注释或添加以下内容:
Canonicalization relaxed/simple
Mode sv
AutoRestart yes
AutoRestartRate 5/1H
SignatureAlgorithm rsa-sha256
UserID opendkim
将以下额外行添加到文件中:
# Maps domains to the keys used to sign emails
KeyTable refile:/etc/opendkim/key.table
SigningTable refile:/etc/opendkim/signing.table# Ignore these hosts when verifying incoming signatures
ExternalIgnoreList /etc/opendkim/trusted.hosts# Internal hosts to enable outgoing mail signing for
InternalHosts /etc/opendkim/trusted.hosts
保存并关闭配置文件。接下来创建上面引用的映射文件:
sudo mkdir /etc/opendkim
sudo mkdir /etc/opendkim/keys
sudo chown -R opendkim:opendkim /etc/opendkim
sudo chmod go-rw /etc/opendkim/keys
然后创建可信主机列表 /etc/opendkim/trusted.hosts,添加以下内容:
127.0.0.1
localhost*.example.com
再创建“密钥映射表” /etc/opendkim/key.table,关联密钥选择器、域名和私钥路径:
default._domainkey.example.com example.com:default:/etc/opendkim/keys/example.com/default.private
default._domainkey.example.com上面定义的选择器被配置为使用在的私钥/etc/opendkim/keys/example.com/default.private。生成此密钥参考:
sudo opendkim-genkey -d example.com -D /etc/opendkim/keys/example.com -s default -v
sudo chown opendkim:opendkim /etc/opendkim/keys/example.com/default.private
sudo chmod 600 /etc/opendkim/keys/example.com/default.private
打开 /etc/opendkim/keys/example.com/default.txt 文件,复制 TXT 后面的所有内容,将公钥添加到DNS记录。
打开 /etc/opendkim.conf,添加以下行:
Socket inet:8891@localhost
再打开Postfix配置文件 /etc/postfix/main.cf,添加或修改以下内容:
milter_protocol = 2
milter_default_action = accept
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891
重启Postfix和OpenDKIM服务即可让配置生效:
四、DMARCsudo opendkim-testkey -d example.com -s default -vvv
opendkim-testkey: using default configfile /etc/opendkim.conf
opendkim-testkey: checking key ‘default._domainkey.example.com’
opendkim-testkey: key secure
opendkim-testkey: key OK
DMARC主要是对SPF和DKIM的补充,一是制定规则,告诉收件方服务器如果邮件没通过SPF或DKIM验证该怎么处理;二是生成报告,让域名所有者知道哪些邮件通过了验证、哪些没通过,方便后续调整策略。
通俗的说,SPF和DKIM是验证工具,DMARC是管理工具,把前两者的验证结果整合起来给出明确的处理方案,还能提供数据反馈,帮你优化邮件安全配置。
1、DMARC三种核心操作
- none:服务器可以继续传递消息
- quarantine:将邮件发送到垃圾邮件或垃圾邮件
- reject:拒绝并退回邮件
2、DMARC报告功能
DMARC能让收件方服务器把验证结果发送给你指定的邮箱或服务器,了解:
- 有哪些IP或服务器在冒用你的域名发邮件
- 自己的合法邮件有没有误判为 “验证失败”
- SPF/DKIM 配置是否存在漏洞
报告通常每天发送一次,格式为XML,可以用在线工具解析查看。
3、如何设置DMARC记录
DMARC记录的主机名固定为 _dmarc.你的域名,记录值的格式参考如下:
五、SPF、DKIM与DMARC协同v=DMARC1; p=none; rua=mailto:user@example.com
SPF、DKIM与DMARC相互补充共同构建起一套完整的邮件安全体系:
- SPF:验证来源IP是否被授权,从源头防止发件人地址被伪造。
- DKIM:确保内容完整性,公式表示为:
$ \text{valid} = \text{verify}(\text{signature}, \text{public key}) $。
- DMARC:综合SPF和DKIM的验证结果,提升邮件可信度。
三者结合部署后能有效拦截钓鱼邮件和各类邮件欺诈行为,拦截成功率可达95%以上。
相关推荐:
(本文由美国主机侦探原创,转载请注明出处“美国主机侦探”和原文地址!)

微信扫码加好友进群
主机优惠码及时掌握

QQ群号:938255063
主机优惠发布与交流