on ne liste que notre méthode désormais, et l'ancienne méthode est passée dans la FAQ

This commit is contained in:
Gregory Colpart 2024-04-24 15:50:38 +02:00
parent 0fae6796fc
commit c7a3b37b0b

View file

@ -63,27 +63,6 @@ opendkim: OpenDKIM Filter v2.11.0
La configuration principale se trouve dans le fichier `/etc/opendkim.conf`.
**Note 1 : Attention, `/etc/opendkim.conf`, `/etc/opendkim-evolix.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`.
Nous utilisons le mode de configuration le plus flexible, avec plusieurs clés privées possibles (méthode conseillée) :
* `KeyTable` : fichier contenant la liste des clés privées (des sélecteurs DNS correspondants).
* `SigningTable` : fichier contenant la table de correspondance entre les l'adresse `From:` et les clés privées pour signer.
Il est aussi possible d'avoir une configuration utilisant une seule clé privée (déconseillé) :
* `Domain` : fichier contenant la liste des domaines acceptés.
* `KeyFile` : clé privée (unique).
* `Selector` : sélecteur DNS (unique).
* Pas de `KeyTable` ni de `SigningTable`.
### Configuration multi-clés privées (méthode conseillée)
#### Première configuration
On ajoute la ligne suivante à `/etc/opendkim.conf` :
~~~
@ -92,7 +71,6 @@ Include /etc/opendkim-evolix.conf
Puis on « injecte » notre configuration via `/etc/opendkim.conf` :
~~~
# cat /etc/opendkim.conf
@ -110,33 +88,21 @@ PidFile /var/run/opendkim/opendkim.pid
RemoveOldSignatures yes
AlwaysAddARHeader yes
SigningTable refile:/etc/opendkim/SigningTable
KeyTable refile:/etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
~~~
**Note 1 : Attention, `/etc/opendkim.conf`, `/etc/opendkim-evolix.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`.
Avec notre configuration, on peut gérer une ou plusieurs clés privées via :
* `/etc/opendkim/KeyTable` : fichier contenant une ou plusieurs clés privées associés à des "sélecteurs"
* `/etc/opendkim/SigningTable` : fichier contenant la table de correspondance entre l'adresse `From:` et l'éventuelle clé à signer
Note : un **sélecteur** est une expression qui sert aux clients à trouver le sous-domaine de l'enregistrement TXT qui contient la clé publique DKIM du domaine (via `<SELECTOR>._domainkey.example.com`).
**Générer une clé** avec les commandes :
~~~
# opendkim-genkey -h sha256 -b 4096 -D /etc/ssl/private/ -d example.com -s foo -v
opendkim-genkey: generating private key
opendkim-genkey: private key written to foo.private
opendkim-genkey: extracting public key
opendkim-genkey: DNS TXT record written to foo.txt
# chown opendkim:opendkim /etc/ssl/private/foo.private
# chmod 640 /etc/ssl/private/foo.private
~~~
Ajouter la **clé privée**, que l'on nomme par exemple `foo._domainkey.example.com`, et son **sélecteur** dans `/etc/opendkim/KeyTable` :
~~~
foo._domainkey.example.com example.com:foo:/etc/ssl/private/foo.private
~~~
Les lignes sont traitées dans l'ordre, seul le premier match est utilisé, sauf si `MultipleSignatures` est activé.
Mettre dans le fichier `/etc/opendkim/dkim.peers` la liste des adresses IP autorisées à ajouter une signature DKIM aux messages (a priori des serveurs SMTP internes uniquement) :
~~~
@ -161,8 +127,36 @@ Enfin, démarrer le démon :
$ systemctl status opendkim
~~~
### Générer une nouvelle clé
#### Ajouter un domaine à signer
**Générer une clé** avec les commandes :
~~~
# opendkim-genkey -h sha256 -b 4096 -D /etc/ssl/private/ -d example.com -s foo -v
opendkim-genkey: generating private key
opendkim-genkey: private key written to foo.private
opendkim-genkey: extracting public key
opendkim-genkey: DNS TXT record written to foo.txt
# chown opendkim:opendkim /etc/ssl/private/foo.private
# chmod 640 /etc/ssl/private/foo.private
~~~
Ajouter la **clé privée**, que l'on nomme par exemple `foo._domainkey.example.com`, et son **sélecteur** dans `/etc/opendkim/KeyTable` :
~~~
foo._domainkey.example.com example.com:foo:/etc/ssl/private/foo.private
~~~
On peut récupérer l'enregistrement DNS dans `/etc/ssl/private/foo.txt` (généré à la création de la clé privée), et l'ajouter dans la zone DNS du domaine en question :
~~~
foo._domainkey IN TXT ( "v=DKIM1; h=sha256; k=rsa; "
"p=MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtdnoCyrwNyCAttQz0VaJq3cheWtki8KTfCwPu+QDcyv8IHLpQGK2UsEw03epEjTI/ijdyyVsElDPoqsCZ4+R3H5I41Vj8xcGLvqIaG3mbgOhcxuD+eEPR1K+JbSptwMiP/oja7VFyftQtx5XkQh8oj458WR/EE++SzjOGXOVmFYzf+LnNXJ/Rc0avAUPcTF1NmoU8IP52aKTvw"
"nrbPFhIPkUyIR1/5k+5h4ZJqY+2h+JqDuol0E73Yl79rsF5ycjwLtBCPsz80jzCpOF5YHkDx0CYPyTKoIA3eZlgOVSJPmDYUWCrj/9k2bL/nSL5EJoB/X/kQcLRTy83dqf+gzWd850yP9vpUQQ2d+Z1hdlAFvzVMboSNz12+au7kAglXmN47l9Z8igxVWJfl7BEsegQF8gYPB4yepSW3DtfxBC5zCjLYYN1xXabf3wZfeCF6yOoQk1C2yN"
"ThvBa4NyQDWizZGs4t9eHTR8QHMzJogPQQvyS45ILN1HHeikIQZP/lormmFQzq9X8sDGt4Edy8A3OMLjHom81tP6zxb4I8Pq0V4bEt4m4KA+K89A+b9cTD2Xr/wbqgQ1nwTcnEfGgBxbc3iRKkUnwhjeIocsxmwHqmDIVV8HKB5egUg8US/eo9al8w4JYEdzx9tETW/5dQOeLTMVw2N0/A7M9zVbBQEyuaMCAwEAAQ==" ) ; ----- DKIM key foo for example.com
~~~
**Le fichier `/etc/opendkim/SigningTable` indique le nom de la clé privée (définit dans `/etc/opendkim/KeyTable`) à utiliser pour signer un message en fonction de son champ `From:`** :
@ -185,93 +179,7 @@ S'il y a plusieurs domaines, on peut spécifier la même clé ou une clé diffé
*@example.net bar._domainkey.example.org
~~~
Puis, recharger OpenDKIM :
~~~
$ systemctl reload opendkim
$ systemctl status opendkim
~~~
Ensuite, récupérer l'enregistrement DNS dans `/etc/ssl/private/foo.private` (généré à la création de la clé privée), et l'ajouter dans la zone DNS du domaine en question :
~~~
dkim-<HOSTNAME>-key1._domainkey IN TXT ( "v=DKIM1; h=sha256; k=rsa; "
"p=MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtdnoCyrwNyCAttQz0VaJq3cheWtki8KTfCwPu+QDcyv8IHLpQGK2UsEw03epEjTI/ijdyyVsElDPoqsCZ4+R3H5I41Vj8xcGLvqIaG3mbgOhcxuD+eEPR1K+JbSptwMiP/oja7VFyftQtx5XkQh8oj458WR/EE++SzjOGXOVmFYzf+LnNXJ/Rc0avAUPcTF1NmoU8IP52aKTvw"
"nrbPFhIPkUyIR1/5k+5h4ZJqY+2h+JqDuol0E73Yl79rsF5ycjwLtBCPsz80jzCpOF5YHkDx0CYPyTKoIA3eZlgOVSJPmDYUWCrj/9k2bL/nSL5EJoB/X/kQcLRTy83dqf+gzWd850yP9vpUQQ2d+Z1hdlAFvzVMboSNz12+au7kAglXmN47l9Z8igxVWJfl7BEsegQF8gYPB4yepSW3DtfxBC5zCjLYYN1xXabf3wZfeCF6yOoQk1C2yN"
"ThvBa4NyQDWizZGs4t9eHTR8QHMzJogPQQvyS45ILN1HHeikIQZP/lormmFQzq9X8sDGt4Edy8A3OMLjHom81tP6zxb4I8Pq0V4bEt4m4KA+K89A+b9cTD2Xr/wbqgQ1nwTcnEfGgBxbc3iRKkUnwhjeIocsxmwHqmDIVV8HKB5egUg8US/eo9al8w4JYEdzx9tETW/5dQOeLTMVw2N0/A7M9zVbBQEyuaMCAwEAAQ==" ) ; ----- DKIM key dkim-<HOSTNAME>-key1 for localhost
~~~
### Configuration simplifiée avec une seule clé privée (déconseillé)
Générer une paire de clés avec le sélecteur `dkim-<SERVER_NAME>` (par exemple) dans le répertoire `/etc/opendkim/keys/` :
~~~
# mkdir /etc/opendkim/keys
# sudo -u opendkim opendkim-genkey -h sha256 -b 4096 -D /etc/opendkim/keys/ -s dkim-<SERVER_NAME>
~~~
Cela met la clé privée dans `/etc/opendkim/keys/dkim-<SERVER_NAME>.private`, et l'enregistrement DNS TXT contenant la clé publique dans `/etc/opendkim/keys/dkim-<SERVER_NAME>.txt`
Créer les whitelistes :
~~~
# vim /etc/opendkim/domains_whitelist
+ # Indiquez ici les domaines pour lesquels OpenDKIM va signer les mails.
# 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
Syslog yes
#SyslogSuccess yes
#LogWhy yes
UMask 007
Mode sv
OversignHeaders From
#DisableADSP true
Socket inet:8891@localhost
PidFile /var/run/opendkim/opendkim.pid
RemoveOldSignatures yes
# 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 -h sha256 -b 4096 -D /etc/opendkim/keys/ -s dkim-<SERVER_NAME>")
KeyFile /etc/opendkim/keys/dkim-<SERVER_NAME>.private
# Utilisé dans l'enregistrement DNS utilisé pour récupérer la clé publique ($selector._domainkey.$domain)
Selector dkim-<SERVER_NAME>
# Liste des domaines pour lesquels OpenDKIM va signer les mails (accepte les regex)
Domain refile:/etc/opendkim/domains_whitelist
~~~
**Pour ajouter un domaine :**
Ajouter le texte contenu dans le fichier `/etc/opendkim/keys/dkim-<SERVER_NAME>.txt` aux enregistrements DNS du domaine.
Cela va rendre la clé publique accessible via un enregistrement TXT du sous-domaine `dkim-<SERVER_NAME>._domainkey.$domain`.
On peut vérifier l'enregistrement DNS avec :
~~~
$ host -t TXT dkim-<SERVER_NAME>._domainkey.$domain
~~~
Puis, ajouter le domaine à la liste `/etc/opendkim/domains_whitelist` et redémarrer le service :
~~~
# vim /etc/opendkim/domains_whitelist
+ $domain
# systemctl restart opendkim
# systemctl status opendkim
~~~
Les lignes sont traitées dans l'ordre, seul le premier match est utilisé, sauf si `MultipleSignatures` est activé.
## Configurer Postfix pour utiliser OpenDKIM
@ -522,3 +430,82 @@ Pour signer tous les domaines avec un même clé, on peut mettre un *wildcard* d
~~~
Mais c'est déconseillé car tous les emails car OpenDKIM tenteraient de traiter tous les domaines, et cela peut poser des problèmes avec des emails tordus (par exemple OpenDKIM plante quand on trouve une [espace sans chasse](https://fr.wikipedia.org/wiki/Espace_sans_chasse) dans le nom de domaine).
### Configuration simplifiée avec une seule clé privée (déconseillé)
Il est aussi possible d'avoir une configuration utilisant une seule clé privée mais c'est déconseillé :
* `Domain` : fichier contenant la liste des domaines acceptés.
* `KeyFile` : clé privée (unique).
* `Selector` : sélecteur DNS (unique).
* Pas de `KeyTable` ni de `SigningTable`.
Générer une paire de clés avec le sélecteur `dkim-<SERVER_NAME>` (par exemple) dans le répertoire `/etc/opendkim/keys/` :
~~~
# mkdir /etc/opendkim/keys
# sudo -u opendkim opendkim-genkey -h sha256 -b 4096 -D /etc/opendkim/keys/ -s dkim-<SERVER_NAME>
~~~
Cela met la clé privée dans `/etc/opendkim/keys/dkim-<SERVER_NAME>.private`, et l'enregistrement DNS TXT contenant la clé publique dans `/etc/opendkim/keys/dkim-<SERVER_NAME>.txt`
Créer les whitelistes :
~~~
# vim /etc/opendkim/domains_whitelist
+ # Indiquez ici les domaines pour lesquels OpenDKIM va signer les mails.
# 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
Syslog yes
#SyslogSuccess yes
#LogWhy yes
UMask 007
Mode sv
OversignHeaders From
#DisableADSP true
Socket inet:8891@localhost
PidFile /var/run/opendkim/opendkim.pid
RemoveOldSignatures yes
# 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 -h sha256 -b 4096 -D /etc/opendkim/keys/ -s dkim-<SERVER_NAME>")
KeyFile /etc/opendkim/keys/dkim-<SERVER_NAME>.private
# Utilisé dans l'enregistrement DNS utilisé pour récupérer la clé publique ($selector._domainkey.$domain)
Selector dkim-<SERVER_NAME>
# Liste des domaines pour lesquels OpenDKIM va signer les mails (accepte les regex)
Domain refile:/etc/opendkim/domains_whitelist
~~~
**Pour ajouter un domaine :**
Ajouter le texte contenu dans le fichier `/etc/opendkim/keys/dkim-<SERVER_NAME>.txt` aux enregistrements DNS du domaine.
Cela va rendre la clé publique accessible via un enregistrement TXT du sous-domaine `dkim-<SERVER_NAME>._domainkey.$domain`.
On peut vérifier l'enregistrement DNS avec :
~~~
$ host -t TXT dkim-<SERVER_NAME>._domainkey.$domain
~~~
Puis, ajouter le domaine à la liste `/etc/opendkim/domains_whitelist` et redémarrer le service :
~~~
# vim /etc/opendkim/domains_whitelist
+ $domain
# systemctl restart opendkim
# systemctl status opendkim
~~~