Beaucoup d'administrateurs de serveurs passent des heures à reparamétrer DKIM suite à un changement de serveur ou un upgrade. Les principales raisons que j'ai détectées sont:
- les logs systemd ne rapportent pas les erreurs correctement
- systemd override la conf initiale de opendkim
- si vous êtes amené à modifier la conf DNS il faut tenir compte des temps de propagation éventuels qui peuvent aller jusqu'à 48 heures et fait que les changements ne sont pas nécessairement actifs immédiatement.
Configuration DKIM sous DEBIAN-BUSTER/POSTFIX/BIND
Si vous avez un parefeu il risque de gêner la communication par socket. J'ai donc choisi la méthode "local"
Voici ma conf:
> nocomment.sh /etc/opendkim.conf
Syslog yes
UMask 0002
Domain webologix.com
KeyFile /etc/opendkim/private.key
Selector dkim
Canonicalization simple
Mode sv
> nocomment.sh /etc/default/opendkim
RUNDIR=/var/spool/postfix/var/run/opendkim
SOCKET=local:$RUNDIR/$NAME.sock"
USER=opendkim
GROUP=opendkim
PIDFILE=$RUNDIR/$NAME.pid
EXTRAAFTER=
> grep dkim /etc/bind/pri.webologix.com
dkim._domainkey IN TXT "k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5wWRerEFReOgPVfkKQEsToK76hAAWiWU0IhwTa2iKcvJPtmyNEDAkdcb/iiKYZYfNpxnt/UFVVKAZ6Zvnt0VXlg2lKSPsZT9pA2rpLI+/e5/y0kiytxXNofMmthZtlH5Tcma8L8nAKEsPd7YkfZ70SjiPHwnDYNHkT9/lnh1KdQIDAQAB;"
> grep milter /etc/postfix/main.cf
milter_default_action = accept
milter_protocol = 2
smtpd_milters = local:/var/spool/postfix/var/run/opendkim/opendkim.sock
non_smtpd_milters = local:/var/spool/postfix/var/run/opendkim/opendkim.sock
milter_content_timeout = 300s
Vérifiez bien que :
- le selector est le même dans /etc/opendkim.conf et /etc/bind/zone_dns_de_votre domaine
- le socket déclaré dans /etc/default/opendkim est le même que smpt_milters de /etc/postfix/main.cf
- la clé publique doit être copiée sur une seule ligne sans espaces dans votre /etc/bind/zone_dns_de_votre domaine
postionnez correctement les droits d'accès du RUNDIR déclaré dans opendkim:
> ll /var/spool/postfix/var/run/opendkim/
total 4
-rw-rw---- 1 postfix root 5 avril 13 12:46 opendkim.pid
srwxrwxr-x 1 postfix root 0 avril 13 12:46 opendkim.sock
ATTENTION : systemd repositionne les droits d'accès des sockets:
> ll /var/spool/postfix/var/run/opendkim/
total 4
-rw-rw---- 1 postfix root 5 avril 13 12:46 opendkim.pid
srwxrwxr-x 1 postfix root 0 avril 13 12:46 opendkim.sock
> systemctl restart opendkim
> ll /var/spool/postfix/var/run/opendkim/
total 4
-rw-rw---- 1 root root 5 avril 13 12:54 opendkim.pid
srwxrwxr-x 1 root root 0 avril 13 12:54 opendkim.sock
Test
Le meilleur test que j'ai trouvé est basé sur l'envoi d'un mail (certaines plateformes valideront votre enregistrement DKIM d'après les clés publiées sur votre DNS mais ce n'est as suffisant pour garantir la signature):
Une commande pour vérifier la présence de votre clé publique sur votre serveur DNS:
> dig TXT dkim._domainkey.example.com. @votre.serveur.DNS.primaire doit donner quelquechose de la forme:
~$ dig TXT dkim._domainkey.webologix.com. @ks307144.kimsufi.com
; <<>> DiG 9.16.1-Ubuntu <<>> TXT dkim._domainkey.webologix.com. @ks307144.kimsufi.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60025
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: b23c01821a0a982ba69c1faa6075a186921b9a37c2ccdf84 (good)
;; QUESTION SECTION:
;dkim._domainkey.webologix.com. IN TXT
;; ANSWER SECTION:
dkim._domainkey.webologix.com. 3600 IN TXT "k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5wWRerEFReOgPVfkKQEsToK76hAAWiWU0IhwTa2iKcvJPtmyNEDAkdcb/ii
KYZYfNpxnt/UFVVKAZ6Zvnt0VXlg2lKSPsZT9pA2rpLI+/e5/y0kiytxXNofMmthZtlH5Tcma8L8nAKEsPd7YkfZ70SjiPHwnDYNHkT9/lnh1KdQIDAQAB;"
;; AUTHORITY SECTION:
webologix.com. 3600 IN NS ns.kimsufi.com.
webologix.com. 3600 IN NS ks307144.kimsufi.com.
;; Query time: 32 msec
;; SERVER: 94.23.227.123#53(94.23.227.123)
;; WHEN: mar. avril 13 15:49:58 CEST 2021
;; MSG SIZE rcvd: 373