DKIM – Domain Keys Identified Mail –  est une technique d’authentification fiable du nom de domaine d’un émetteur de messages électroniques afin d’éviter le spam et le hameçonnage. Elle se base sur une clé de chiffrement asymétrique ; la clé privée est utilisée par le MTA pour chiffrer une partie de chaque message et insérer le résultat généré dans l’en-tête DKIM associée au message :

DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=hbis.fr; s=default;
	t=1352850858; bh=6FHfDLJhwx+aojx+pYcAnVDb+BLWaDNaO8vmZtguLiI=;
	h=Message-ID:Date:From:MIME-Version:To:Content-Type:
	 Content-Transfer-Encoding;
	b=wHB33aib+Km2FQRYuaYX8xgHnvrGsllOITWQ5HI5Pc+MGHRVogsYrRjfMJwAa1DTv
	 YRlLJN/GUoS/28gPymKm/yxjMEjlORWwVnb73nTU2PrLXObS0wKaiUXO43gqMBfhv3
	 Dn3ifsXHpx043ERQlv79CLgigcdvDSU1md4QXRGw=

La clé publique est publiée par champ TXT dans la zone DNS du domaine de l’émetteur. Celle-ci est récupérée par les différents MTA en destination afin de valider l’origine du mail par déchiffrement de l’en-tête DKIM.

;; QUESTION SECTION:
;default._domainkey.hbis.fr.	IN	TXT

;; ANSWER SECTION:
default._domainkey.hbis.fr. 10723 IN	TXT	"v=DKIM1\; g=*\; k=rsa\;
p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDtMiBUJ6Aq0VHi0N1FTCsau0iLnmptFrG1GK
 +KHM1/bIcPUlD+GHKekEg9Y5jyaZ4liXQy67SG48d7Z1iKuipZnzvqizEHwFGCdw/b12Q8hi3ay
 gmz1F9wJXYfklc12D2USrviO69hzKRohE7CA6LxWL905yJNXoWzFHqntaAiwQIDAQAB"

Dans le cas où le déchiffrement est impossible, le MTA peut/doit refuser la réception du message. Sinon il le délivre en ajoutant une en-tête d’authenticité :

Authentication-Results: mx.google.com; spf=pass (google.com: domain of
bhuisgen@hbis.fr designates 2001:41d0:51:1::205 as permitted sender)
smtp.mail=bhuisgen@hbis.fr; dkim=pass header.i=@hbis.fr

DKIM repose donc intégralement sur la sécurité du serveur DNS de l’émetteur, qui ne doit pas être compromis, mais elle à l’avantage d’être totalement transparente pour les utilisateurs (ce qui n’est pas le cas de PGP par exemple).

Installation

root@vks10205:~# apt-get install opendkim

Configuration

root@vks10205:~# nano /etc/opendkim.conf
Syslog			yes
UMask			002

KeyTable		/etc/opendkim/key-table
SigningTable		/etc/opendkim/signing-table
ExternalIgnoreList	/etc/opendkim/trusted-hosts
InternalHosts		/etc/opendkim/trusted-hosts
root@vks10205:~# nano /etc/default/opendkim
SOCKET="inet:12345@localhost"

Les hôtes/IP autorisés à utiliser les clés de chiffrement sont à spécifier :

root@vks10205:~# mkdir /etc/opendkim/
root@vks10205:~# nano /etc/opendkim/trusted-hosts
localhost
127.0.0.1
::1

La clé asymétrique d’un domaine est générée de cette façon :

root@vks10205:~# mkdir -p /etc/opendkim/keys/hbis.fr
root@vks10205:~# cd /etc/opendkim/keys/hbis.fr
root@vks10205:~# opendkim-genkey -r -d hbis.fr
root@vks10205:~# chown -R opendkim:opendkim /etc/opendkim/keys/hbis.fr

La clé publique est à ajouter dans la zone DNS du domaine :

root@vks10205:~# cat /etc/opendkim/keys/hbis.fr/default.txt

Le domaine peut ensuite être référencé :

root@vks10205:~# cat /etc/opendkim/key-table
default._domainkey.hbis.fr hbis.fr:default:/etc/opendkim/keys/hbis.fr/default.private
root@vks10205:~# cat /etc/opendkim/signing-table
hbis.fr default._domainkey.hbis.fr

Ces opérations sont à répéter pour chaque domaine de messagerie.

Lancement

root@vks10205:~# /etc/init.d/opendkim start

Configuration de Postfix

Le MTA doit enfin se connecter au démon OpenDKIM pour effectuer la signature des messages :

root@vks10205:~# nano /etc/postfix/main.cf
milter_default_action = accept
milter_protocol = 6
smtpd_milters = inet:127.0.0.1:12345
non_smtpd_milters = inet:127.0.0.1:12345
root@vks10205:~# /etc/init.d/postfix restart

Configuration d’Amavis

Si vous utilisez Amavis pour le filtrage mail, il convient de désactiver le milter précédent suite au filtrage afin d’éviter une seconde signature DKIM :

127.0.0.1:10025 inet n  -       n       -       -       smtpd
[...]
    -o receive_override_options=no_address_mappings,no_header_body_checks,
                                no_unknown_recipient_checks,no_milters