Ajout d'une section config avec clé privée unique + autres corrections

This commit is contained in:
whirigoyen 2022-04-27 12:26:09 +02:00
parent d3f2515a67
commit 7335a8f6e8

View file

@ -6,12 +6,15 @@ title: Howto OpenDKIM
* Documentation : <http://opendkim.org/docs.html>
* opendkim.conf(5) : <http://opendkim.org/opendkim.conf.5.html>
[DKIM (DomainKeys Identified Mail)](https://fr.wikipedia.org/wiki/DomainKeys_Identified_Mail) est une norme pour ajouter une signature cryptographique dans les entêtes d'un email envoyé.
La signature se fait à partir à de l'expéditeur d'entête (`From:` d'un email), des entêtes au choix (sujet, date, etc.) et le corps du message.
Cela utilise aussi une clé publique stockée dans un enregistrement DNS TXT.
La norme DKIM remplace DomainKey (utilisé à l'origine par Yahoo) qui l'on considère désormais comme obsolète.
[DKIM (DomainKeys Identified Mail)](https://fr.wikipedia.org/wiki/DomainKeys_Identified_Mail) est une norme qui décrit l'ajout d'une signature cryptographique dans les en-têtes d'un email envoyé.
[OpenDKIM](http://opendkim.org/) est logiciel libre pour vérifier et générer des signatures DKIM. Il implémente un service milter lui permettant notamment d'être utilisé avec [Postfix](HowtoPostfix).
DKIM signe les mails avec une clé privée stockée sur le serveur. La clé publique est mise à disposition dans un enregistrement DNS TXT et permet au destinataire de vérifier que le domaine contenu dans l'adresse d'expédition appartient bien à l'expéditeur.
La signature se fait à partir à de l'expéditeur contenu dans l'en-tête (`From:`), d'autres en-têtes au choix (sujet, date, etc.) et du corps du message.
[OpenDKIM](http://opendkim.org/) est logiciel libre permettant de vérifier et générer des signatures DKIM. Il implémente un service `milter` lui permettant notamment d'être utilisé avec [Postfix](HowtoPostfix).
La norme DKIM remplace DomainKey obsolète (utilisée à l'origine par Yahoo).
## Installation
@ -21,17 +24,51 @@ La norme DKIM remplace DomainKey (utilisé à l'origine par Yahoo) qui l'on cons
# adduser opendkim ssl-cert
~~~
On ajoute la ligne suivante dans `/etc/default/opendkim` :
## Configuration
La configuration principale se trouve dans le fichier `/etc/opendkim.conf`.
**Note 1 : Attention, `/etc/opendkim.conf` et les fichiers dans `/etc/opendkim/` doivent appartenir à l'utilisateur et au groupe `opendkim`.**
**Note 2** : Depuis Debian 9, l'unité systemd charge seulement `/etc/opendkim.conf` et non plus `/etc/default/opendkim`.
Les options de configuration se combinent principalement sur deux modes :
* Configuration avec une seule clé privée (conseillé) :
* Domain (liste des domaines acceptés)
* KeyFile (clé privée)
* Selector (nom de la clé dans l'enregistrement DNS)
* Pas de KeyTable, ni de SigningTable
* Configuration par adresse ou domaine d'expédition, avec plusieurs clés privées :
* KeyTable (liste des clés privées)
* SigningTable (clés privées à utiliser en fonction de l'adresse `From:`)
* Pas de Domain, ni KeyFile, ni de Selector.
### Configuration avec une seule clé privée (conseillé)
Générer une paire de clés avec le sélecteur `2022` (adapter à l'année de création) dans le répertoire `/etc/opendkim/keys/` :
~~~
SOCKET="inet:8891@localhost"
mkdir /etc/opendkim/keys
sudo -u opendkim opendkim-genkey -D /etc/opendkim/keys/ -s 2022"
~~~
> *Note* : on peut également utiliser une socket Unix.
Cela met la clé privée dans `/etc/opendkim/keys/2022.private`, et l'enregistrement DNS TXT contenant la clé publique dans `/etc/opendkim/keys/2022.txt`
> *Note 2* : en Debian 9, l'unité systemd charge seulement `/etc/opendkim.conf`, `/etc/default/opendkim` n'est plus utilisé.
Créer les whitelistes :
La configuration principale se trouve dans le fichier `/etc/opendkim.conf` :
~~~
# sudo -u opendkim vim /etc/opendkim/domains_whitelist
+ # Indiquez ici les domaines pour lesquels OpenDKIM va signer les mails.
# sudo -u opendkim vim /etc/opendkim/hosts_whitelist
+ # Indiquez ici les IPs/sous-réseaux des serveurs SMTP internes pour lesquels OpenDKIM va signer les mails.
+ 127.0.0.1
+ ::1
~~~
Ajuster la configuration générale dans `/etc/opendkim.conf` :
~~~
UserID opendkim:opendkim
@ -39,19 +76,76 @@ Syslog yes
#SyslogSuccess yes
#LogWhy yes
UMask 007
KeyTable refile:/etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
InternalHosts /etc/opendkim/dkim.peers
Mode s
Mode sv
OversignHeaders From
#DisableADSP true
Socket inet:8891@localhost
PidFile /var/run/opendkim/opendkim.pid
PidFile /var/run/opendkim/opendkim.pid
# Liste les IPs des serveurs SMTP internes pour lesquels OpenDKIM va signer les mails
InternalHosts refile:/etc/opendkim/hosts_whitelist
ExternalIgnoreList refile:/etc/opendkim/hosts_whitelist
# Clé privée (générée avec "sudo -u opendkim opendkim-genkey -D /etc/opendkim/keys/ -s 2022")
KeyFile /etc/opendkim/keys/2022.private
# Utilisé dans l'enregistrement DNS utilisé pour récupérer la clé publique ($selector._domainkey.$domain)
Selector 2022
# Liste des domaines pour lesquels OpenDKIM va signer les mails (accepte les regex)
Domain refile:/etc/opendkim/domains_whitelist
~~~
Enfin, lancer le service OpenDKIM :
~~~
systemctl start opendkim
systemctl status opendkim
~~~
#### Ajouter un domaine à OpenDKIM
Ajouter le texte contenu dans le fichier `/etc/opendkim/keys/2022.txt` aux enregistrements DNS du domaine.
Cela va rendre la clé publique accessible via un enregistrement TXT du sous-domaine `2022._domainkey.$domain`.
On peut vérifier avec :
~~~
host -t TXT 2022._domainkey.$domain
~~~
Puis, ajouter le domaine à la liste `/etc/opendkim/domains_whitelist` et redémarrer le service :
~~~
# /etc/opendkim/domains_whitelist
+ $domain
# systemctl restart opendkim
# systemctl status opendkim
~~~
### Configuration par adresse ou domaine d'expédition, avec plusieurs clés privées
~~~
# cat /etc/opendkim.conf
UserID opendkim:opendkim
Syslog yes
#SyslogSuccess yes
#LogWhy yes
UMask 007
InternalHosts /etc/opendkim/dkim.peers
Mode sv
OversignHeaders From
#DisableADSP true
Socket inet:8891@localhost
PidFile /var/run/opendkim/opendkim.pid
KeyTable refile:/etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
~~~
Le fichier `SigningTable` contient la liste des domaines qui vont générer des signatures DKIM, et les sélecteurs associés.
Un **sélecteur** est un mot clé à choisir qui sera associé à la signature DKIM et servira notamment pour l'enregistrement DNS TXT qui stocke la clé publique.
Si l'on a plusieurs serveurs de messagerie, on pourra des sélecteurs différents, et donc des clés et un enregistrement DNS différents également.
Si l'on a plusieurs serveurs de messagerie, on pourra utiliser des sélecteurs différents, et donc des clés et un enregistrement DNS différents également.
~~~
*@example.com foo._domainkey.example.com
@ -130,7 +224,8 @@ opendkim: OpenDKIM Filter v2.11.0
└─13918 /usr/sbin/opendkim -x /etc/opendkim.conf
~~~
## Configuration avec Postfix
## Ajout dans Postfix
Pour configurer avec [Postfix](HowtoPostfix) on ajoute simplement les instructions suivantes dans le fichier `/etc/postfix/main.cf` :
@ -142,9 +237,9 @@ non_smtpd_milters = inet:127.0.0.1:8891
in_flow_delay = 0s
~~~
Cela entraînera l'ajout d'un entête `DKIM-Signature:` à tous les messages qui correspondent à la configuration d'OpenDKIM.
Cela entraînera l'ajout d'un en-tête `DKIM-Signature:` à tous les messages qui correspondent à la configuration d'OpenDKIM.
Si vous utilisez l'option `Mode sv` ou `Mode v` dans la configuration d'OpenDKIM, cela entraînera une vérification des signatures DKIM des emails reçus, et l'ajout d'un entête du type :
Si vous utilisez l'option `Mode sv` ou `Mode v` dans la configuration d'OpenDKIM, cela entraînera une vérification des signatures DKIM des emails reçus, et l'ajout d'un en-tête du type :
~~~
Authentication-Results: antispam.example.com; dkim=pass
@ -156,9 +251,9 @@ Authentication-Results: antispam.example.com; dkim=pass
## Vérifications
### Vérifier sa configuration
### Vérifier la configuration
On peut vérifier que sa configuration est correcte, notamment son enregistrement DNS (si la commande ne renvoie rien, c'est que c'est OK) :
On peut vérifier que la configuration est correcte, notamment l'enregistrement DNS (si la commande ne renvoie rien, c'est que c'est OK) :
~~~
# opendkim-testkey -d example.com -s foo -k /etc/ssl/private/dkim_example.com.key -v
@ -168,9 +263,9 @@ opendkim-testkey: key not secure
> *Note* : vous pouvez ignorer le warning des permissions si vous avez correctement ajusté les droits comme précisé plus haut
### Vérifier la présence de DKIM-Signature
### Vérifier la signature DKIM d'un mail
Il faut envoyer un email de test avec un expéditeur d'entête correct ; par exemple en ligne de commande :
Il faut envoyer un email de test avec un expéditeur d'en-tête correct. Par exemple, en ligne de commande :
~~~
$ telnet 127.0.0.1 25
@ -186,7 +281,7 @@ Ceci est un test
.
~~~
L'email devrait avoir un entête supplémentaire du type :
La source de l'email devrait avoir un en-tête supplémentaire du type :
~~~
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=example.com; s=foo;
@ -197,15 +292,16 @@ DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=example.com; s=foo;
dXal6gCw6416bJQMBa9sb+zSA/9Avy3zQ0jGCALw=
~~~
Si vous avez accès à un email GMAIL ou Yahoo, vous pouvez lui envoyer un email,
en affichant le message original vous pourrez vérifier la présence de `DKIM-Signature:`
et cela vous indiquera si la signature est bien correcte et acceptée.
Dans Thunderbird, le plugin `DKIM verifier` permet de vérifier les en-têtes DKIM des mails reçus.
Sinon, si vous avez accès à un email Gmail ou Yahoo, vous pouvez lui envoyer un email. En affichant le message original, vous pourrez vérifier la présence de `DKIM-Signature:`. Cela vous indiquera si la signature est correcte et acceptée.
### Vérifier via des services externes
* Vérifier (notamment) son enregistrement DNS pour DKIM : <https://toolbox.googleapps.com/apps/checkmx/> (2 premiers résultats à ignorer)
* Vérifier (notamment) son enregistrement DNS pour DKIM : <https://toolbox.googleapps.com/apps/checkmx/> (2 premiers résultats à ignorer).
* Vérifier en envoyant un email vers un service externe : <https://dkimcore.org/tools/> ou <http://dkimvalidator.com/> ou <https://www.mail-tester.com/>
* Vérifier en envoyant un email vers un service externe : <https://dkimcore.org/tools/> ou <http://dkimvalidator.com/> ou <https://www.mail-tester.com/>.
## Monitoring
@ -231,6 +327,7 @@ file = /var/log/syslog
mailto = alert@example.com
~~~
## FAQ
### opendkim: smfi_opensocket() failed
@ -243,6 +340,7 @@ Starting OpenDKIM Milter: opendkim: smfi_opensocket() failed
C'est que la socket réseau est déjà occupée !
### ADSP (Author Domain Signing Practices)
**ADSP est désormais obsolète, et remplacé par la spécification [DMARC](https://fr.wikipedia.org/wiki/DMARC)
@ -261,7 +359,8 @@ On peut vérifier que l'enregistrement ADSP est bien pris en compte avec la comm
# opendkim-testadsp example.com
~~~
### Pas d'entête DKIM-Signature
### Pas d'en-tête DKIM-Signature
Si vous ne constatez pas l'ajout de la signature DKIM, vérifiez votre configuration, vérifiez que vous utilisez bien un champ `From:` correct et correspondant à un domaine à signer.
Il peut aussi être intéressant d'activer les options suivantes dans `/etc/opendkim.conf` pour avoir davantage de logs :
@ -272,6 +371,7 @@ SyslogSuccess yes
LogWhy yes
~~~
### Logs de vérification
Il peut être intéressant d'activer l'option suivante /etc/opendkim.conf` pour avoir des logs pour chaque signature vérifiée par *opendkim* :
@ -280,6 +380,7 @@ Il peut être intéressant d'activer l'option suivante /etc/opendkim.conf` pour
LogResults true
~~~
### Requêtes DNS externes pour ADSP
Attention, par défaut OpenDKIM effectue ses vérifications ADSP en faisant de multiples requêtes DNS sans utiliser le resolver local,
@ -290,9 +391,11 @@ Nous conseillons de désactiver ces vérifications qui sont obsolètes :
DisableADSP true
~~~
### GMAIL/Google et DKIM
Informations de GMAIL/Google à propos de DKIM : <https://support.google.com/a/answer/174124?hl=fr>
### Gmail/Google et DKIM
Informations de Gmail/Google à propos de DKIM : <https://support.google.com/a/answer/174124?hl=fr>.
### Problème de header (dkim-filter: no sender header found)
@ -304,9 +407,10 @@ Avec dkim-filter, en Debian 7, il se peux que, suite a une règle de ce type dan
cela casse dkim-filter, car il ne vois pas si le sender est correct dans le header du mail, et donc il ne sais pas si c'est un domaine qu'il doit signé ou pas.
### Regenérer la zone DNS
Lors qu'un clé a déjà été généré mais que le fichier contenant la zone DNS n'est plus disponbile, il est possible de la regénérer avec la commande suivante :
Lorsqu'une clé a déjà été générée mais que le fichier contenant la zone DNS n'est plus disponible, il est possible de la régénérer avec la commande suivante :
~~~
opendkim-genzone -F -d example.com /etc/opendkim/KeyTable