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>
|
||||
* 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
|
||||
|
|
Loading…
Reference in a new issue