Installation et configuration Postfix avec SPF + DKIM

On continue avec les tutos de serveur mail (MTA), après celui sur le webmail roundcube.
Dans ce tuto, comment configurer Postfix avec les normes et technologiques : Sender Policy Framework (SPF) et DKIM (DomainKeys Identified Mail).
Vous trouverez toutes les explications pour la mise en place de SPF et DKIM sur Postfix.

Installation et configuration Postfix avec SPF + DKIM

Introduction

La sécurisation des serveurs de mails (MTA) et la lutte contre l’usurpation d’email (spoofing en anglais), le phishing et SPAM n’est pas forcément chose facile.
Une des problématiques étant que le protocole Simple Mail Transfer Protocol (SMTP) utilisé pour le transfert du courrier électronique sur Internet ne prévoit pas de mécanisme de vérification de l’expéditeur.
C’est-à-dire qu’il est facile d’envoyer un courrier avec une adresse d’expéditeur factice, voire usurpée.
Quelques liens du site autour de ces problématiques :

Afin de limiter ces problèmes, des normes sont apparues pour tenter de limiter ces usurpations.

DKIM

En 2006, les spécifications pour DKIM sont apparues.
DKIM fonctionne par signature cryptographique du corps du message ou d’une partie de celui-ci et d’une partie de ses en-têtes DKIM et d’ajouter une signature à l’en-tête de chaque message envoyé. Cette signature est propre à votre domaine, elle est générée par une clé privée. La clé publique qui y correspond est ajoutée à votre domaine, dans un enregistrement DNS.
Plus d’informations sur le fonctionnement de ces clés de chiffrement sur la page : Le chiffrement (cryptage) des données : comment ça marche

Quand un serveur de réception (Gmail, Hotmail, ou n’importe quel serveur d’entreprise par exemple) reçoit votre message, il vérifie la clé publique pour déterminer si votre clé privée à été utilisée pour générer la signature du message. Si cette clé privée n’est pas utilisée, le message peut alors considéré comme une tentative de phishing ou de spam.

SPF

En 2014 de nouvelles normes sont apparus avec SPF.

Le protocole  SPF vise à réduire les possibilités d’usurpation en publiant, dans le DNS, un enregistrement (de type TXT) indiquant quelles adresses IP sont autorisées ou interdites à envoyer du courrier pour le domaine considéré.

L’identité testée par SPF est celle indiquée par la commande MAIL FROM dans la session SMTP. C’est donc une information qui appartient à l’enveloppe du courrier, pas à ses en-têtes. Dans certaines conditions, SPF peut aussi utiliser le nom de la machine expéditrice, tel que spécifié dans la commande HELO)

Les deux mécanismes passent donc par des déclarations DNS de votre domaine d’email.
Cela peut aider à détecter les mails de spam.
Par exemple, ci-dessous spamassassin s’appuie sur SPF pour noter un mail de spam.

SPF

Voici quelques exemples de déclaration SPF.
Vous pouvez vous en inspirer pour effectuer vore déclaration SPF.

Ceci indique que seul le serveur 1.1.1.1 peut envoyer des emails pour ce domaine :

@ 10800 IN TXT "v=spf1 ip4:1.1.1.1 ~all"

Il est aussi possible de déclarer un reverse DNS :

@ 10800 IN TXT "v=spf1 ptr:monreverse.mon_domaine.fr ~all"

Ceci indique que tous les serveurs ayant un “reverse” se terminant par malekal.com peuvent envoyer les emails de ce domaine:

@ 10800 IN TXT "v=spf1 ptr:malekal.com ~all"

ici seulement le serveur 94.23.44.69 peut envoyer des mails

@ 10800 IN TXT "v=spf1 ip4:94.23.44.69 ~all"

DKIM

DKIM nécessite d’effectuer des opérations sur le serveur mail et Postfix, puisque les mails générés vont être modifiés.

Configuration OpenDKIM

On commence par installer le package opendkim, le package spamass-milter est nécessaire si vous utilisez spamassassin.

 apt-get install opendkim opendkim-tools spamass-milter

Si vous utilisez clamav, il faut installer le packageclamav-milter (non testé)

Éditez le fichier /etc/opendkim.conf à la fin, ajoutez les éléments suivants :

AutoRestart             Yes
AutoRestartRate         10/1h
UMask                   002
Syslog                  yes
SyslogSuccess           Yes
LogWhy                  Yes

Canonicalization        relaxed/simple

ExternalIgnoreList      refile:/etc/opendkim/TrustedHosts
InternalHosts           refile:/etc/opendkim/TrustedHosts
KeyTable                refile:/etc/opendkim/KeyTable
SigningTable            refile:/etc/opendkim/SigningTable

Mode                    sv
PidFile                 /var/run/opendkim/opendkim.pid
SignatureAlgorithm      rsa-sha256

UserID                  opendkim:opendkim

Socket                  inet:12301@localhost
  • AutoRestart: Redémarre le filtre en cas de plantage.
  • AutoRestartRate: Indique le ratio de redémarrage minimum et maximum. Si le nombre de redémarrage est plus rapide que ce ratio, ce dernier va être arreté.
  • UMask: indique les permissions et ID utilisateur/groupe.
  • Syslog, SyslogSuccess, *LogWhy: activé les log syslog
  • Canonicalization: méthode canonical de signature des messages,
    • simple : autorise aucune modification
    • relaxed : autorise des modificiations mineures comme changer les espaces.
    • relaxed/simple : L’en-tête du mail utilisera la méthode relaxed et le corps du message utilisera la méthode simple.
  • ExternalIgnoreList: la liste des des hôtes par lequel les mails peuvent passer sans signatures.
  • InternalHosts: liste des hôtes à ne pas vérifier et signer : signature sans vérification.
  • KeyTable: Le chemin des tables de clés de signatures.
  • SigningTable: Liste des tables de signatures pour lequels seront basés les champs from des mails.
  • Mode: declares operating modes; in this case the milter acts as a signer (s) and a verifier (v)
  • PidFile: Le fichier PID (process identification number)
  • SignatureAlgorithm:  indique l’algorithme de signatures à utiliser
  • UserID: Le UserID du processus opendkim
  • Socket: Le socket d’écoute de opendkim. Postfix va envoyer les messages à opendkim pour les vérification et signatures à travers ce socket.

A noter que vous pouvez déclarer un serveur DNS avec nameservers dans le fichier de configuration opendkim autre que celui de /etc/resolv.conf si vous filtrez certains résolutions DNS.

Editez /etc/default/opendkim

Ajoutez à la fin :

smtpd_milters = unix:/spamass/spamass.sock, inet:localhost:12301
non_smtpd_milters = unix:/spamass/spamass.sock, inet:localhost:12301

Si vous utilisez clamav et avez installé clamav-milter (non testé), cela donne :

smtpd_milters = unix:/spamass/spamass.sock, unix:/clamav/clamav-milter.ctl, inet:localhost:12301
non_smtpd_milters = unix:/spamass/spamass.sock, unix:/clamav/clamav-milter.ctl, inet:localhost:12301

On créé les dossiers suivants :

mkdir /etc/opendkim
mkdir /etc/opendkim/keys

Éditez le fichier :

/etc/opendkim/TrustedHosts

Il s’agit ici de déclarer les zones de confiances, modifiez selon votre classe d’IP et domaines.
Vous pouvez utiliser les wildcards, si vous désirez déclarer des sous-domaines

127.0.0.1
localhost
192.168.0.1/24
*.malekal.com

Éditez le fichier /etc/opendkim/KeyTable pour y insérer la ligne suivante
Il s’agit de la déclaration des clés par domaine avec le selector.
Par défaut, opendkim utilise le selector mail.
Modifiez le domaine ci-dessous, ajoutez d’autres domaines, si vous êtes en multi-domaines

mail._domainkey.malekal.com malekal.com:mail:/etc/opendkim/keys/malekal.com/mail.private

La table de signature dans le fichier : /etc/opendkim/SigningTable
Là aussi, modifiez et ajoutez les domaines selon votre configuration.

*@malekal.com mail._domainkey.malekal.com

spamass-milter

Si vous utilisez spamassassin et vous avez installé spamass-milter.
Modifiez le paramètre OPTIONS du fichier /etc/default/spamass-milter

OPTIONS="-u spamass-milter -i 127.0.0.1 -m -I -- --socket=/var/run/spamassassin/spamd.sock"

Génération des clés privées et publiques

cd /etc/opendkim/keys
mkdir malekal.com
cd malekal.com

puis on génère les clés :

opendkim-genkey -s mail -d malekal.com
  • -s indique le sélecteur, ici dans notre cas il s’agit de mail
  • -d le domaine,

Cette commande créé deux fichiers :

  • mail.private est votre clé privée
  • mail.txt contient la clé publique

puis on attribue le bon utilisateur et groupe au fichier :

chown opendkim:opendkim mail.private

Ajouter les clés publics au DNS

On récupère la clé publique :

cat mail.txt

La clé publique se trouve dans le paramètre p.
On récupère l’entrée mail._domainkey correspondant à la table du fichier /etc/opendkim/KeyTable

mail._domainkey IN      TXT     ( "v=DKIM1; k=rsa; "
          "p=lacleprubliquequiestlongue" )  ; ----- DKIM key mail for malekal.com

La clé publique est à récupérer afin de la placer dans la déclaration DNS.
Cette déclaration DNS est de type TXT, elle est de la forme :

mail._domainkey 10800 IN TXT "v=DKIM1; k=rsa; p=lacleprubliquequiestlongue"

On redémarre les services :

service postfix restart
service spamass-milter restart
service opendkim restart

Test d’envoi de mail

Voici un exemple de déclaration DNS SPF et DKIM sur les serveurs Gandi :

Il faut attendre quelques heures que les modifications DNS se propagent.

Test et vérification de l'envoi de mails

Vérifier les entrées DNS

Pour vérifier les entrées DNS,
Sur Windows, vous pouvez la commande nslookup

nslookup
> set type=TXT
> malekal.com
Test et vérification de l'envoi de mails

Sur GNU/Linux, vous pouvez utiliser la commande dig afin de vérifier l’entrée spf.

dig TXT malekal.com
Test et vérification de l'envoi de mails

Voici la commande à utiliser pour vérifier l’entrée DKIM avec le selector mail.

dig mail._domainkey.malekal.com TXT

On peut utiliser aussi ce site qui vérifie aussi le contenu de la clé publique.

Pour les tests emails, de malekal.com vers une adresse gmail.com
Lorsqu’aucune entrée SPF n’est déclarée, le serveur gmail « devine » la règle SPF à appliquer « best guess record domain for »

Authentication-Results: mx.google.com;
spf=pass (google.com: best guess record for domain of xxx@malekal.com designates 94.23.44.69 as permitted sender) smtp.mailfrom=xxx@malekal.com
Test et vérification de l'envoi de mails

avec une déclaration SPF, la vérification est en succès :

Authentication-Results: mx.google.com;
spf=pass (google.com: domain of xxx@malekal.com designates 94.23.44.69 as permitted sender) smtp.mailfrom=xxx@malekal.com
Test et vérification de l'envoi de mails

Côté DKIM,

nslookup
> set type=txt
> mail._domainkey.malekal.com
Test et vérification de l'envoi de mails

on récupère un en-tête et on y retrouve la signature DKIM avec les informations déclarées :

  • -d domaine
  • -s le sélecteur
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=malekal.com; s=mail; t=1497960309; bh=xHOSDWRzKq/MzUni/4wNm2H933+iN2Z7+9Lq3JdxPvA=; h=To:Subject:Date:From:From; b=xxxx/code>

Test envoie de mail

Côté Gmail, on obtient le dkim=pass et spf=pass

Test et vérification de l'envoi de mails

Vous pouvez aussi vérifier les entrées DNS avec le service mxtoolbox : http://mxtoolbox.com/

Test et vérification de l'envoi de mails

Le site mail-tester.com permet aussi de vérifier l’envoi de mail (surtout pour des mailling).
Rendez-vous sur le site https://www.mail-tester.com/
Récupérer l’adresse email, cliquez sur vérifier votre score
Envoyez un mail sur l’adresse email indiquée.

Test et vérification de l'envoi de mails

On note et des commentaire sont attribués à la configuration de votre serveur mail.

Test et vérification de l'envoi de mails

Voici un log de réception avec SPF et DKIM en fonction :

Dec 9 13:13:20 www postfix/smtpd[23402]: connect from mail-oi1-f171.google.com[209.85.167.171]
Dec 9 13:13:20 www policyd-spf[23471]: None; identity=helo; client-ip=209.85.167.171; helo=mail-oi1-f171.google.com; envelope-from=malekalmorte75@gmail.com; receiver=mailling@malekal.com
Dec 9 13:13:20 www policyd-spf[23471]: Pass; identity=mailfrom; client-ip=209.85.167.171; helo=mail-oi1-f171.google.com; envelope-from=malekalmorte75@gmail.com; receiver=mailling@malekal.com
Dec 9 13:13:20 www postfix/smtpd[23402]: B2309102668: client=mail-oi1-f171.google.com[209.85.167.171]
Dec 9 13:13:20 www postfix/cleanup[23472]: B2309102668: message-id=<CAE9g8pRhhQZnrbeZTodKY6-MrWj+3nYrVNLSHKhOjJGkzYkJfQ@mail.gmail.com>
Dec 9 13:13:20 www opendkim[23367]: B2309102668: mail-oi1-f171.google.com [209.85.167.171] not internal
Dec 9 13:13:20 www opendkim[23367]: B2309102668: not authenticated
Dec 9 13:13:21 www opendkim[23367]: B2309102668: DKIM verification successful
Dec 9 13:13:21 www opendkim[23367]: B2309102668: s=20161025 d=gmail.com SSL
Dec 9 13:13:21 www postfix/qmgr[19745]: B2309102668: from=<malekalmorte75@gmail.com>, size=2758, nrcpt=1 (queue active)
Dec 9 13:13:21 www spamd[10336]: spamd: connection from ::1 [::1]:44134 to port 783, fd 5
Dec 9 13:13:21 www spamd[10336]: spamd: processing message <CAE9g8pRhhQZnrbeZTodKY6-MrWj+3nYrVNLSHKhOjJGkzYkJfQ@mail.gmail.com> for spamassassin:1004
Dec 9 13:13:21 www postfix/smtpd[23402]: disconnect from mail-oi1-f171.google.com[209.85.167.171]
Dec 9 13:13:21 www spamd[10336]: util: refusing to untaint suspicious path: "/${SAHOME}"
Dec 9 13:13:21 www spamd[23476]: util: setuid: ruid=1004 euid=1004 rgid=1004 33 1004 1004 egid=1004 33 1004 1004
Dec 9 13:13:21 www spamd[10336]: spamd: clean message (-1.9/5.0) for spamassassin:1004 in 0.5 seconds, 2855 bytes.
Dec 9 13:13:21 www spamd[10336]: spamd: result: . -1 - BAYES_00,FREEMAIL_FROM,HTML_MESSAGE,RCVD_IN_MSPIKE_H2,SPF_PASS,TVD_SPACE_RATIO scantime=0.5,size=2855,user=spamassassin,uid=1004,required_score=5.0,rhost=::1,raddr=::1,rport=44134,mid=<CAE9g8pRhhQZnrbeZTodKY6-MrWj+3nYrVNLSHKhOjJGkzYkJfQ@mail.gmail.com>,bayes=0.000000,autolearn=ham autolearn_force=no
Dec 9 13:13:21 www postfix/pickup[19744]: 94001105C23: uid=1004 from=<malekalmorte75@gmail.com>
Dec 9 13:13:21 www postfix/pipe[23474]: B2309102668: to=<mailling@malekal.com>, relay=spamassassin, delay=1.1, delays=0.53/0/0/0.52, dsn=2.0.0, status=sent (delivered via spamassassin service)
Dec 9 13:13:21 www postfix/qmgr[19745]: B2309102668: removed
Dec 9 13:13:21 www postfix/cleanup[23472]: 94001105C23: message-id=<CAE9g8pRhhQZnrbeZTodKY6-MrWj+3nYrVNLSHKhOjJGkzYkJfQ@mail.gmail.com>
Dec 9 13:13:21 www opendkim[23367]: 94001105C23: no signing table match for 'malekalmorte75@gmail.com'
Dec 9 13:13:21 www opendkim[23367]: 94001105C23: DKIM verification successful
Dec 9 13:13:21 www opendkim[23367]: 94001105C23: s=20161025 d=gmail.com SSL
Dec 9 13:13:21 www postfix/qmgr[19745]: 94001105C23: from=<malekalmorte75@gmail.com>, size=3337, nrcpt=1 (queue active)
Dec 9 13:13:21 www spamd[10333]: prefork: child states: II
Dec 9 13:13:21 www postfix/local[23480]: 94001105C23: to=<malekalmorte@malekal.com>, orig_to=<mailling@malekal.com>, relay=local, delay=0.06, delays=0.05/0.01/0/0, dsn=2.0.0, status=sent (delivered to command: /usr/bin/procmail -Y -a $DOMAIN)
Dec 9 13:13:21 www postfix/qmgr[19745]: 94001105C23: removed

Enfin cet autre site permet de tester le contenu des mails.

Test et vérification de l'envoi de mails

BONUS : DMARC

DMARC, qui vient de l’anglais Domain-based Message Authentication, Reporting and Conformance est un standard qui vient se greffer à SPF et DKIM

DMARC standardise la façon dont les destinataires (au sens des MTA destinataires) réalisent l’authentification des e-mails en utilisant les mécanismes de Sender Policy Framework et de DomainKeys Identified Mail. Cela signifie que l’expéditeur (au sens d’un MTA expéditeur) recevra les résultats de l’authentification de ses messages par AOL, Gmail, Hotmail, Yahoo! et tout autre destinataire qui implémente DMARC.

Une politique DMARC autorise l’expéditeur à indiquer que ses e-mails sont protégés par SPF et/ou DKIM et dit au destinataire que faire si ces méthodes d’authentification échouent (ex : rejeter tous les emails sans DKIM et prévenir une adresse email). DMARC supprime les conjectures que le destinataire doit faire à propos de la façon de gérer ces messages en échec, limitant ou supprimant l’exposition de l’utilisateur aux messages potentiellement frauduleux ou dangereux. DMARC fournit également un moyen pour les destinataires de rendre compte à l’émetteur du message qu’il a réussi ou échoué l’évaluation DMARC.

v=DMARC1;p=quarantine;pct=100;rua=mailto:postmaster@example.org;ruf=mailto:forensik@example.org;adkim=s;aspf=r
ParamètreDescription
vVersion du protocole
pctPourcentage de messages à filtrer
rufDestinataire du rapport forensique
ruaDestinataire du rapport agrégé
pProcédure avec le domaine principal
spProcédure avec le sous-domaine
adkimRègle pour le DKIM
aspfRègle pour le SPF

Source : https://fr.wikipedia.org/wiki/DMARC

Sur Debian, il faut installer le paquet opendmarc

apt-get install opendmarc

puis dans le fichier /etc/opendmarc.conf, on peut remplacer le socket.

Socket inet:54321@localhost

Enfin on peut ajouter le contenu dans /etc/postfix/main.cf comme ceci.

smtpd_milters = inet:localhost:12301 inet:localhost:54321
non_smtpd_milters = inet:localhost:12301 inet:localhost:54321

Enfin relancez les daemon postfix et opendmarc.

Liens

image_pdfimage_print
(Visité 5 291 fois, 1 visites ce jour)

Add Comment