Authentifier ses mails avec SPF, DKIM et DMARC

Documentation toujours en cours d'écriture…

Pour tester la validité d'envoit des mails : www.mail-tester.com

SPF

Sender Policy Framework, permet de définir qui à le droit d'envoyer des mails. Ainsi les serveurs de qui réceptionne les mails pourront savoir si le mail est légitime ou pas.

Par exemple pour le domaine ci-dessous, uniquement les serveurs pointé par le champs MX peuvent envoyer des mails.

$ dig txt bruno-tatu.com @9.9.9.9 +short
"v=spf1 mx -all"

Voici les options disponible :

v = utilise la version 1 du protocole SPF
a = L'envoie de mail est autorisé si le domaine équivaut à l'adresse IP du serveur de mail.
mx = correspond si le domaine expéditeur est en rapport avec l'IP du serveur de mail.
ip4 = correspond si l'expéditeur est dans la place ipv4
ip6 = correspond si l'expéditeur est dans la plage ipv6
-all = le serveur en réception ne devra supprimer les mails ne correspondant pas aux options prédéfinis.
~all = utilisé pour des tests et le serveur en réception sait que le mail peut être illicite. (peut être considéré comme spam)

DKIM

Vu qu'il est possible de contourner le système SPF via usurpation DNS (par exemple), DomainKeys Identified Mail permet d'ajouter une entête détenant une suite de clé faisant office de signature authentifiant ainsi le mail.

Voici un exemple de signature que l'on peut retrouver dans un entête :

DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=bruno-tatu.com;
s=default; t=1514829010;
bh=bqUJbwCSxDRmBepojA+E0yS5ltHTFZknAYHPt8zaWMQ=;
h=Subject:To:Date:From:From;
b=W7CsSYGmSXYshQtJE/ENVzwfX1ISkoShQL8OndGDxRfTybDLo4PkT81zLV4ZZ7rpw
oUKjIfJXAcG2LbgHzJzsxrTOcqwC3SJzpV5jQmvyWnxDIepISzef5Qqhx3pY5x6Ox6
1DKodVHkiUoDXwMqYwTbJYq1sk1j0N2dmaopE0Ng=

Le serveur réceptionnant ce mail devra exécuter une requête DNS pour obtenir la clé publique :

$ host -t TXT default._domainkey.bruno-tatu.com 
default._domainkey.bruno-tatu.com descriptive text "v=DKIM1; k=rsa; t=s; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC+WNc4MBZfCU8HN0KCg4thzF3wHOxu71KMhFOVyLtV2shkPRoDIQJDNtpwWbvdxud3cvSMXpwaqzOxsjCuO+OSH+D/4mja3xf/T6fyQPCjRMb5LOCqUoAg9AY0OokGy8x/qQVVC0zlGt8NHW0QblRUhsneiHlvWddRXyDiumi+hwIDAQAB"

Ainsi, avec l'algorithme RSA, le serveur saura si la signature est valide ou pas.

Je vous invite à suivre ce tutoriel pour mettre en place la solution.

Options

    b = the actual digital signature of the contents (headers and body) of the mail message
    bh = the body hash
    d = the signing domain
    s = the selector
    v = the version
    a = the signing algorithm
    c = the canonicalization algorithm(s) for header and body
    q = the default query method
    l = the length of the canonicalized part of the body that has been signed
    t = the signature timestamp
    x = the expire time
    h = the list of signed header fields, repeated for fields that occur multiple times

DMARC

Le Domain-based Mail Authentication, Reporting and Conformance est pas souvent utilisé mais il sert au débuggage. Par exemple, si un domaine échoue au niveau de la vérification DKIM, un mail peut être retourné à l'expéditeur pour lui expliquer la raison.

Je n'ai à ce jour pas d'expérience à ce sujet

Sources :