diff --git a/HowtoOpenDKIM.md b/HowtoOpenDKIM.md index b9cfe48f..cb44bae0 100644 --- a/HowtoOpenDKIM.md +++ b/HowtoOpenDKIM.md @@ -46,7 +46,118 @@ Les options de configuration se combinent principalement sur deux modes : * Pas de Domain, ni KeyFile, ni de Selector. -### Configuration avec une seule clé privée (conseillé) +### Configuration par adresse ou domaine d'expédition, avec plusieurs clés privées (conseillé) + +Cette méthode est conseillée dans le cas où on gère de nombreux domaines. +Elle évite de devoir changer en une fois les enregistrement TXT de tous les domaines (ils contiennent les clés publiques) en cas en de génération d'une nouvelle clé privée. + +~~~ +# 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 +RemoveOldSignatures yes + +SigningTable refile:/etc/opendkim/SigningTable +KeyTable refile:/etc/opendkim/KeyTable +~~~ + +Le fichier `KeyTable` définit les clés privées et leur sélecteur : + +~~~ +key1 example.com:key1_selector:/etc/ssl/private/dkim_example.com.key +key2 example.org:key2_selector:/etc/ssl/private/dkim_example.org.key +~~~ + +Un **sélecteur** est un mot clé qui sert aux clients à trouver le sous-domaine de l'enregistrement TXT qui contient la clé publique DKIM du domaine (via `._domainkey.example.com`). + +Le fichier `SigningTable` indique quelle clé utiliser pour signer en fonction du champ `From:`. + +Si on a plusieurs serveurs de messagerie (et donc plusieurs clé privées), des sélecteurs différents permettent d'avoir plusieurs clés publiques associées à un même domaine, dans des enregistrements TXT de différents sous-domaines. + +~~~ +*@example.com key1 +*@example.org key2 +~~~ + +Pour générer les clés, on utilise la commande : + +~~~ +# 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 + +# mv /etc/ssl/private/foo.private /etc/ssl/private/dkim_example.com.key +# chown opendkim:opendkim /etc/ssl/private/dkim_example.com.key +# chmod 640 /etc/ssl/private/dkim_example.com.key +~~~ + +Il faut ensuite publier l'enregistrement DNS à partir du fichier `/etc/ssl/private/foo.txt` généré, en ajoutant la ligne suivante 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 +~~~ + +On utilise le fichier `/etc/opendkim/dkim.peers` pour mettre la liste des adresses IP autorisées à envoyer des messages pour lesquels on va rajouter une signature DKIM (a priori des serveurs SMTP internes uniquement) : + +~~~ +127.0.0.1 +::1 +192.0.2.142 +192.0.2.0/25 +~~~ + +On ajuste les droits ainsi : + +~~~ +# chown -R opendkim:opendkim /etc/opendkim* +# chmod 640 /etc/opendkim.conf /etc/opendkim/* +# chmod 750 /etc/opendkim/ +~~~ + +Et l'on peut enfin démarrer le démon : + +~~~ +# systemctl start opendkim + +# opendkim -V | head -4 +opendkim: OpenDKIM Filter v2.11.0 + Compiled with OpenSSL 1.1.0f 25 May 2017 + SMFI_VERSION 0x1000001 + libmilter version 1.0.1 + +# systemctl status opendkim +● opendkim.service - OpenDKIM DomainKeys Identified Mail (DKIM) Milter + Loaded: loaded (/lib/systemd/system/opendkim.service; enabled; vendor preset: enabled) + Docs: man:opendkim(8) + man:opendkim.conf(5) + man:opendkim-genkey(8) + man:opendkim-genzone(8) + man:opendkim-testadsp(8) + man:opendkim-testkey + http://www.opendkim.org/docs.html + Process: 13917 ExecStart=/usr/sbin/opendkim -x /etc/opendkim.conf (code=exited, status=0/SUCCESS) + Main PID: 13918 (opendkim) + Tasks: 6 (limit: 7372) + CGroup: /system.slice/opendkim.service + └─13918 /usr/sbin/opendkim -x /etc/opendkim.conf +~~~ + + +### Configuration avec une seule clé privée Générer une paire de clés avec le sélecteur `dkim-` (par exemple) dans le répertoire `/etc/opendkim/keys/` : @@ -124,112 +235,6 @@ Puis, ajouter le domaine à la liste `/etc/opendkim/domains_whitelist` et redém ~~~ -### 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 -RemoveOldSignatures yes - -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 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.org bar2018._domainkey.example.org -~~~ - -Le fichier `KeyTable` contient les chemins vers les clés privées : - -~~~ -foo._domainkey.example.com example.com:foo:/etc/ssl/private/dkim_example.com.key -bar2018._domainkey.example.org example.org:bar2018:/etc/ssl/private/dkim_example.org.key -~~~ - -Pour générer les clés, on utilise la commande : - -~~~ -# 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 - -# mv /etc/ssl/private/foo.private /etc/ssl/private/dkim_example.com.key -# chown opendkim:opendkim /etc/ssl/private/dkim_example.com.key -# chmod 640 /etc/ssl/private/dkim_example.com.key -~~~ - -Il faut ensuite publier l'enregistrement DNS à partir du fichier `/etc/ssl/private/foo.txt` généré, en ajoutant la ligne suivante 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 -~~~ - -On utilise le fichier `/etc/opendkim/dkim.peers` pour mettre la liste des adresses IP autorisées à envoyer des messages pour lesquels on va rajouter une signature DKIM (a priori des serveurs SMTP internes uniquement) : - -~~~ -127.0.0.1 -::1 -192.0.2.142 -192.0.2.0/25 -~~~ - -On ajuste les droits ainsi : - -~~~ -# chown -R opendkim:opendkim /etc/opendkim* -# chmod 640 /etc/opendkim.conf /etc/opendkim/* -# chmod 750 /etc/opendkim/ -~~~ - -Et l'on peut enfin démarrer le démon : - -~~~ -# systemctl start opendkim - -# opendkim -V | head -4 -opendkim: OpenDKIM Filter v2.11.0 - Compiled with OpenSSL 1.1.0f 25 May 2017 - SMFI_VERSION 0x1000001 - libmilter version 1.0.1 - -# systemctl status opendkim -● opendkim.service - OpenDKIM DomainKeys Identified Mail (DKIM) Milter - Loaded: loaded (/lib/systemd/system/opendkim.service; enabled; vendor preset: enabled) - Docs: man:opendkim(8) - man:opendkim.conf(5) - man:opendkim-genkey(8) - man:opendkim-genzone(8) - man:opendkim-testadsp(8) - man:opendkim-testkey - http://www.opendkim.org/docs.html - Process: 13917 ExecStart=/usr/sbin/opendkim -x /etc/opendkim.conf (code=exited, status=0/SUCCESS) - Main PID: 13918 (opendkim) - Tasks: 6 (limit: 7372) - CGroup: /system.slice/opendkim.service - └─13918 /usr/sbin/opendkim -x /etc/opendkim.conf -~~~ - - ## Ajout dans Postfix Pour configurer avec [Postfix](HowtoPostfix) on ajoute simplement les instructions suivantes dans le fichier `/etc/postfix/main.cf` :