dns-zonefile-config

$npx mdskill add guia-matthieu/clawfu-skills/dns-zonefile-config

Configures DNS zones for email deliverability, domain security, and automation using 2024-2025 best practices.

  • Helps set up email authentication to prevent spam folder issues.
  • Integrates with OVH API, Cloudflare API, and Terraform for automation.
  • Recommends actions based on industry standards like Cisco best practices.
  • Delivers results through command-line tools like dig and nslookup.
SKILL.md
.github/skills/dns-zonefile-configView on GitHub ↗
---
name: dns-zonefile-config
description: "Configurez correctement vos zones DNS pour l'email deliverability (SPF, DKIM, DMARC), la sécurité (DNSSEC, CAA), et l'automatisation (OVH API, Cloudflare, Terraform), basé sur les best practices 2024-2025. Use when: **Configurer l'authentification email** - SPF, DKIM, DMARC pour éviter le spam folder; **Sécuriser un domaine** - DNSSEC, CAA records, protection contre le spoofing; **Automatiser la gestion DNS** - OVH API, Cloudflare API, Terraform; **Débugger des problèmes DNS** - dig, nslookup..."
license: MIT
metadata:
  author: ClawFu
  version: 1.0.0
  mcp-server: "@clawfu/mcp-skills"
---

# DNS Zonefile Configuration

> Configurez correctement vos zones DNS pour l'email deliverability (SPF, DKIM, DMARC), la sécurité (DNSSEC, CAA), et l'automatisation (OVH API, Cloudflare, Terraform), basé sur les best practices 2024-2025.

## When to Use This Skill

- **Configurer l'authentification email** - SPF, DKIM, DMARC pour éviter le spam folder
- **Sécuriser un domaine** - DNSSEC, CAA records, protection contre le spoofing
- **Automatiser la gestion DNS** - OVH API, Cloudflare API, Terraform
- **Débugger des problèmes DNS** - dig, nslookup, MXToolbox
- **Migrer ou configurer un nouveau domaine** - Setup complet from scratch

## Methodology Foundation

**Sources**:
- [Cisco Email Authentication Best Practices](https://www.cisco.com/c/en/us/support/docs/security/email-security-appliance/215360-best-practice-for-email-authentication.html)
- [DMARCLY Definitive Guide](https://dmarcly.com/blog/how-to-implement-dmarc-dkim-spf-to-stop-email-spoofing-phishing-the-definitive-guide)
- [Cloudflare Terraform Best Practices](https://developers.cloudflare.com/terraform/advanced-topics/best-practices/)
- [OVH Python API](https://github.com/ovh/python-ovh)

**Why This Matters**: Depuis février 2024, Google et Yahoo exigent SPF, DKIM et DMARC pour les envois bulk. Sans configuration correcte, vos emails finissent en spam. Les expéditeurs authentifiés ont **2.7x plus de chances** d'atteindre l'inbox.


## What Claude Does vs What You Decide

| Claude Does | You Decide |
|-------------|------------|
| Structures sales frameworks | Deal strategy |
| Suggests discovery questions | Relationship approach |
| Creates proposal templates | Pricing decisions |
| Identifies objection patterns | Negotiation tactics |
| Analyzes deal dynamics | Final deal terms |

## What This Skill Does

1. **Configure l'authentification email** - SPF, DKIM, DMARC avec les bonnes valeurs
2. **Sécurise le domaine** - DNSSEC, CAA, protection certificats
3. **Optimise les TTL** - Valeurs recommandées par type de record
4. **Automatise via API** - OVH, Cloudflare, Terraform
5. **Diagnostique les problèmes** - Outils et troubleshooting

## Instructions

### Step 1: Comprendre la Structure de Zone

```
## 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: Email Authentication - SPF

**SPF (Sender Policy Framework)** - Déclare quels serveurs peuvent envoyer des emails pour votre domaine.

```
## 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
```

**Best Practices 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
```

**Exemples SPF courants:**

```
## 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: Email Authentication - DKIM

**DKIM (DomainKeys Identified Mail)** - Signature cryptographique des emails.

```
## 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..."
```

**Best Practices 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
```

**Génération DKIM par service:**

| Service | Où trouver la clé 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: Email Authentication - DMARC

**DMARC (Domain-based Message Authentication)** - Politique qui dit aux serveurs quoi faire si SPF/DKIM échouent.

```
## 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:dmarc@example.com  ; Rapports agrégés (XML)
- ruf=mailto:dmarc@example.com  ; 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)
```

**Progression DMARC recommandée:**

```
## Étape 1: Monitoring (2-4 semaines)
v=DMARC1; p=none; rua=mailto:dmarc-reports@example.com

→ Collecter les rapports, identifier tous les expéditeurs légitimes

## Étape 2: Quarantine (2-4 semaines)
v=DMARC1; p=quarantine; pct=10; rua=mailto:dmarc-reports@example.com

→ Tester sur 10% des emails, augmenter progressivement

## Étape 3: Quarantine 100%
v=DMARC1; p=quarantine; rua=mailto:dmarc-reports@example.com

## Étape 4: Reject (objectif final)
v=DMARC1; p=reject; rua=mailto:dmarc-reports@example.com; sp=reject
```

**Services de monitoring DMARC:**
- [DMARC Analyzer](https://www.dmarcanalyzer.com) (freemium)
- [Postmark DMARC](https://dmarc.postmarkapp.com) (gratuit)
- [EasyDMARC](https://easydmarc.com) (freemium)

---

### Step 5: Security - DNSSEC & CAA

**DNSSEC** - Signe cryptographiquement les réponses DNS pour éviter le spoofing.

```
## 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 Records** - Limite quelles CA peuvent émettre des certificats 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:security@example.com"

# Bloquer tous les wildcards
example.com.  CAA  0 issuewild ";"
```

**Best Practice CAA:**
- Toujours combiner avec DNSSEC (sinon vulnérable au spoofing)
- Lister uniquement les CA que vous utilisez vraiment
- Ajouter un iodef pour être alerté des tentatives

---

### Step 6: TTL Best Practices

```
## 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: Automatisation - OVH API

```python
## 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/*
```

```python
## 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:dmarc@example.com',
    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')
```

---

### Step 8: Automatisation - Cloudflare

```hcl
## 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:dmarc@example.com"
  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"
  }
}
```

**Best Practices Terraform/Cloudflare:**
- Ne jamais stocker les credentials en clair
- Utiliser des variables d'environnement ou un secret manager
- State remote (S3, GCS) pour la collaboration
- Un workspace par environnement (staging/prod)

---

### Step 9: Diagnostic & Troubleshooting

```bash
## 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
```

**Outils en ligne:**

| Outil | URL | Usage |
|-------|-----|-------|
| MXToolbox | [mxtoolbox.com](https://mxtoolbox.com) | SPF, DKIM, DMARC, blacklist |
| DMARC Analyzer | [dmarcanalyzer.com](https://dmarcanalyzer.com/dmarc/dmarc-record-check/) | Validation DMARC |
| DNSViz | [dnsviz.net](https://dnsviz.net) | Debug DNSSEC |
| Mail-Tester | [mail-tester.com](https://www.mail-tester.com) | Score email complet |
| Google Postmaster | [postmaster.google.com](https://postmaster.google.com) | Réputation domaine |

**Erreurs courantes:**

| Symptôme | Cause probable | Solution |
|----------|----------------|----------|
| SPF permerror | Multiple SPF records | Fusionner en un seul |
| SPF permerror | >10 DNS lookups | Utiliser ip4/ip6, macros SPF |
| DKIM fail | Clé mal copiée | Vérifier pas de retour à la ligne |
| DMARC none | Policy p=none | Normal en monitoring, escalader après |
| Emails en spam | SPF/DKIM OK mais pas alignés | Vérifier alignement DMARC (From: header) |
| SERVFAIL | DNSSEC mal configuré | Debugger sur dnsviz.net |

---

## Templates Complets

### Template: Nouveau Domaine (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:dmarc@example.com"

# CAA (si Let's Encrypt pour SSL)
@       CAA     0 issue "letsencrypt.org"
@       CAA     0 iodef "mailto:security@example.com"
```

### Template: Domaine Parké (protection anti-spoofing)

```
## 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:dmarc@example.com"

# Pas de MX = pas de réception
# (ou MX vers null: @  MX  0  .)
```

### Template: Multi-Services (SaaS stack)

```
## 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:dmarc@example.com"
```

## Checklist Configuration 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
```

## Skill Boundaries

### What This Skill Does Well
- Structuring sales conversations
- Creating discovery frameworks
- Analyzing deal dynamics
- Suggesting negotiation approaches

### What This Skill Cannot Do
- Replace relationship building
- Guarantee closed deals
- Know specific buyer psychology
- Make pricing decisions

## References

### Email Authentication
- [Cisco Best Practices](https://www.cisco.com/c/en/us/support/docs/security/email-security-appliance/215360-best-practice-for-email-authentication.html)
- [DMARCLY Guide](https://dmarcly.com/blog/how-to-implement-dmarc-dkim-spf-to-stop-email-spoofing-phishing-the-definitive-guide)
- [EasyDMARC Best Practices](https://easydmarc.com/blog/dmarc-dkim-spf-email-authentication-best-practices/)
- [SalesHive 2025 Guide](https://saleshive.com/blog/dkim-dmarc-spf-best-practices-email-security-deliverability/)

### DNS Security
- [Let's Encrypt CAA](https://letsencrypt.org/docs/caa/)
- [CAA Records Guide 2025](https://domaindetails.com/kb/technical-guides/caa-records-ssl-certificates)
- [DNSSEC Best Practices](https://vercara.digicert.com/resources/understanding-dnssec-best-practices-and-implementation-challenges)

### TTL
- [Catchpoint TTL Guide](https://www.catchpoint.com/dns-monitoring/dns-ttl)
- [Varonis TTL Best Practices](https://www.varonis.com/blog/dns-ttl)
- [AWS Route 53 Best Practices](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/best-practices-dns.html)

### Automation
- [OVH Python Library](https://github.com/ovh/python-ovh)
- [Cloudflare Terraform Best Practices](https://developers.cloudflare.com/terraform/advanced-topics/best-practices/)
- [cf-terraforming](https://developers.cloudflare.com/terraform/advanced-topics/import-cloudflare-resources/)

### Tools
- [MXToolbox](https://mxtoolbox.com)
- [DNSViz](https://dnsviz.net)
- [Mail-Tester](https://www.mail-tester.com)
- [Google Postmaster Tools](https://postmaster.google.com)

## Related Skills

- `nurture-sequences/` - Email deliverability impacte le nurturing
- `distribution-engine/` - Infrastructure pour le marketing automation

---

*Skill version: 1.0*
*Last updated: 2026-01-28*
*Category: devops*
More from guia-matthieu/clawfu-skills