关于 dns-zonefile-config
dns-zonefile-config 面向配置域名和排查 DNS 问题的管理员,重点涉及邮件认证与域名安全。内容涵盖 SPF、DKIM、DMARC、DNSSEC、CAA、TTL 建议,以及通过 OVH API 和 Terraform 自动化的示例。
主要功能
- 01配置 SPF、DKIM 和 DMARC
- 02设置 DNSSEC 与 CAA 记录
- 03查阅不同记录的 TTL 建议
- 04使用 OVH API 和 Terraform 自动化 DNS
- 05通过命令行工具诊断记录
适用场景
- 01为域名配置邮件认证
- 02保护域名免受伪造
- 03迁移或配置新域名
- 04排查 DNS 与邮件投递问题
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ guia-matthieu/ clawfu-skills --skill dns-zonefile-config安装后在 Claude Code 中输入/dns-zonefile-config确认已加载。
详细介绍
DNS 区域文件配置
正确配置 DNS 区域,确保电子邮件送达率(SPF、DKIM、DMARC)、安全性(DNSSEC、CAA)和自动化(OVH API、Cloudflare、Terraform),遵循 2024-2025 年的最佳实践。
何时使用此技能
- 配置电子邮件身份验证 - 使用 SPF、DKIM、DMARC,避免邮件进入垃圾邮件文件夹
- 保护域名安全 - 使用 DNSSEC、CAA 记录,防止欺骗
- 自动化 DNS 管理 - 使用 OVH API、Cloudflare API、Terraform
- 调试 DNS 问题 - 使用 dig、nslookup、MXToolbox
- 迁移或配置新域名 - 从零开始完成完整设置
方法论基础
来源:
为何重要:自 2024 年 2 月起,Google 和 Yahoo 要求批量邮件发送必须配置 SPF、DKIM 和 DMARC。配置不当,邮件就会进入垃圾邮件文件夹。通过身份验证的发件人,进入收件箱的可能性高出 2.7 倍。
Claude 的工作与由你决定的事项
| Claude 的工作 | 由你决定 |
|---|---|
| 构建销售框架 | 交易策略 |
| 提出需求探索问题 | 客户关系处理方式 |
| 创建提案模板 | 定价决策 |
| 识别异议模式 | 谈判策略 |
| 分析交易动态 | 最终交易条款 |
此技能的功能
- 配置电子邮件身份验证 - 使用正确的值配置 SPF、DKIM、DMARC
- 保护域名安全 - 配置 DNSSEC、CAA,保护证书
- 优化 TTL - 按记录类型设置推荐值
- 通过 API 自动化 - 使用 OVH、Cloudflare、Terraform
- 诊断问题 - 使用工具进行故障排查
说明
步骤 1:了解区域结构
## Anatomie d'un Fichier de Zone
$ORIGIN example.com. ; Le domaine de base
$TTL 3600 ; TTL par défaut (1 heure)
; SOA Record (Start of Authority)
@ IN SOA ns1.example.com. admin.example.com. (
2024012801 ; Serial (YYYYMMDDNN)
7200 ; Refresh (2h)
3600 ; Retry (1h)
1209600 ; Expire (2 semaines)
3600 ; Minimum TTL (1h)
)
; Nameservers
@ IN NS ns1.example.com.
@ IN NS ns2.example.com.
; A Records
@ IN A 203.0.113.10
www IN A 203.0.113.10
mail IN A 203.0.113.20
; CNAME Records
blog IN CNAME www.example.com.
; MX Records (priorité croissante = préférence décroissante)
@ IN MX 10 mail.example.com.
@ IN MX 20 mail-backup.example.com.
; TXT Records (SPF, DKIM, DMARC, etc.)
@ IN TXT "v=spf1 ..."
步骤 2:电子邮件身份验证 - SPF
SPF(发件人策略框架) - 声明哪些服务器可以代表你的域名发送电子邮件。
## SPF Record Syntax
v=spf1 [mechanisms] [qualifier]all
Mechanisms:
- ip4:203.0.113.0/24 ; Autoriser une plage IP
- ip6:2001:db8::/32 ; IPv6
- a ; Autoriser l'IP du record A du domaine
- mx ; Autoriser les serveurs MX
- include:_spf.google.com ; Inclure le SPF d'un autre domaine
- exists:%{i}.spf.example.com ; Macro avancée
Qualifiers:
- +all ; PASS (dangereux, jamais utiliser)
- -all ; FAIL (hard fail)
- ~all ; SOFTFAIL (recommandé)
- ?all ; NEUTRAL
SPF 最佳实践:
## SPF - Règles Critiques
1. UN SEUL record SPF par domaine
❌ Plusieurs records = tous invalides
2. Utiliser ~all (softfail), pas -all (hardfail)
→ Permet à DMARC d'évaluer aussi DKIM
3. Maximum 10 DNS lookups
→ include:, a, mx, ptr comptent comme lookups
→ ip4/ip6 ne comptent pas
→ Utiliser des macros SPF si limite atteinte
4. Éviter les gros blocs CIDR
→ Préférer des IPs spécifiques aux /16 ou /8
常见 SPF 示例:
## SPF pour Google Workspace
v=spf1 include:_spf.google.com ~all
## SPF pour Microsoft 365
v=spf1 include:spf.protection.outlook.com ~all
## SPF pour OVH Mail
v=spf1 include:mx.ovh.com ~all
## SPF multi-services (Google + Mailchimp + Sendgrid)
v=spf1 include:_spf.google.com include:servers.mcsv.net include:sendgrid.net ~all
## SPF avec IP dédiée
v=spf1 ip4:203.0.113.10 include:_spf.google.com ~all
步骤 3:电子邮件身份验证 - DKIM
DKIM(DomainKeys Identified Mail,域名密钥识别邮件) - 对电子邮件进行加密签名。
## Structure DKIM
Record Name: [selector]._domainkey.example.com
Record Type: TXT
Value: v=DKIM1; k=rsa; p=[public_key]
Exemple:
google._domainkey.example.com TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkq..."
DKIM 最佳实践:
## DKIM - Règles Critiques
1. Un sélecteur différent par service
→ google._domainkey pour Google Workspace
→ mailchimp._domainkey pour Mailchimp
→ sendgrid._domainkey pour Sendgrid
2. Rotation des clés tous les 6 mois
→ Réduit le risque de compromission
3. Clé RSA 2048 bits minimum
→ 1024 bits est obsolète
4. Un sélecteur par tiers
→ Permet de révoquer sans impacter la production
各服务的 DKIM 生成方式:
| 服务 | DKIM 密钥的查找位置 |
|---|---|
| Google Workspace | 管理控制台 → 应用 → Google Workspace → Gmail → 验证电子邮件身份 |
| Microsoft 365 | Microsoft 365 Defender → 电子邮件 → DKIM |
| Mailchimp | 设置 → 域名 → 查看设置说明 |
| Sendgrid | 设置 → 发件人身份验证 → 域名身份验证 |
| Brevo | 设置 → 发件人和 IP → 域名 |
步骤 4:电子邮件身份验证 - DMARC
DMARC(基于域名的邮件身份验证) - 指定 SPF/DKIM 验证失败时服务器应采取的策略。
## Structure DMARC
Record Name: _dmarc.example.com
Record Type: TXT
Value: v=DMARC1; p=[policy]; [options]
Policies:
- p=none ; Monitoring only (étape 1)
- p=quarantine ; Mettre en spam si échec
- p=reject ; Rejeter si échec (étape finale)
Options courantes:
- rua=mailto:[email protected] ; Rapports agrégés (XML)
- ruf=mailto:[email protected] ; Rapports forensics (détaillés)
- pct=100 ; Pourcentage d'emails concernés
- sp=reject ; Politique pour sous-domaines
- adkim=r ; Alignement DKIM (r=relaxed, s=strict)
- aspf=r ; Alignement SPF (r=relaxed, s=strict)
建议的 DMARC 部署步骤:
## Étape 1: Monitoring (2-4 semaines)
v=DMARC1; p=none; rua=mailto:[email protected]
→ Collecter les rapports, identifier tous les expéditeurs légitimes
## Étape 2: Quarantine (2-4 semaines)
v=DMARC1; p=quarantine; pct=10; rua=mailto:[email protected]
→ Tester sur 10% des emails, augmenter progressivement
## Étape 3: Quarantine 100%
v=DMARC1; p=quarantine; rua=mailto:[email protected]
## Étape 4: Reject (objectif final)
v=DMARC1; p=reject; rua=mailto:[email protected]; sp=reject
DMARC 监控服务:
- DMARC Analyzer(免费增值)
- Postmark DMARC(免费)
- EasyDMARC(免费增值)
步骤 5:安全性 - DNSSEC 和 CAA
DNSSEC - 对 DNS 响应进行加密签名,防止欺骗。
## Activer DNSSEC
Chez OVH:
1. Manager → Domaine → Zone DNS → DNSSEC
2. Activer → OVH génère les clés automatiquement
Chez Cloudflare:
1. DNS → Settings → DNSSEC
2. Enable DNSSEC → Copier le DS record
3. Ajouter le DS record chez le registrar
Vérification:
$ dig +dnssec example.com
→ Doit montrer RRSIG records
CAA 记录 - 限制哪些 CA 可以签发 SSL 证书。
## Structure CAA
Record Type: CAA
Flags: 0
Tag: issue | issuewild | iodef
Value: "ca-domain" ou "mailto:..."
Exemples:
# Autoriser uniquement Let's Encrypt
example.com. CAA 0 issue "letsencrypt.org"
example.com. CAA 0 issuewild "letsencrypt.org"
# Autoriser Let's Encrypt + Sectigo
example.com. CAA 0 issue "letsencrypt.org"
example.com. CAA 0 issue "sectigo.com"
# Reporter les violations
example.com. CAA 0 iodef "mailto:[email protected]"
# Bloquer tous les wildcards
example.com. CAA 0 issuewild ";"
CAA 最佳实践:
- 始终配合 DNSSEC 使用(否则容易受到欺骗攻击)
- 仅列出实际使用的 CA
- 添加 iodef,以便在发生尝试时收到提醒
步骤 6:TTL 最佳实践
## TTL Recommandés par Type de Record
| Record Type | Usage | TTL Recommandé | Rationale |
|-------------|-------|----------------|-----------|
| A / AAAA | Serveur web stable | 3600-86400 (1h-24h) | Rarement changé |
| A (failover) | Avec health check | 60-300 (1-5min) | Failover rapide |
| CNAME | Alias stable | 3600-86400 | Suit le TTL de la cible |
| MX | Mail servers | 3600-21600 (1h-6h) | Failover via priorité MX |
| TXT (SPF/DKIM) | Email auth | 3600-86400 | Rarement changé |
| TXT (DMARC) | Email policy | 3600 | Peut nécessiter ajustements |
| NS | Nameservers | 86400-172800 (1-2j) | Très stable |
| CAA | Cert authority | 3600-86400 | Rarement changé |
## Règles Générales
1. Jamais TTL = 0 (non défini dans le standard)
2. Minimum recommandé: 300 (5 min)
3. Avant migration: baisser TTL 24-48h avant
4. Après migration stable: remonter le TTL
步骤 7:自动化 - OVH API
## Installation
# pip install ovh
## Configuration (ovh.conf)
[default]
endpoint=ovh-eu
[ovh-eu]
application_key=YOUR_APP_KEY
application_secret=YOUR_APP_SECRET
consumer_key=YOUR_CONSUMER_KEY
## Obtenir les clés
# https://eu.api.ovh.com/createToken/
# Permissions nécessaires:
# GET /domain/zone/*
# POST /domain/zone/*
# PUT /domain/zone/*
# DELETE /domain/zone/*
## Script Python - Gestion DNS OVH
import ovh
client = ovh.Client()
# Lister tous les domaines
domains = client.get('/domain/zone')
print(domains)
# Lister les records d'une zone
records = client.get(f'/domain/zone/{domain}/record')
# Obtenir un record spécifique
record = client.get(f'/domain/zone/{domain}/record/{record_id}')
# Créer un record TXT (ex: SPF)
result = client.post(
f'/domain/zone/{domain}/record',
fieldType='TXT',
subDomain='', # @ = racine
target='v=spf1 include:_spf.google.com ~all',
ttl=3600
)
# Créer un record DMARC
result = client.post(
f'/domain/zone/{domain}/record',
fieldType='TXT',
subDomain='_dmarc',
target='v=DMARC1; p=none; rua=mailto:[email protected]',
ttl=3600
)
# Modifier un record
client.put(
f'/domain/zone/{domain}/record/{record_id}',
target='nouvelle_valeur',
ttl=3600
)
# Supprimer un record
client.delete(f'/domain/zone/{domain}/record/{record_id}')
# IMPORTANT: Rafraîchir la zone après modifications
client.post(f'/domain/zone/{domain}/refresh')
第 8 步:自动化 - Cloudflare
## Terraform - Cloudflare DNS
provider "cloudflare" {
api_token = var.cloudflare_api_token # Jamais en dur!
}
# Zone data
data "cloudflare_zone" "example" {
name = "example.com"
}
# A Record
resource "cloudflare_record" "www" {
zone_id = data.cloudflare_zone.example.id
name = "www"
value = "203.0.113.10"
type = "A"
ttl = 3600
proxied = true # Cloudflare proxy
}
# SPF Record
resource "cloudflare_record" "spf" {
zone_id = data.cloudflare_zone.example.id
name = "@"
value = "v=spf1 include:_spf.google.com ~all"
type = "TXT"
ttl = 3600
}
# DMARC Record
resource "cloudflare_record" "dmarc" {
zone_id = data.cloudflare_zone.example.id
name = "_dmarc"
value = "v=DMARC1; p=reject; rua=mailto:[email protected]"
type = "TXT"
ttl = 3600
}
# MX Records
resource "cloudflare_record" "mx_primary" {
zone_id = data.cloudflare_zone.example.id
name = "@"
value = "aspmx.l.google.com"
type = "MX"
ttl = 3600
priority = 1
}
# CAA Record
resource "cloudflare_record" "caa" {
zone_id = data.cloudflare_zone.example.id
name = "@"
type = "CAA"
ttl = 3600
data {
flags = 0
tag = "issue"
value = "letsencrypt.org"
}
}
Terraform/Cloudflare 最佳实践:
- 切勿以明文存储凭证
- 使用环境变量或密钥管理器
- 使用远程状态(S3、GCS)进行协作
- 每个环境使用一个 workspace(staging/prod)
第 9 步:诊断与故障排查
## Outils CLI
# Vérifier un record spécifique
dig example.com TXT +short
dig _dmarc.example.com TXT +short
dig google._domainkey.example.com TXT +short
# Vérifier les MX
dig example.com MX +short
# Vérifier DNSSEC
dig example.com +dnssec
# Tracer la résolution
dig example.com +trace
# Vérifier la propagation (multiple resolvers)
dig @8.8.8.8 example.com TXT # Google
dig @1.1.1.1 example.com TXT # Cloudflare
dig @9.9.9.9 example.com TXT # Quad9
在线工具:
| 工具 | URL | 用途 |
|---|---|---|
| MXToolbox | mxtoolbox.com | SPF、DKIM、DMARC、黑名单 |
| DMARC Analyzer | dmarcanalyzer.com | DMARC 验证 |
| DNSViz | dnsviz.net | 调试 DNSSEC |
| Mail-Tester | mail-tester.com | 完整的邮件评分 |
| Google Postmaster | postmaster.google.com | 域名信誉 |
常见错误:
| 症状 | 可能原因 | 解决方案 |
|---|---|---|
| SPF permerror | 存在多条 SPF 记录 | 合并为一条 |
| SPF permerror | >10 次 DNS 查询 | 使用 ip4/ip6、SPF 宏 |
| DKIM fail | 密钥复制错误 | 检查是否存在换行符 |
| DMARC none | Policy p=none | 监控期间属正常情况,之后再升级策略 |
| 邮件进入垃圾邮件 | SPF/DKIM 正常但未对齐 | 检查 DMARC 对齐情况(From: header) |
| SERVFAIL | DNSSEC 配置错误 | 在 dnsviz.net 上调试 |
完整模板
模板:新域名(Google Workspace)
## Records à créer
# MX (mail)
@ MX 1 aspmx.l.google.com.
@ MX 5 alt1.aspmx.l.google.com.
@ MX 5 alt2.aspmx.l.google.com.
@ MX 10 alt3.aspmx.l.google.com.
@ MX 10 alt4.aspmx.l.google.com.
# SPF
@ TXT "v=spf1 include:_spf.google.com ~all"
# DKIM (obtenir la clé dans Google Admin Console)
google._domainkey TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkq..."
# DMARC (commencer en monitoring)
_dmarc TXT "v=DMARC1; p=none; rua=mailto:[email protected]"
# CAA (si Let's Encrypt pour SSL)
@ CAA 0 issue "letsencrypt.org"
@ CAA 0 iodef "mailto:[email protected]"
模板:停放域名(反欺骗保护)
## Domaine qui n'envoie JAMAIS d'email
# SPF - Rejeter tout
@ TXT "v=spf1 -all"
# DMARC - Rejeter tout
_dmarc TXT "v=DMARC1; p=reject; sp=reject; rua=mailto:[email protected]"
# Pas de MX = pas de réception
# (ou MX vers null: @ MX 0 .)
模板:多服务(SaaS 技术栈)
## SPF avec plusieurs services
@ TXT "v=spf1 include:_spf.google.com include:servers.mcsv.net include:sendgrid.net ~all"
## DKIM - Un par service
google._domainkey TXT "v=DKIM1; k=rsa; p=..."
k1._domainkey TXT "v=DKIM1; k=rsa; p=..." # Mailchimp
s1._domainkey TXT "v=DKIM1; k=rsa; p=..." # Sendgrid
## DMARC
_dmarc TXT "v=DMARC1; p=quarantine; rua=mailto:[email protected]"
DNS 配置清单
## Setup Initial
[ ] A/AAAA records pour web
[ ] CNAME pour www et autres alias
[ ] MX records configurés (avec priorités)
[ ] SPF record (un seul, ~all)
[ ] DKIM configuré pour chaque service d'envoi
[ ] DMARC en mode monitoring (p=none)
[ ] CAA records (limiter les CA autorisées)
[ ] DNSSEC activé chez le registrar
## Après 2-4 semaines de monitoring
[ ] Analyser les rapports DMARC
[ ] Identifier les expéditeurs non authentifiés
[ ] Corriger ou ajouter les sources légitimes
[ ] Escalader DMARC vers p=quarantine
[ ] Puis vers p=reject
## Maintenance
[ ] Rotation DKIM tous les 6 mois
[ ] Review des rapports DMARC mensuellement
[ ] Vérifier le score sur mail-tester.com
[ ] Monitorer la réputation sur Google Postmaster
技能边界
此技能擅长的方面
- 构建销售对话
- 创建需求探索框架
- 分析交易动态
- 提出谈判方法建议
此技能无法做到的方面
- 取代关系建立
- 保证成交
- 了解特定买家的心理
- 制定定价决策
参考资料
邮件身份验证
DNS 安全
TTL
自动化
工具
相关技能
nurture-sequences/- 邮件送达率会影响培育流程distribution-engine/- 营销自动化基础设施
技能版本:1.0 最后更新:2026-01-28 类别:devops