dns-zonefile-config について
dns-zonefile-configは、ドメイン設定やDNSの問題解決を行う管理者向けのガイダンススキルで、メール認証とドメインセキュリティを扱います。SPF、DKIM、DMARC、DNSSEC、CAA、TTLの推奨事項に加え、OVH APIやTerraformによる自動化例を紹介します。
主な機能
- 01SPF、DKIM、DMARCの設定
- 02DNSSECとCAAレコードの設定
- 03レコード別TTLの指針確認
- 04OVH APIとTerraformによるDNS自動化
- 05コマンドラインツールでのレコード診断
活用シーン
- 01ドメインのメール認証設定
- 02ドメインのなりすまし対策
- 03新規ドメインの設定や移行
- 04DNSやメール配信の問題調査
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ guia-matthieu/ clawfu-skills --skill dns-zonefile-configインストール後、Claude Code で/dns-zonefile-configを入力して読み込まれたか確認します。
詳細
DNS ゾーンファイルの設定
メールの到達率(SPF、DKIM、DMARC)、セキュリティ(DNSSEC、CAA)、自動化(OVH API、Cloudflare、Terraform)のために、2024~2025年のベストプラクティスに基づいてDNSゾーンを正しく設定します。
このスキルを使用する場面
- メール認証を設定する - 迷惑メールフォルダーに入るのを防ぐためのSPF、DKIM、DMARC
- ドメインを保護する - DNSSEC、CAAレコード、なりすまし対策
- DNS管理を自動化する - OVH API、Cloudflare API、Terraform
- DNSの問題をデバッグする - dig、nslookup、MXToolbox
- ドメインを移行する、または新しいドメインを設定する - ゼロからの完全なセットアップ
方法論の基盤
出典:
- Cisco Email Authentication Best Practices
- DMARCLY Definitive Guide
- Cloudflare Terraform Best Practices
- OVH Python API
これが重要な理由: 2024年2月以降、GoogleとYahooは一括メール送信にSPF、DKIM、DMARCを必須としています。正しく設定されていないと、メールは迷惑メールフォルダーに入ってしまいます。認証済みの送信者は、受信トレイに届く可能性が2.7倍高くなります。
Claude が行うことと、あなたが決めること
| Claude が行うこと | あなたが決めること |
|---|---|
| 販売フレームワークを構成する | 商談戦略 |
| ディスカバリーの質問を提案する | 関係構築の進め方 |
| 提案書のテンプレートを作成する | 価格設定の決定 |
| 反論のパターンを特定する | 交渉戦術 |
| 商談の動向を分析する | 最終的な取引条件 |
このスキルでできること
- メール認証を設定する - 適切な値でSPF、DKIM、DMARCを設定します
- ドメインを保護する - DNSSEC、CAA、証明書保護を設定します
- TTLを最適化する - レコードの種類ごとに推奨値を設定します
- API経由で自動化する - OVH、Cloudflare、Terraformを使用します
- 問題を診断する - ツールとトラブルシューティングを活用します
手順
Step 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 ..."
Step 2: メール認証 - SPF
SPF(Sender Policy Framework) - ドメインのメールを送信できるサーバーを宣言します。
## 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
Step 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 | Admin Console → Apps → Google Workspace → Gmail → Authenticate email |
| Microsoft 365 | Microsoft 365 Defender → Email → DKIM |
| Mailchimp | Settings → Domain → View Setup Instructions |
| Sendgrid | Settings → Sender Authentication → Domain Authentication |
| Brevo | Settings → Senders & IP → Domains |
Step 4: メール認証 - DMARC
DMARC(Domain-based Message Authentication) - 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(フリーミアム)
Step 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レコード - SSL証明書を発行できるCAを制限します。
## 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を追加します
Step 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
Step 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)を使用する
- 環境ごとにワークスペースを用意する(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 レコードが複数ある | 1 つに統合する |
| SPF permerror | DNS ルックアップが 10 回を超えている | ip4/ip6、SPF マクロを使用する |
| DKIM fail | キーのコピーに誤りがある | 改行が入っていないことを確認する |
| DMARC none | Policy p=none | 監視中は通常の状態です。その後、段階的にポリシーを強化します |
| メールが迷惑メールに振り分けられる | SPF/DKIM は OK だが、整合していない | DMARC の整合性を確認する(From: ヘッダー) |
| 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