2009-10-05
Thomas Martin
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.
SOCKET="inet:2506@localhost" DAEMON_OPTS="$DAEMON_OPTS -d <domain> -S <selector> -i /etc/dkim.hosts -s /etc/ssl/private/dkim_<domain>_<selector>.key"
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.