Ajout d'une section config avec clé privée unique + autres corrections
This commit is contained in:
parent
d3f2515a67
commit
7335a8f6e8
170
HowtoOpenDKIM.md
170
HowtoOpenDKIM.md
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue