Le blog de Dju - Mot-clé - dkim-filterUn peu de moto, un zeste de geek, et un brin d'autres trucs ;-)2024-03-22T17:50:26+01:00Djuurn:md5:5e61426dd704534f4aef077f5b82260bDotclearSigner ses emails avec DKIMurn:md5:b31954bbb6e1428ef961e79d811c143f2010-01-28T02:15:00+01:002014-11-09T01:56:47+01:00DjuServeurdkimdkim-filtermailopendkimpostfixsignature<p><img src="https://blog.crifo.org/public/201001/.dkim_t.jpg" alt="dkim.png" style="float:left; margin: 0 1em 1em 0;" title="dkim.png, janv. 2010" />
Si vous avez un serveur mail, utilisant postfix, alors voici un outil très pratique pour prouver la provenance des emails envoyés par votre serveur, en leur collant une signature numérique, fonctionnant avec une clé publique/privée.<br />
Cela permettra ainsi d'affirmer que vos emails sont bien envoyés par vous, et également de filtrer les emails ayant une signature incorrecte.</p> <p>D'abord, comment ça marche ?<br />
on créée un enregistrement DNS sur son domaine dans lequel on indiquera une clé publique, accessible à tout le monde.<br />
En interne, lors de l'envoi d'un email, le serveur utilisera une clé privée pour signer le mail.<br />
Ainsi, à l'autre bout, le serveur recevant le mail pourra, via votre clé publique, vérifier et authentifier sa provenance <img src="/themes/BlueSky/smilies/smile.gif" alt=":)" class="smiley" /></p>
<p>On commence par l'installer de manière classique :</p>
<blockquote><p><del>aptitude install dkim-filter</del><br />
aptitude install opendkim</p></blockquote>
<p>Le fichier de configuration principale se trouve dans <strong>/etc/opendkim.conf</strong> et voici le contenu à indiquer pour une config. standard et fonctionnelle.</p>
<pre>
# This is a basic configuration that can easily be adapted to suit a standard
# installation. For more advanced options, see opendkim.conf(5) and/or
# /usr/share/doc/opendkim/examples/opendkim.conf.sample.
# Log to syslog
Syslog yes
# Required to use local socket with MTAs that access the socket as a non-
# privileged user (e.g. Postfix)
UMask 002
# Sign for example.com with key in /etc/mail/dkim.key using
# selector '2007' (e.g. 2007._domainkey.example.com)
Domain mondomaine.com
KeyFile /etc/opendkim/private.key
Selector dkim
# Commonly-used options; the commented-out versions show the defaults.
Canonicalization simple
Mode sv
#SubDomains no
#ADSPDiscard no
InternalHosts /etc/opendkim/internalhosts
</pre>
<p>les lignes importantes :<br />
- Domain: indique le domaine pour lequel la signature sera ajoutée à l'email. si plusieurs, les mettre à la suite en les séparant par une virgule<br />
- KeyFile: le chemin vers le fichier contenant votre clé privée<br />
- Selector: le nom de l'enregistrement dns dans lequel allez chercher la clé publique<br />
- Mode: <strong>s</strong> pour signer les emails sortants et <strong>v</strong> pour vérifier les entrants.<br />
- SubDomaines: no si pas de sous domaines, yes si vous en avez et que vous souhaitez également avoir les emails signés<br />
- X-Header: ajouter un header dans le mail pour indiquer le logiciel qui signe les mails<br />
- InternalHosts: optionnel, fichier contenant la ou les adresses IP des machines utilisant votre postfix en relai pour envoyer des mails. une adresse ip par ligne, ou un masque de sous réseau (exemple 192.168.0.0/24)</p>
<p>Ensuite, on édite le fichier <strong>/etc/default/opendkim</strong> dans lequel on configure sur quelle adresse ip et port le démon va écouter.<br />
par défaut, on a plusieurs lignes commentées, et une non commentée :</p>
<blockquote><p>SOCKET=inet:8891@localhost<br /></p></blockquote>
<p>Signifie que le démon écoutera en local sur 127.0.0.1 sur le port 8891</p>
<p>A présent, on va générer notre couple de clé privée/publique.<br /></p>
<blockquote><p>mkdir /etc/opendkim<br />
cd /etc/opendkim<br />
openssl genrsa -out private.key 1024<br />
openssl rsa -in private.key -pubout -out public.key</p></blockquote>
<p><strong>Attention à garder très précieusement la clé privée. vous devez être le seul à la connaitre sous peine de voir votre authenticité remise en cause lors d"envois d'emails.... </strong><br /></p>
<p>Maintenant, on va déclarer notre enregistrement DNS, qui est de type TXT, et de nom selecteur._domainkey.votre_domaine.com<br />
"selecteur" correspond à la ligne Selector indiqué dans opendkim.conf. En l'occurrence dkim.<br />
Si vous aviez mis dans votre fichier "Selector machin", alors votre enregistrement txt aura comme nom <strong>machin._domainkey.votre_domaine.com</strong> <br />
Pour ceux qui ont un Bind comme serveur DNS, voici la ligne à rajouter dans la zone décrivant votre domaine.</p>
<blockquote><p>dkim._domainkey.votre_domaine.com. IN TXT "k=rsa; p=votre_clé_publique;"</p></blockquote>
<p>ou</p>
<blockquote><p>dkim._domainkey IN TXT "k=rsa; p=votre_clé_publique;"</p></blockquote>
<p>veuillez noter que sans le . à la fin, le nom de l'enregistrement sera automatiquement complété par le nom de domaine.</p>
<p>remplacez "votre_clé_publique" par le contenu de votre fichier public.key, <strong>en n'oubliant pas d'enlever</strong> la 1è ligne (<del></del>-BEGIN RSA PRIVATE KEY<del></del>-) et la dernière (<del></del>-END RSA PRIVATE KEY<del></del>-)</p>
<p>Une fois votre démon opendkim configuré aux p'tis oignons, redémarrez le service</p>
<blockquote><p>/etc/init.d/opendkim restart</p></blockquote>
<p>Enfin, on va configurer postfix pour lui indiquer de passer les emails sortant à opendkim afin de les signer.<br />
On édite le fichier <strong>/etc/postfix/main.conf</strong> et on rajoute ces quelques lignes :</p>
<pre>
milter_default_action = accept
milter_protocol = 2
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891
</pre>
<p>Puis on redémarre postfix pour valider</p>
<blockquote><p>/etc/init.d/postfix restart</p></blockquote>
<p>Et voila ! maintenant, il ne reste plus qu'à envoyer un email depuis votre serveur pour vérifier qu'il est bien signé.<br />
Vous devriez retrouver quelque chose comme ça dans les headers:</p>
<pre>
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=votre_domaine.com; s=dkim;
t=1264638542; bh=CUY18yi5KBUf/CwX9/rU/h/Vq4lY/pH69p31s2CUvUc=;
h=From:To:Subject:Date:Mime-Version:Content-Type:
Content-Transfer-Encoding:Message-id;
b=nzkf/UE8TrZlKLKnzass8LgwbDJ54kqEMu3lOz7Sq2dMhsMuRyEgQuDWr36qmpD1T
kLto5zqX8iYuM0Z81KLf598rLLATCqnm5fr3neKEMyjc7+iANjpAnAl/wBRnnHPZbs
zTxiG+0vdN03Kg2/eDUxgmmxMU4pctBG6rLsDpRY
</pre>
<p>et si le serveur qui reçoit le mail a également une vérification dkim, alors vous aurez un autre header ressemblant à ça ;:</p>
<pre>
Authentication-Results: mail.votre_domaine.org; dkim=pass
(1024-bit key; insecure key) header.i=@votre_domaine.com;
dkim-adsp=none (insecure policy)
</pre>
<p>Une autre bonne solution pour le tester est d'envoyer un mail sur une adresse gmail.<br />
En le consultant depuis le webmail Gmail, vous trouverez en haut une ligne en plus disant <strong>signé par votre_domaine.com</strong><br />
Et la, c'est gagné ! <img src="/themes/BlueSky/smilies/smile.gif" alt=":)" class="smiley" /></p>
<p>Plus d'infos sur <a href="http://fr.wikipedia.org/wiki/DKIM">wikipedia</a> et <a href="http://www.dkim.org/">le site officiel</a></p>https://blog.crifo.org/post/2010/01/28/Signer-ses-emails-avec-DKIM#comment-formhttps://blog.crifo.org/feed/atom/comments/29