Voici un récapitulatif de la mise en place des protocoles d’authentification SMTP DKIM et DomainKeys sous Debian Lenny. Le serveur de mail utilisé est Postfix, mais tout MTA sachant communiquer avec les milter de Sendmail peut normalement être utilisé. La signature et la vérification des messages sera effectuée pour le domaine <domain>
. Voici les étapes :
Installation de dkim-filter
et dk-filter
:
# aptitude install dkim-filter dk-filter
Ajouter dans le fichier /etc/dkim-filter.conf
un ensemble de directives indiquant le nom du domaine qui va utiliser DKIM, un nom de selector (exemple : 2009
), et le nom du fichier qui contiendra la clé privée utilisée pour la signature. L’utilisation des selector permet notamment de changer et/ou révoquer facilement une clé, ou d’utiliser des clés différentes sur des serveurs de mails différents.
Domain <domain>
KeyFile /etc/ssl/dkim_<domain>_<selector>.key
Selector <selector>
Générer la clé :
# openssl genrsa -out /etc/ssl/private/dkim_<domain>_<selector>.key
Et en extraire la partie publique :
# openssl rsa -in /etc/ssl/private/dkim_<domain>_<selector>.key \
-pubout -outform PEM
Dans la zone DNS du domaine <domain>
, ajouter l’enregistrement suivant. La valeur de <key>
correspond à la sortie de la commande précédente, contenue entre les lignes _BEGIN PUBLIC KEY_
et _END PUBLIC KEY_
:
<selector>._domainkey IN TXT "v=DKIM1; g=*; k=rsa; p=<key>"
Ajouter les paramètres de démarrage de dkim_filter
dans /etc/default/dkim-filter
. Le fichier /etc/dkim.hosts
contient la liste des serveurs dont les mails sortants seront chiffrés :
SOCKET="inet:2505@localhost"
DAEMON_OPTIONS="-l -i /etc/dkim.hosts"
Les paramètres de dk-filter
, dans /etc/default/dk-filter
, sont similaires, à l’exception que tout est passé via les options, celui-ci n’utilise pas de fichier de configuration.
DAEMON_OPTS="$DAEMON_OPTS -d <domain> -S <selector> -i /etc/dkim.hosts \
-s /etc/ssl/private/dkim_<domain>_<selector>.key"
SOCKET="inet:2506@localhost"
Puis les redémarrer :
# /etc/init.d/dkim-filter start
# /etc/init.d/dk-filter start
Reste enfin à utiliser ces milter au niveau de Postfix, pour cela ajouter les directives suivantes au fichier /etc/postfix/main.cf
:
milter_default_action = accept
milter_protocol = 2
smtpd_milters = inet:localhost:2505 inet:localhost:2506
Et redémarrer Postfix :
# /etc/init.d/postfix restart
Un test basique de fonctionnement est alors d’envoyer un mail à destination d’un domaine effectuant des vérifications DKIM, yahoo.com
par exemple.
# nc 127.0.0.1 25 <<EOT
HELO localhost
MAIL FROM: root@<domain>
RCPT TO: <account>@yahoo.com
DATA
Subject: Test DKIM
.
QUIT
EOT
Les signatures DKIM et DomainKeys sont correctement vérifiées si l’en-tête Authentication-Results
contient dkim=pass
et domainkeys=pass
.
On peut également envoyer un mail à destination de son domaine, et vérifier que l’en-tête Authentication-Results
est bien ajoutée, et valide.