Enregistrement SPF : syntaxe, limite DNS et corrections

Résumé

Un enregistrement SPF est une entrée TXT unique, qui commence par v=spf1, dans le DNS de votre domaine. Elle liste les serveurs autorisés à envoyer du courrier avec votre domaine comme expéditeur d'enveloppe. Le récepteur compare l'IP connectée à cette liste et renvoie pass, fail ou softfail. Elle est plafonnée à 10 requêtes DNS, casse au transfert, et n'aide DMARC que si le domaine Return-Path correspond à votre domaine From.

Couloir de salle serveur avec baies réseau et panneau de brassage au premier plan

Un enregistrement SPF est une entrée TXT publiée dans le DNS de votre domaine. Elle liste les serveurs autorisés à envoyer du courrier avec ce domaine comme expéditeur d'enveloppe. Le serveur destinataire compare l'adresse IP qui se connecte à cette liste et renvoie un verdict : pass, fail, softfail ou neutral. L'enregistrement SPF authentifie le chemin d'envoi, pas le message, et ne dit rien de l'adresse From que lit une personne.

C'est cette confusion qui explique la plupart des tickets SPF que nous voyons dans les traces.

Un enregistrement SPF est une liste d'expéditeurs autorisés, publiée dans le DNS

SPF signifie Sender Policy Framework, défini dans la RFC 7208. L'enregistrement est une entrée TXT à la racine du domaine, qui commence par v=spf1. Voici un exemple minimal :

example.com.  IN  TXT  "v=spf1 ip4:203.0.113.10 include:_spf.provider.example ~all"

Lisez-le de gauche à droite. Le récepteur vérifie chaque terme dans l'ordre et s'arrête au premier qui correspond. Le terme all final attrape tout ce qui n'a pas correspondu avant lui.

Le domaine vérifié n'est pas celui de l'en-tête From. C'est celui de la commande SMTP MAIL FROM, appelé expéditeur d'enveloppe ou Return-Path. Si cette valeur est vide, comme sur les rebonds, le récepteur se rabat sur le nom annoncé dans HELO.

Bureau de développeur avec un terminal ouvert et un carnet de schémas réseau dessinés à la main

Les mécanismes : ip4, ip6, a, mx, include, exists

Chaque terme est un mécanisme, éventuellement précédé d'un qualificateur. Six mécanismes suffisent pour couvrir presque tous les enregistrements réels.

Les qualificateurs fixent le résultat quand un terme correspond. + signifie pass et est la valeur par défaut, - signifie fail, ~ signifie softfail, ? signifie neutral. Ainsi, -all veut dire « rejeter tout ce qui n'est pas listé », et ~all veut dire « accepter mais signaler ».

Privilégiez ip4: et ip6: chaque fois que vous contrôlez l'adresse. Ils ne coûtent aucune requête et ne peuvent pas casser quand le DNS de quelqu'un d'autre change.

La limite de 10 requêtes DNS casse les vrais enregistrements

La RFC 7208 plafonne une évaluation SPF à 10 termes qui déclenchent une requête DNS : include, a, mx, ptr, exists, et le modificateur redirect. Les include imbriqués comptent aussi. Au-delà de 10, le résultat est permerror et la vérification échoue de façon définitive, sans retomber sur une autre valeur.

Une seconde limite attire moins l'attention. Les termes qui renvoient une réponse vide ou un NXDOMAIN sont des void lookups, et la norme demande de s'arrêter à deux. Un include: périmé qui pointe vers un fournisseur abandonné l'an dernier est un void lookup que vous continuez à payer.

Voici comment les équipes atteignent réellement le plafond. Google Workspace prend un include. Un fournisseur transactionnel en prend un. Une plateforme marketing en prend un, et en imbrique trois autres. Un outil de support, un CRM et un outil de facturation en ajoutent quatre. Vous êtes à 11 sans avoir rien fait d'inhabituel.

L'échec est silencieux. Le courrier part encore, et certains récepteurs le délivrent malgré tout, mais SPF n'authentifie plus rien pour vous. Si votre alignement DMARC passe par SPF, ce chemin est coupé tant que vous n'aplatissez pas l'enregistrement ou ne retirez pas d'expéditeurs.

Trois corrections fonctionnent, par ordre de préférence :

  1. Retirez les expéditeurs que vous n'utilisez plus. Auditez les include à partir de vos 90 derniers jours de rapports agrégés DMARC.

  2. Déplacez le trafic en masse vers un sous-domaine, comme mail.example.com, avec son propre enregistrement SPF et son propre budget de 10 requêtes.

  3. Aplatissez les include en plages ip4: littérales, mais seulement avec de l'automatisation. Les fournisseurs changent d'IP, et un enregistrement aplati à la main devient obsolète sans aucune alerte.

Tableau blanc avec des flèches partant de plusieurs services d'envoi vers une boîte centrale

Publiez un seul enregistrement SPF par domaine

Un domaine ne doit pas publier deux enregistrements SPF. Si un récepteur trouve deux entrées TXT v=spf1, le résultat est permerror, comme pour la limite de requêtes. Cela arrive quand une personne ajoute un enregistrement pour un nouvel outil pendant qu'une autre en a déjà un en place.

La correction est mécanique. Fusionnez les termes dans un seul enregistrement, avec un seul v=spf1 au début et un seul all à la fin. Tout ce que la documentation du fournisseur vous demande d'ajouter va dans l'enregistrement existant, sous forme d'un include: de plus, jamais comme une nouvelle entrée TXT.

Deux pièges plus petits. Une chaîne TXT de plus de 255 caractères doit être découpée en plusieurs chaînes entre guillemets dans le même enregistrement, ce que la plupart des hébergeurs DNS font pour vous. Et gardez la réponse complète sous environ 450 octets si vous le pouvez, car les réponses plus grosses peuvent basculer de l'UDP vers le TCP, et certains résolveurs gèrent mal cette bascule.

Softfail ou hardfail : choisissez selon ce que vous voyez

Le terme all est une déclaration de politique, et le conseil par défaut (« utilisez -all ») passe à côté de l'essentiel. Un hard fail n'est sûr que si vous connaissez chaque expéditeur légitime.

Notre règle empirique, tirée de la lecture de traces :

Dans la pratique, la différence est plus petite qu'on ne le pense. La plupart des gros récepteurs traitent SPF comme un signal parmi d'autres, et avec une politique DMARC en place, c'est le verdict DMARC qui tranche. Cela dit, un -all sur un enregistrement incomplet, c'est la façon la plus sûre de perdre des factures.

Bundle de câbles ethernet étiquetés dans une baie de serveurs

SPF casse au transfert, et c'est voulu

SPF valide l'IP qui s'est connectée au serveur récepteur. Quand un message est transféré, qu'une liste de diffusion le redistribue ou qu'un service d'alias le relaie, l'IP connectée est celle du relais, pas la vôtre. La vérification SPF échoue alors, même si vous n'avez rien fait de mal.

Vous ne pouvez pas corriger cela à l'intérieur de SPF. C'est la raison pour laquelle DKIM existe à côté : une signature traverse le saut, une liste d'IP ne le traverse pas. Un domaine qui s'appuie sur SPF seul verra des échecs d'authentification sur chaque message transféré.

C'est aussi pourquoi SPF seul ne satisfait pas DMARC pour le courrier transféré. Prévoyez que DKIM porte ces messages.

Alignement SPF : réussir ne veut pas dire correspondre à votre domaine From

Un message peut réussir SPF et échouer quand même à DMARC. DMARC exige que le domaine qui a réussi SPF, celui du Return-Path, corresponde au domaine From visible. De nombreux fournisseurs mutualisés utilisent par défaut leur propre domaine de rebond. SPF passe alors pour provider-mail.net et ne dit rien de example.com.

Vérifiez cela dans les en-têtes bruts. Dans la ligne Authentication-Results, regardez smtp.mailfrom=. Si ce n'est pas votre domaine ou un sous-domaine de celui-ci, SPF passe sans vous aider.

Le remède est un Return-Path personnalisé sur votre propre sous-domaine, ce que la plupart des expéditeurs sérieux supportent. Postmark, Resend, Mailgun et SendGrid documentent tous cette configuration, même si elle n'est pas toujours activée par défaut.

Les fournisseurs de boîtes de réception exigent désormais une authentification

Depuis février 2024, Google impose à tous les expéditeurs de s'authentifier avec SPF ou DKIM. Les expéditeurs de plus de 5 000 messages par jour vers Gmail doivent avoir SPF, DKIM et DMARC en place. Les détails figurent dans les consignes de Google pour les expéditeurs de courrier. Yahoo a fixé des règles de correspondance au même moment.

SPF est ainsi passé de « utile » à un prérequis de délivrabilité. Un enregistrement absent ou cassé se traduit désormais par des rejets et du spam, pas seulement par un score de réputation plus bas.

À l'usage, voilà ce que nous observons après quelques années de traces : les règles attrapent surtout les domaines sans aucune authentification et les expéditeurs à fort taux de plaintes. Un enregistrement SPF correct ne vous fera pas entrer dans la boîte de réception à lui seul, mais un enregistrement absent vous en gardera éloigné.

Vérifier et corriger un enregistrement SPF en quatre étapes

Suivez ces étapes dans l'ordre, et revérifiez après chaque modification DNS.

  1. Consultez l'enregistrement actuel. Lancez dig +short TXT example.com et repérez l'entrée qui commence par v=spf1. S'il y en a deux, fusionnez-les.

  2. Comptez les requêtes. Additionnez include, a, mx, exists, redirect et tout ce qui est imbriqué dans les include. Si vous êtes à 8 ou plus, planifiez le nettoyage maintenant, pas au onzième.

  3. Listez les vrais expéditeurs. Utilisez les rapports DMARC agrégés ou les en-têtes Authentication-Results de vos envois de test. N'ajoutez que les sources qui apparaissent.

  4. Envoyez un test et lisez l'en-tête. Le résultat doit afficher spf=pass avec smtp.mailfrom sur votre domaine.

La propagation DNS prend du temps, et le TTL de votre enregistrement actuel détermine la durée de vie des anciennes réponses. Abaissez-le à 300 secondes la veille d'un changement planifié.

Un exemple complet pour une SaaS avec trois expéditeurs

Prenons un produit qui envoie depuis Google Workspace, un fournisseur transactionnel et un outil de support. Un enregistrement propre ressemble à ceci :

example.com.  IN  TXT  "v=spf1 include:_spf.google.com include:spf.transactional.example include:spf.helpdesk.example -all"

Ce sont trois include, et chacun cache ses propres requêtes imbriquées. Comptez-les avant de publier, car la longueur visible ne dit rien du vrai budget. Un enregistrement avec trois include peut déjà se situer entre 7 et 8 requêtes.

Découpez ensuite par usage. Gardez le courrier humain sur le domaine racine. Placez les notifications produit sur notify.example.com, avec un enregistrement qui ne liste que le fournisseur transactionnel. L'enregistrement racine reste court, le sous-domaine obtient son propre budget de 10 requêtes, et un problème de réputation sur un flux n'entraîne plus l'autre.

Cette séparation rend aussi les rapports DMARC lisibles. Chaque flux a son propre domaine Return-Path, donc un échec désigne un seul expéditeur au lieu d'un tas.

Ce que SPF ne fera pas

Il n'empêchera pas quelqu'un d'usurper votre adresse From, car il ne regarde jamais cet en-tête. Il ne chiffre rien. Il ne vous dira pas pourquoi un message a atterri dans le spam. Et il ne passera pas à l'échelle au-delà du budget de 10 requêtes sans maintenance continue.

Traitez-le comme l'un des trois enregistrements à publier ensemble : SPF pour le chemin d'envoi, DKIM pour l'intégrité du message, DMARC pour la politique qui les relie à votre domaine From. Si vous avez SPF et rien d'autre, l'étape suivante concrète est de publier un enregistrement DMARC en p=none et de lire les rapports pendant deux semaines.

Questions fréquentes

Qu'est-ce qu'un enregistrement SPF, en termes simples ?
C'est une entrée TXT du DNS qui liste les serveurs autorisés à envoyer du courrier pour votre domaine. Les serveurs récepteurs vérifient l'IP expéditrice par rapport à cette liste pour décider si le message passe SPF.
Combien d'enregistrements SPF un domaine peut-il avoir ?
Un seul. Publier deux enregistrements qui commencent tous deux par v=spf1 provoque un permerror. Fusionnez tous les expéditeurs autorisés dans un enregistrement unique, avec un seul terme all à la fin.
Qu'est-ce que la limite de 10 requêtes DNS de SPF ?
La RFC 7208 plafonne l'évaluation à 10 termes qui effectuent une requête DNS : include, a, mx, ptr, exists et redirect. Les include imbriqués comptent aussi. Au-delà, le résultat est un permerror et SPF cesse d'authentifier votre courrier.
Faut-il utiliser -all ou ~all dans mon enregistrement SPF ?
Utilisez ~all pendant que vous recensez vos expéditeurs, puis passez à -all quand les rapports DMARC montrent que toutes les sources légitimes passent pendant plusieurs semaines. N'utilisez jamais +all, qui autorise n'importe quel serveur.
Pourquoi SPF échoue-t-il lorsqu'un message est transféré ?
SPF vérifie l'IP qui se connecte au récepteur. Un relais se connecte depuis sa propre IP, que votre enregistrement ne liste pas. DKIM survit au transfert, car la signature voyage avec le message.
SPF suffit-il à protéger contre l'usurpation ?
Non. SPF valide l'expéditeur d'enveloppe, pas l'adresse From visible. Pour protéger le domaine From, il faut DMARC, qui exige que SPF ou DKIM réussisse et corresponde à ce domaine.
notificationharbor
Démarrer gratuitement