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.
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éemail.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 :
- Installer et configurer spamassassin avec postfix sur Debian
- Installer clamav sur postfix avec une Debian
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.
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
Sur GNU/Linux, vous pouvez utiliser la commande dig afin de vérifier l’entrée spf.
dig TXT malekal.com
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]
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]
Côté DKIM,
nslookup
> set type=txt
> mail._domainkey.malekal.com
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
Vous pouvez aussi vérifier les entrées DNS avec le service mxtoolbox : http://mxtoolbox.com/
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.
On note et des commentaire sont attribués à la configuration de votre serveur mail.
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.
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ètre | Description |
---|---|
v | Version du protocole |
pct | Pourcentage de messages à filtrer |
ruf | Destinataire du rapport forensique |
rua | Destinataire du rapport agrégé |
p | Procédure avec le domaine principal |
sp | Procédure avec le sous-domaine |
adkim | Règle pour le DKIM |
aspf | Rè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 :