Menu Fermer

Installer et configurer Postfix avec SPF + DKIM + DMARC

Postfix est serveur mail (MTA) très efficace et populaire et disponible sur la plupart des distributions Linux (Ubuntu, Debian, CentOS, Redhat …).
Dans ce tutoriel, nous allons voir comment configurer Postfix avec les normes et technologiques : Sender Policy Framework (SPF), DKIM (DomainKeys Identified Mail) et DMARC.

Vous trouverez toutes les explications pour la mise en place de SPF et DKIM sur Postfix avec les fichiers de configuration.
En fin du tutoriel, des aides pour tester l’envoie de mail et vérifier que votre serveur de mail répond bien à ces spécifications.

Installer et configurer Postfix avec SPF + DKIM + DMARC

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.
Quelques rappels :

  • SPF (Sender Policy Framework) : Définit les domaines ou IP autorisés à envoyer des mails dans la déclaration DNS du domaine. Cela vise à protéger contre l’usurpation d’identité et le SPAM
  • DKIM (DomainKeys Identified Mail) : ajoute une signature cryptographique à l’en-tête de chaque message envoyé afin de prouver que votre serveur SMTP est bien l’émetteur des emails. Là aussi il s’agit de protéger contre l’usurpation d’identité
  • DMARC (Domain-based Message Authentication, Reporting and Conformance) : Définit une politique à appliquer sur les emails reçus

Installation et configuration Postfix avec SPF + DKIM

SPF : Faire ses déclarations DNS

On commence par effectuer ses déclarations DNS SPF.
Pour cela, ouvrez l’interface de votre fournisseur DNS.
Vous pouvez vous en inspirer pour effectuer votre 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"

Configurer 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

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

Installer clamav et Spamassassin

Pour installer un filtrage antivirus et Spam sur votre passerelle SMTP Postfix, cela se passe sur ces tutoriels :

Tester l’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 de votre serveur mail

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 [email protected] designates 94.23.44.69 as permitted sender) [email protected]
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 [email protected] designates 94.23.44.69 as permitted sender) [email protected]
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>

Tester l’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; [email protected]; [email protected]
Dec 9 13:13:20 www policyd-spf[23471]: Pass; identity=mailfrom; client-ip=209.85.167.171; helo=mail-oi1-f171.google.com; [email protected]; [email protected]
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=<[email protected]>, 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=<[email protected]>
Dec 9 13:13:21 www postfix/pipe[23474]: B2309102668: to=<[email protected]>, 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 '[email protected]'
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=<[email protected]>, 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=<[email protected]>, orig_to=<[email protected]>, 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

Configurer DMARC sur Postfix

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:[email protected];ruf=mailto:[email protected];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.

Générer et configurer un certificat SSL sur Postfix

Pour chiffrer vos emails avec un certificat SSL sur Postfix, suivez ce tutoriel :

Liens