Protection de la messagerie par SPF et DKIM

Deux techniques assez efficaces utilisées sur les serveurs de messagerie pour renforcer sa protection vis à vis de tout ce qui s’apparente à du SPAM.

SPF – Sender Policy Framework

Le principe

Lorsqu’un mail va être envoyé par un serveur SMTP A vers un serveur SMTP B, le serveur A va commencer sa séquence de commandes SMTP habituelles type « helo », puis « mail from: toto@mondomaine.org » auprès du serveur B.

Le rôle de serveur B (et de la fonctionnalité SPF) va être de vérifier si le serveur A est bien autorisé à envoyer un mail sous le nom du domaine mondomaine.org. Pour faire cette vérification Serveur B va interroger le DNS qui gère le domaine mondomaine.org, et notamment la présence d’un champ TXT qui commence par « v=spf1 ».

Cet enregistrement DNS SPF peut être précisé la ou les adresses IP autorisées à envoyer des mails pour le compte du domaine mondomaine.org alors l’enregistrement aura la forme « v=spf1 ip4:109.234.161.30/32 -all »  ou « v=spf1 ip4:109.234.161.30 -all« => Seule l’IP (format v4 !) 109.234.161.30.

Partant de ce principe, il serait possible de lister dans le champ SPF les n serveurs SMTP qui envoient des mails pour le compte du domaine mondomaine.org, ce qui donnerait « v=spf1 ip4:109.234.161.30 ip:111.234.116.1167 -all » auquel cas on autorise les 2 IP du champ.

Quand c’est possible, une manière simple de configurer ce champ est d’exploiter la présence des champs MX ; normalement le domaine de messagerie contient au moins 2 IP déclarées dans les enregistrements MX du domaine, il suffit alors préciser dans le champ SPF que les serveurs SMTP déclarés dans les champs MX sont « autorisés » , ce qui donnerait simplement : « v=spf1 mx:mondomaine.org -all » ou encore plus simple « v=spf1 mx -all »

Il est aussi possible (et parfois nécessaire) de combiner les options de test, notamment lorsque vous n’êtes pas gestionnaire de l’émetteur de mail de votre domaine (cas d’un domaine parqué chez un hébergeur qui fournit une messagerie clé en main comme OVH, Gandi, o2switch ou Office365), ou que votre système de messagerie comprend des passerelles émettrices distinctes etc… . Les serveurs qui envoient des mails pour votre domaine sont parfois distincts des serveurs qui les reçoivent (<> MX).

En ce cas, il suffit de préciser par exemple : « v=spf1 ip4:109.234.161.30/32 include:spf.protection.outlook.com include:mx.ovh.com » . On autorise à la fois une plage de 256 IP , l’envoi des mails depuis Office365 et OVH pour le compte du domaine mondomaine.org.

A noter qu’une longueur excessive du champ SPF peut ne pas être lue par tous les serveurs SMTP, et du coup toutes les conditions ne sont pas traitées donc les mails peuvent être rejetés anormalement.

Options SPF

Si l’enregistrement est de la forme « v=spf1 ip4:10.0.0.148/32 ~all » , le mail est accepté mais marqué dans son entête comme non conforme SPF ce qui laisse l’outil de messagerie (serveur ou client) agir pour le classer comme SPAM potentiel. Avec « … -all« le mail est purement rejeté.

-all => rejette le mail si il n’est pas conforme aux critères précédents (enregistrement MX ou IP)

~all => accepte le mail mais le marque dans son entête SMTP, en laissant la possibilité au client de messagerie (Outlook, Thunderbird,…) ou serveur (Domino, Exchange,…) de le marquer comme indésirables ou non,  à la de l’administrateur ou l’utilisateur.

include => permet d’inclure un domaine externe au domaine courant (par exemple si il faut autoriser un tiers comme mx.ovh.com).

+ => selon certaines version SPF, il peut être recommandé de faire précéder chaque condition par un + afin que les critères soient tous pris en compte du premier au dernier, ce qui donnerait par exemple « v=spf1 +ip4:109.234.161.30/32 +include:spf.protection.outlook.com +include:mx.ovh.com »

 

Vérifier le bon paramétrage SPF

La première chose est de tester la présence de l’enregistrement SPF avec DIG « dig TXT mondomaine.org » ou NSLOOKUP « nslookup -type=TXT mondomaine.org »

La seconde est de vérifier l’interprétation du champ SPF  avec :

http://www.kitterman.com/spf/validate.html

https://mxtoolbox.com/spf.aspx

ou encore https://www.mail-tester.com/

 

DKIM – Domain Keys Identified Mail

Principe

Cette technique est plus avancée que SPF car elle utilise un système cryptographique pour valider l’authenticité et l’intégrité (partielle) du mail envoyé.

Côté serveur d’envoi de mails : le serveur de mail (A) va disposer d’une clé privée pour signer tous les mails envoyés sur internet. Chaque mail contiendra alors dans l’entete SMTP le champ « DKIM-Signature » avec notamment la signature sur le contenu du mail :

« DKIM-Signature v=1; a=rsa-sha256; c=relaxed/relaxed; d=TEST.onmicrosoft.com; s=selector1-TEST-onmicrosoft-com; h=From:To:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=0+yZl+O+5j+9zxhyuFJNecLjWjl/UNkbPS1zLzoDW5s=; b=Jt4uYq2EDtdOQdVe6B4G6VgPPM++JAa4K4UeJ5tQHKJyzwNeI1tHQR/cELwOd2f47ecMDvJkgUZSY6edY8+NWBzdNwrN4ZCOC1xKH1RSIX/Vi4PNgV2LwUFYsCmxnFFzeKv8CGVMeWGPRpTj48dBGjwecrVr6EUKWggtT9eZo9I= »

Le champ précise les champs du mails qui ont fait l’objet de la signature, dans l’exemple ci-dessus la signature porte sur l’émetteur, le destinataire, la date, l’objet, l’ID du message et son type.

Lorsque le serveur A envoi ce mail à un serveur B, le serveur B peut alors détecter le champ DKIM dans l’entete SMTP ; en ce cas, le serveur B interrogera la zone DNS du domaine émetteur pour chercher la clé publique dans le champ TXT  du DNS qui ressemble à cela :

« v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEC6GaaDSq5/92jozjayuKRY3+KSq6Cg9LpAaRW0cSJp9d8rTWfPhA8HPD9tkBhBtwgxQ++I0Wu5Aj/bPqAfJ8kIu8thrhyZbx/uah0SizN5lEXLWS ….. »

A partir de cette clé publique, le serveur B pourra vérifier que la signature du mail corresponde.

Si la signature est vérifiée OK avec la clé publique, alors le mail sera accepté et réputé intégre sur les champs signés ; si la signature est invalide, soit par ce que le mail a été modifié par un outils antivirus/antispam après l’envoi du mail par le serveur A, soit parce que le mail a été envoyé par un autre serveur alors ce mail pourra être rejeté selon la politique du serveur de messagerie B.

L’utilisation de DKIM suppose que le serveur émetteur sache intégrer une signature DKIM dans les messages SMTP sortants, et que le serveur de réception (serveur de mail ou moteur antispam) soit en mesure d’interroger le contenu DNS du domaine émetteur pour chaque mail reçu.

 

Les deux outils web permettent de vérifier la bonne implémentation de DKIM

https://mxtoolbox.com/spf.aspx

ou encore https://www.mail-tester.com/

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*