Sur mon serveur d'emails, j'utilise OpenDKIM pour signer quelques entêtes de mes emails sortants et pour vérifier la signature des entrants dans un contexte anti-spam (il ne s'agit pas de garantir la confidentialité / l'authenticité / l'intégrité de l'échange). J'ai configuré OpenDKIM pour qu'il vérifie les signatures DNSSEC afin de garantir l'authenticité et l'intégrité des clés publiques DKIM récupérées dans le DNS. Ça sert à rien (déjà que DKIM c'est du vent…), mais bon, ça fait joli.
Depuis bientôt 1 an (juin 2019), j'ai remarqué que la signature des emails entrants n'est plus vérifiée. J'avais constaté l'absence de l'entête « Authentication-Results » dans les emails. J'avais constaté que Postfix consigne ce qui suit pour chaque email reçu : « warning: milter inet:127.0.0.1:10028: can't read SMFIC_EOH reply packet header: Success ». Tant que je pouvais envoyer des emails et en recevoir, je m'en fichais.
Il y a 3 mois, j'ai décidé d'étudier cela attentivement, car, à moment donné, il faut bien se sortir les doigts.
Le message consigné par Postfix est trop générique : c'est le constat d'un milter défectueux, rien de plus.
OpenDKIM consigne rien excepté exited with status 1, restarting
à chaque email reçu ou presque. Le lancer à la main (systemctl stop opendkim && opendkim -f -vvv
) ne le rend pas plus bavard.
J'ai aucune idée. Dans ces moments-là, je reviens aux bases, j'essaye de me souvenir comment fonctionne précisément le logiciel incriminé, je relis la doc' relative à mon système d'exploitation, etc. La doc' Debian pour OpenDKIM est ici. Et la réponse s'y trouve sous forme d'un gros avertissement :
The Debian unbound package installs a default configuration file at /etc/unbound/unbound.conf. Do not attempt to use this file unchanged with ResolverConfiguration! opendkim will just quietly shut down.
The reason for the incompatibility is that the shipped unbound.conf includes an auto-trust-anchor-file setting, for which opendkim does not have the necessary permissions. Unfortunately, libunbound is rather fragile in this area. Prepare your own unbound.conf for opendkim and test carefully.
Une fois qu'on a connaissance de ça, une recherche sur le web avec de nouveaux mots-clés permet d'obtenir une confirmation : Question #293418 : Questions : opendkim package : Ubuntu.
Je n'utilise pas /etc/unbound/unbound.conf
, mais, dans ma configuration pour la bibliothèque Unbound, j'utilise bien auto-trust-anchor-file
. Ce que je ne comprends pas, c'est que je stocke la clé publique de la racine DNS dans une arborescence dédiée à OpenDKIM : /var/lib/dkim/
. C'est aussi là qu'est stockée la clé privée avec laquelle sont signés les emails. Ça devrait donc fonctionner.
Pour une raison qui m'échappe totalement, l'utilisateur OpenDKIM n'était plus propriétaire ni du dossier /var/lib/dkim
, ni de la clé publique de la racine DNS. La bibliothèque Unbound exécutée par OpenDKIM (uid:gid identique, donc) ne pouvait donc pas l'actualiser. J'ai corrigé ça de cette manière :
chown opendkim:root /var/lib/dkim
chmod 755 /var/lib/dkim
chown opendkim:opendkim /var/lib/dkim/dnssec.root.key
chmod 664 /var/lib/dkim/dnssec.root.key
On redémarre OpenDKIM (systemctl restart opendkim) et c'est fini.