深入理解电子邮件安全:SPF、DKIM 和 DMARC 完全指南
引言
在当今数字时代,电子邮件已经成为我们日常通信中不可或缺的一部分。然而,随之而来的安全问题也日益突出。邮件欺诈、钓鱼攻击和垃圾邮件等威胁不断增加,这促使了多种邮件安全验证机制的出现。本文将深入探讨三个最重要的邮件安全协议:SPF、DKIM和DMARC。
SPF (Sender Policy Framework)
什么是 SPF?
SPF(发件人策略框架)是一种邮件验证机制,用于防止发件人地址被伪造。它允许域名所有者指定哪些邮件服务器被授权发送来自该域名的邮件。
SPF 工作原理
- DNS记录发布:域名所有者在DNS中发布SPF记录
- 发送验证:当邮件服务器接收到邮件时,会检查发件人IP是否在SPF记录允许范围内
- 结果处理:基于验证结果决定是否接受该邮件
SPF 记录示例
example.com. IN TXT "v=spf1 ip4:192.0.2.0/24 ip4:198.51.100.123 a mx ~all"
DKIM (DomainKeys Identified Mail)
什么是 DKIM?
DKIM是一种数字签名技术,用于验证邮件的完整性和来源真实性。它通过加密签名确保邮件在传输过程中未被篡改。
DKIM 工作流程
-
签名生成:
- 发送方使用私钥对邮件头部和内容生成签名
- 签名添加到邮件头的DKIM-Signature字段
-
验证过程:
- 接收方获取发送域名的公钥(存储在DNS中)
- 使用公钥验证签名的有效性
DKIM 配置示例
selector._domainkey.example.com. IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC..."
DMARC (Domain-based Message Authentication, Reporting & Conformance)
DMARC 的作用
DMARC建立在SPF和DKIM基础上,提供了统一的邮件验证策略框架。它不仅能验证邮件真实性,还能向域名所有者提供详细的验证报告。
DMARC 政策
- none:监控模式,不采取任何操作
- quarantine:将可疑邮件放入垃圾邮件文件夹
- reject:直接拒绝不符合要求的邮件
DMARC 记录示例
_dmarc.example.com. IN TXT "v=DMARC1; p=reject; rua=mailto:dmarc@example.com"
最佳实践建议
1. 完整部署策略
- 同时实施SPF、DKIM和DMARC
- 从宽松策略开始,逐步收紧
- 定期监控验证报告
2. 密钥管理
- 定期更新DKIM密钥对
- 使用足够长度的密钥(建议2048位)
- 安全保管私钥
3. 监控和维护
- 定期检查SPF记录是否需要更新
- 分析DMARC报告发现潜在问题
- 及时响应验证失败警报
4. 政策调整
- 根据业务需求调整验证策略
- 考虑第三方邮件服务的影响
- 平衡安全性和可用性
结论
电子邮件安全是一个持续演进的领域。SPF、DKIM和DMARC这三个协议互相配合,共同构建了强大的邮件安全防线。正确实施这些机制不仅能有效防止邮件欺诈,还能提升邮件送达率,保护企业声誉。随着网络威胁的不断发展,持续关注和更新邮件安全措施变得越来越重要。
配置
我来详细介绍如何配置 SPF 和 DKIM 的域名解析记录:
- SPF 配置步骤:
- 登录域名管理控制台,添加 TXT 记录:
- 主机记录:
@或者留空(取决于服务商) - 记录类型:
TXT - 记录值示例:
v=spf1 ip4:1.2.3.4 ip4:11.22.33.44 include:spf.example.com include:_spf.google.com ~all
- SPF 记录值说明:
v=spf1- SPF 版本声明ip4:- 指定 IPv4 地址include:- 包含其他域名的 SPF 记录~all- 软失败(推荐)或-all硬失败+all- 允许所有(不推荐)
常见配置场景:
# 只允许指定 IP 发送
v=spf1 ip4:1.2.3.4 -all# 允许本域名的 MX 记录对应的服务器发送
v=spf1 mx -all# 允许本域名的 A 记录对应的服务器发送
v=spf1 a -all# 包含第三方邮件服务(如 Google Workspace)
v=spf1 include:_spf.google.com -all
- DKIM 配置步骤:
- 生成 DKIM 密钥对:
# 使用 OpenSSL 生成私钥
openssl genrsa -out private.key 2048# 生成公钥
openssl rsa -in private.key -pubout -out public.key
- 添加 DKIM DNS 记录:
- 主机记录:
selector._domainkey(selector 可自定义,如 mail._domainkey) - 记录类型:
TXT - 记录值示例:
v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...
- DKIM 记录值说明:
v=DKIM1- DKIM 版本k=rsa- 加密算法p=- 公钥(去掉头尾和换行)
常见邮件服务商的 DKIM 配置:
Google Workspace:
# 主机记录
google._domainkey# 记录值
v=DKIM1; k=rsa; p=您的公钥
Microsoft 365:
# 主机记录
selector1._domainkey# 记录值
v=DKIM1; k=rsa; p=您的公钥
验证配置:
- SPF 验证:
# 使用 dig 命令查询
dig txt example.com# 使用在线工具
https://mxtoolbox.com/spf.aspx
- DKIM 验证:
# 发送测试邮件查看邮件头
# 使用在线工具
https://mxtoolbox.com/dkim.aspx
注意事项:
- DNS 传播时间:
- 新增或修改记录后需等待 DNS 刷新(通常 5-30 分钟)
- 某些情况可能需要最多 24-48 小时
- 记录长度限制:
- 单条 TXT 记录最大 255 字符
- 超长需要分片,用引号分隔
- 安全建议:
- 私钥妥善保管,避免泄露
- 建议每 6-12 个月轮换密钥
- 先添加新记录,确认生效后再更换密钥
- 常见错误:
- SPF 记录重复
- DKIM 选择器名称错误
- 公钥格式不正确
- DNS 记录未及时生效
查询链接
https://coding.tools/cn/nslookup
https://powerdmarc.com/zh/spf-record-lookup/
https://powerdmarc.com/zh/dkim-record-lookup/
https://powerdmarc.com/zh/dmarc-record-checker/
相关文章:
深入理解电子邮件安全:SPF、DKIM 和 DMARC 完全指南
引言 在当今数字时代,电子邮件已经成为我们日常通信中不可或缺的一部分。然而,随之而来的安全问题也日益突出。邮件欺诈、钓鱼攻击和垃圾邮件等威胁不断增加,这促使了多种邮件安全验证机制的出现。本文将深入探讨三个最重要的邮件安全协议&a…...
【有啥问啥】复习一下什么是NMS(非极大值抑制)?
复习一下什么是NMS(非极大值抑制)? 什么是NMS? NMS(Non-Maximum Suppression)即非极大值抑制,是一种在计算机视觉领域,尤其是目标检测任务中广泛应用的后处理算法。其核心思想是抑…...
Java-异步方法@Async+自定义分布式锁注解Redission
如果你在使用 @Async 注解的异步方法中,使用了自定义的分布式锁注解(例如 @DistributedLock),并且锁到期后第二个请求并没有执行,这可能是由于以下几个原因导致的: 锁的超时时间设置不当:锁的超时时间可能设置得太短,导致锁在业务逻辑执行完成之前就已经自 动释放。…...
基本定时器---内/外部时钟中断
一、定时器的概念 定时器(TIM),可以对输入的时钟信号进行计数,并在计数值达到设定值的时候触发中断。 STM32的定时器系统有一个最为重要的结构是时基单元,它由一个16位计数器,预分频器,和自动重…...
实现了两种不同的图像处理和物体检测方法
这段代码实现了两种不同的图像处理和物体检测方法:一种是基于Canny边缘检测与轮廓分析的方法,另一种是使用TensorFlow加载预训练SSD(Single Shot Multibox Detector)模型进行物体检测。 1. Canny边缘检测与轮廓分析: …...
如何在MindMaster思维导图中制作PPT课件?
思维导图是一种利用色彩、图画、线条等图文并茂的形式,来帮助人们增强知识或者事件的记忆。因此,思维导图也被常用于教育领域,比如:教学课件、读书笔记、时间管理等等。那么,在MindMaster免费思维导图软件中࿰…...
ORIN NX 16G安装中文输入法
刷机版本为jetpack5.14.刷机之后预装了cuda、cudnn、opencv、tensorrt等,但是发现没有中文输入,所以记录一下安装流程。 jetson NX是arm64架构的,sougoupinyin只支持adm架构的,所以要选择安装Google pinyin 首先打开终端&#x…...
【金融风控项目-07】:业务规则挖掘案例
文章目录 1.规则挖掘简介2 规则挖掘案例2.1 案例背景2.2 规则挖掘流程2.3 特征衍生2.4 训练决策树模型2.5 利用结果划分分组 1.规则挖掘简介 两种常见的风险规避手段: AI模型规则 如何使用规则进行风控 **使用一系列逻辑判断(以往从职人员的经验)**对客户群体进行区…...
退款成功订阅消息点击后提示订单不存在
问题表现: 退款成功发送的小程序订阅消息点击进入后提示订单不存在。 修复方法: 1.打开文件app/services/message/notice/RoutineTemplateListService.php 2.找到方法sendOrderRefundSuccess 3.修改图中红圈内的链接地址 完整方法代码如下 /*** 订…...
实验一 顺序结构程序设计
《大学计算机﹣C语言版》实验报告 实验名称 实验一 顺序结构程序设计 实验目的 (1)掌握C语言中常量和变量的概念。 (2)掌握C语言中常见的数据类型。 (3)掌握C语言中变量的定义和赋值方法。 …...
Elasticsearch搜索流程及原理详解
Elasticsearch搜索流程及原理详解 1. Elasticsearch概述1.1 简介1.2 核心特性1.3 应用场景2. Elasticsearch搜索流程2.1 搜索请求的发起2.2 查询的执行2.3 结果的聚合与返回3. Elasticsearch原理详解3.1 倒排索引3.2 分布式架构3.3 写入流程3.4 读取流程4. 技术细节与操作流程4…...
芯片之殇——“零日漏洞”(文后附高通64款存在漏洞的芯片型号)
芯片之殇——“零日漏洞”(文后附高通64款存在漏洞的芯片型号) 本期是平台君和您分享的第113期内容 前一段时间,高通公司(Qualcomm)发布安全警告称,提供的60多款芯片潜在严重的“零日漏洞”,芯片安全再一次暴露在大众视野。 那什么是“零日漏洞”?平台君从网上找了一段…...
【gitlab】gitlabrunner部署
1、下载镜像 docker pull gitlab/gitlab-runner:latest 2、启动gitrunner容器 docker run -d --name gitlab-runner --restart always \ -v /root/gitrunner/config:/etc/gitlab-runner \ ///gitlab-runner的配置目录,挂载在宿主机上方便修改,里面有config.…...
Flink监控checkpoint
Flink的web界面提供了一个选项卡来监控作业的检查点。这些统计信息在任务终止后也可用。有四个选项卡可以显示关于检查点的信息:概述(Overview)、历史(History)、摘要(Summary)和配置(Configuration)。下面依次来看这几个选项。 Overview Tab Overview选项卡列出了以…...
Ribbon 入门实战指南
Ribbon 是 Netflix 开发的一个开源项目,用于实现客户端负载均衡功能。它在微服务架构中广泛使用,并且是 Spring Cloud 生态中的重要组成部分。本文将带你从基础入门,逐步掌握如何在 Spring Cloud 项目中使用 Ribbon 实现客户端负载均衡。 1 负…...
uniapp: 微信小程序包体积超过2M的优化方法(主包从2.7M优化到1.5M以内)
一、问题描述 在使用uniapp进行微信小程序开发时,经常会遇到包体积超过2M而无法上传: 二、解决方案 目前关于微信小程序分包大小有以下限制: 整个小程序所有分包大小不超过 30M(服务商代开发的小程序不超过 20M) 单个…...
【百日算法计划】:每日一题,见证成长(026)
题目 给定一个包含正整数、加()、减(-)、乘(*)、除(/)的算数表达式(括号除外),计算其结果。 表达式仅包含非负整数,, - ,,/ 四种运算符和空格 。 整数除法仅保留整数部分。 * * 示例 1: 输入: “32X2” 输出: 7 import…...
【大模型】prompt实践总结
文章目录 怎么才算是好的prompt设计准则基本原则精炼原则(奥卡姆剃刀准则)具体原则真实操作技巧指定角色增加fewshots列表化代码化强调需求真实迭代大模型优化情形任务的定义和评估标准似乎可以再明确一下出现了一些之前没有考虑过的特殊情况,可以重新组织语言优化Prompt来处…...
在Qt(以及C++)中, 和 * 是两个至关重要的符号--【雨露均沾】
在Qt(以及C)中,& 和 * 是两个至关重要的符号,它们用于处理引用和指针。我们将逐个解释这两个符号,并提供简单示例来说明它们的用法。 1. 引用(&) 定义: 引用是一种别名,它不…...
本地部署Apache Answer搭建高效的知识型社区并一键发布到公网流程
文章目录 前言1. 本地安装Docker2. 本地部署Apache Answer2.1 设置语言选择简体中文2.2 配置数据库2.3 创建配置文件2.4 填写基本信息 3. 如何使用Apache Answer3.1 后台管理3.2 提问与回答3.3 查看主页回答情况 4. 公网远程访问本地 Apache Answer4.1 内网穿透工具安装4.2 创建…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...
作为测试我们应该关注redis哪些方面
1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...
人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent
安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...
SQL Server 触发器调用存储过程实现发送 HTTP 请求
文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...
Python网页自动化Selenium中文文档
1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API,让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API,你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...
