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> * Documentation : <http://opendkim.org/docs.html>
* opendkim.conf(5) : <http://opendkim.org/opendkim.conf.5.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é. [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é.
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.
[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 ## Installation
@ -21,17 +24,51 @@ La norme DKIM remplace DomainKey (utilisé à l'origine par Yahoo) qui l'on cons
# adduser opendkim ssl-cert # 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 UserID opendkim:opendkim
@ -39,19 +76,76 @@ Syslog yes
#SyslogSuccess yes #SyslogSuccess yes
#LogWhy yes #LogWhy yes
UMask 007 UMask 007
KeyTable refile:/etc/opendkim/KeyTable Mode sv
SigningTable refile:/etc/opendkim/SigningTable
InternalHosts /etc/opendkim/dkim.peers
Mode s
OversignHeaders From OversignHeaders From
#DisableADSP true #DisableADSP true
Socket inet:8891@localhost 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. 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. 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 *@example.com foo._domainkey.example.com
@ -130,7 +224,8 @@ opendkim: OpenDKIM Filter v2.11.0
└─13918 /usr/sbin/opendkim -x /etc/opendkim.conf └─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` : 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 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 Authentication-Results: antispam.example.com; dkim=pass
@ -156,9 +251,9 @@ Authentication-Results: antispam.example.com; dkim=pass
## Vérifications ## 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 # 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 > *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 $ 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; 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= dXal6gCw6416bJQMBa9sb+zSA/9Avy3zQ0jGCALw=
~~~ ~~~
Si vous avez accès à un email GMAIL ou Yahoo, vous pouvez lui envoyer un email, Dans Thunderbird, le plugin `DKIM verifier` permet de vérifier les en-têtes DKIM des mails reçus.
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. 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 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 ## Monitoring
@ -231,6 +327,7 @@ file = /var/log/syslog
mailto = alert@example.com mailto = alert@example.com
~~~ ~~~
## FAQ ## FAQ
### opendkim: smfi_opensocket() failed ### 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 ! C'est que la socket réseau est déjà occupée !
### ADSP (Author Domain Signing Practices) ### ADSP (Author Domain Signing Practices)
**ADSP est désormais obsolète, et remplacé par la spécification [DMARC](https://fr.wikipedia.org/wiki/DMARC) **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 # 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. 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 : 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 LogWhy yes
~~~ ~~~
### Logs de vérification ### 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* : 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 LogResults true
~~~ ~~~
### Requêtes DNS externes pour ADSP ### 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, 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 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) ### 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. 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 ### 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 opendkim-genzone -F -d example.com /etc/opendkim/KeyTable