Opendkim

Introduction

Afin d’éviter de voir finir ses e-mails dans le dossier de spam, il peut être intéressant de mettre en place un DKIM dans ses e-mails.
DKIM ou DomainKeys Identified Mail est une méthode d’authentification des e-mails. Cette méthode permet de signer un e-mail avec un identifiant de domaine émetteur, utile pour savoir qui est responsable de l’envoi en cas de réclamations. Vous trouverez plus d’informations sur le DKIM sur la page Wikipedia disponible à cette adresse.

Cet article a pour but d’introduire l’installation d’OpenDKIM et sa configuration. Cet article n’est pas exhaustif sur les paramètres de configuration du service, il vous appartient de vérifier la cohérence de la configuration avec votre système.

Pré-requis

L’un des pré-requis essentiel est de conserver son système le plus à jour possible.


[pastacode lang= »markup » manual= »%20apt-get%20update%0A%20apt-get%20upgrade » message= » » highlight= » » provider= »manual »/]

 

Avertissement: Avant toute modification de votre système prévoyez toujours une sauvegarde de vos fichiers en cas de mauvaise manipulation.
Sur un serveur de production, pensez à effectuer ces opérations pendant les heures creuses afin de minimiser l’impact de vos actions.

Mise en place

Installation d’OpenDKIM

Tout d’abord installations OpenDKIM

[pastacode lang= »markup » manual= »apt-get%20install%20opendkim%20opendkim-tools » message= » » highlight= » » provider= »manual »/]

Configuration d’OpenDKIM

La configuration d’OpenDKIM s’effectue au travers de deux fichiers : /etc/opendkim.conf et /etc/default/opendkim.

/etc/opendkim.conf

Le fichier principal de configuration d’OpenDKIM.

Ouvrir le fichier

[pastacode lang= »markup » manual= »nano%20%2Fetc%2Fopendkim.conf » message= » » highlight= » » provider= »manual »/]

Ajouter les lignes suivantes au fichier /etc/opendkim.conf, si certaines sont déjà présentes les commenter pour éviter tout problème

[pastacode lang= »markup » manual= »AutoRestart%20%20%20%20%20%20%20%20%20%20%20%20%20Yes%0AAutoRestartRate%20%20%20%20%20%20%20%20%2010%2F1h%0AUMask%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20002%0ASyslog%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20yes%0ASyslogSuccess%20%20%20%20%20%20%20%20%20%20%20Yes%0ALogWhy%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Yes%0A%C2%A0%0ACanonicalization%20%20%20%20%20%20%20%20relaxed%2Fsimple%0A%C2%A0%0AExternalIgnoreList%20%20%20%20%20%20refile%3A%2Fetc%2Fopendkim%2FTrustedHosts%0AInternalHosts%20%20%20%20%20%20%20%20%20%20%20refile%3A%2Fetc%2Fopendkim%2FTrustedHosts%0AKeyTable%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20refile%3A%2Fetc%2Fopendkim%2FKeyTable%0ASigningTable%20%20%20%20%20%20%20%20%20%20%20%20refile%3A%2Fetc%2Fopendkim%2FSigningTable%0A%C2%A0%0AMode%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20sv%0APidFile%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2Fvar%2Frun%2Fopendkim%2Fopendkim.pid%0ASignatureAlgorithm%20%20%20%20%20%20rsa-sha256%0A%C2%A0%0AUserID%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20opendkim%3Aopendkim%0A%C2%A0%0ASocket%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20inet%3A17789%40localhost » message= » » highlight= » » provider= »manual »/]

Voici les différents paramètres :

AutoRestart Redémarrer automatiquement le service en cas d’erreur.
AutoRestartRate Le nombre de redémarrage maximum dans un temps donné. Par exemple, dix redémarrages par heure : 10/1h.
UMAsk Accorder les permissions totales pour l’utilisateur défini par son userID, et accorder des permissions en lecture et exécution pour les autres utilisateurs.
Syslog / SyslogSuccess / LogWhy Activer les journaux détaillés pour le service.
Canonicalization La mise en forme canonique des messages de log.
ExternalIgnoreList Les hôtes externes autorisés à envoyer des e-mails depuis ce serveur sans authentification.
InternalHosts Les hôtes internes pour lesquels les e-mails sortants doivent être signés.
KeyTable Assure la liaison des noms de clés avec les fichiers de clé.
SigningTable La liste des signatures qui seront utilisées pour un message. Le choix se base sur l’adresse expéditrice.
Mode Le mode opératoire d’OpenDKIM. (s) signature et (v) vérification.
PidFile Emplacement du fichier de pid contenant l’identifiant processus du service.
SignatureAlgorithm L’algorithme de chiffrement choisi pour encoder les signatures.
UserID L’utilisateur et son groupe qui exécutera le service OpenDKIM
Socket Le port d’écoute sur lequel Postifx et OpenDKIM échangeront les messages. Pour écouter en local sur le port 17789: 17789@localhost.

Ceci est une configuration d’exemple, vous devez faire correspondre les paramètres à votre configuration actuelle et selon les besoins. Vous trouverez plus d’informations à propos du fichier de configuration d’OpenDKIM à cette adresse.

[pastacode lang= »markup » manual= »%23%20Log%20to%20syslog%0A%23Syslog%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20yes%0A%23%20Required%20to%20use%20local%20socket%20with%20MTAs%20that%20access%20the%20socket%20as%20a%20non-%0A%23%20privileged%20user%20(e.g.%20Postfix)%0A%23UMask%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20002%0A%C2%A0%0A%23%20Sign%20for%20example.com%20with%20key%20in%20%2Fetc%2Fmail%2Fdkim.key%20using%0A%23%20selector%20’2007’%20(e.g.%202007._domainkey.example.com)%0A%23Domain%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20example.com%0A%23KeyFile%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2Fetc%2Fmail%2Fdkim.key%0A%23Selector%20%20%20%20%20%20%20%20%20%20%20%20%20%20%202007%0A%C2%A0%0A%23%20Commonly-used%20options%3B%20the%20commented-out%20versions%20show%20the%20defaults.%0A%23Canonicalization%20%20%20%20%20%20%20simple%0A%23Mode%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20sv%0A%23SubDomains%20%20%20%20%20%20%20%20%20%20%20%20%20no%0A%23ADSPDiscard%20%20%20%20%20%20%20%20%20%20%20%20no%0A%C2%A0%0A%23%20Always%20oversign%20From%20(sign%20using%20actual%20From%20and%20a%20null%20From%20to%20prevent%0A%23%20malicious%20signatures%20header%20fields%20(From%20and%2For%20others)%20between%20the%20signer%0A%23%20and%20the%20verifier.%20%20From%20is%20oversigned%20by%20default%20in%20the%20Debian%20pacakge%0A%23%20because%20it%20is%20often%20the%20identity%20key%20used%20by%20reputation%20systems%20and%20thus%0A%23%20somewhat%20security%20sensitive.%0AOversignHeaders%20%20%20%20%20%20%20%20%20From%0A%C2%A0%0A%23%20List%20domains%20to%20use%20for%20RFC%206541%20DKIM%20Authorized%20Third-Party%20Signatures%0A%23%20(ATPS)%20(experimental)%0A%C2%A0%0A%23ATPSDomains%20%20%20%20%20%20%20%20%20%20%20%20example.com%0AAutoRestart%20%20%20%20%20%20%20%20%20%20%20%20%20Yes%0AAutoRestartRate%20%20%20%20%20%20%20%20%2010%2F1h%0AUMask%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20002%0ASyslog%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20yes%0ASyslogSuccess%20%20%20%20%20%20%20%20%20%20%20Yes%0ALogWhy%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Yes%0A%C2%A0%0ACanonicalization%20%20%20%20%20%20%20%20relaxed%2Fsimple%0A%C2%A0%0AExternalIgnoreList%20%20%20%20%20%20refile%3A%2Fetc%2Fopendkim%2FTrustedHosts%0AInternalHosts%20%20%20%20%20%20%20%20%20%20%20refile%3A%2Fetc%2Fopendkim%2FTrustedHosts%0AKeyTable%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20refile%3A%2Fetc%2Fopendkim%2FKeyTable%0ASigningTable%20%20%20%20%20%20%20%20%20%20%20%20refile%3A%2Fetc%2Fopendkim%2FSigningTable%0A%C2%A0%0AMode%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20sv%0APidFile%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2Fvar%2Frun%2Fopendkim%2Fopendkim.pid%0ASignatureAlgorithm%20%20%20%20%20%20rsa-sha256%0A%C2%A0%0AUserID%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20opendkim%3Aopendkim%0A%C2%A0%0ASocket%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20inet%3A17789%40localhost » message= » » highlight= » » provider= »manual »/]

/etc/default/opendkim

Ouvrir le fichier

[pastacode lang= »markup » manual= »nano%20%2Fetc%2Fdefault%2Fopendkim » message= » » highlight= » » provider= »manual »/]

Ajouter la ligne suivante

[pastacode lang= »markup » manual= »SOCKET%3D%22inet%3A17789%40localhost%22″ message= » » highlight= » » provider= »manual »/]

Il faut modifier le port si celui-ci est différent dans le fichier de configuration précédent. Il faut être attentif sur le port défini précédemment afin de conserver le même à travers les différents fichiers de configuration.

Configuration de Postfix

Editer le fichier de configuration de Postifx

[pastacode lang= »markup » manual= »nano%20%2Fetc%2Fpostfix%2Fmain.cf » message= » » highlight= » » provider= »manual »/]

Vérifier que les lignes suivantes sont présentes et dé-commentées

[pastacode lang= »markup » manual= »%20milter_protocol%20%3D%202%0A%20milter_default_action%20%3D%20accept » message= » » highlight= » » provider= »manual »/]

Si des filtres anti-spam sont installés il faut ajouter OpenDKIM à la liste

[pastacode lang= »markup » manual= »smtpd_milters%20%3D%20unix%3A%2Fspamass%2Fspamass.sock%2C%20inet%3Alocalhost%3A17789%0A%20non_smtpd_milters%20%3D%20unix%3A%2Fspamass%2Fspamass.sock%2C%20inet%3Alocalhost%3A17789″ message= » » highlight= » » provider= »manual »/]

Sinon ajouter OpenDKIM

[pastacode lang= »markup » manual= »smtpd_milters%20%3D%20inet%3Alocalhost%3A17789%0Anon_smtpd_milters%20%3D%20inet%3Alocalhost%3A17789″ message= » » highlight= » » provider= »manual »/]

Création des dossiers

Nous allons à présent créer les dossiers qui vont contenir toutes les données d’OpenDKIM comme les hôtes, les signatures, etc.

Créer la structure

[pastacode lang= »markup » manual= »mkdir%20%2Fetc%2Fopendkim%0Amkdir%20%2Fetc%2Fopendkim%2Fkeys » message= » » highlight= » » provider= »manual »/]

Autoriser les hôtes

Nous allons maintenant spécifier les hôtes autorisés à signer les e-mails avec OpenDKIM.

[pastacode lang= »markup » manual= »vi%20%2Fetc%2Fopendkim%2FTrustedHosts » message= »Créer le fichier /etc/opendkim/TrustedHosts » highlight= » » provider= »manual »/]

Nous pouvons, afin de déclarer les domaines, utiliser des wildwards (*)

[pastacode lang= »markup » manual= »127.0.0.1%0Alocalhost%0A%0A192.168.0.1%2F24%0A*.example.tld » message= » » highlight= » » provider= »manual »/]

Ce fichier est un exemple de configuration pour le domaine *.example.tld
Enregistrer et fermer le fichier TrustedHosts

Dictionnaire de clés

Le fichier dictionnaire est là pour assurer la liaison de chaque domaine à sa clé correspondante.

[pastacode lang= »markup » manual= »nano%20%2Fetc%2Fopendkim%2FKeyTable » message= »Créer le dictionnaire de clé » highlight= » » provider= »manual »/]

Ajouter la ligne suivante

[pastacode lang= »markup » manual= »mail._domainkey.example.tld%20example.tld%3Amail%3A%2Fetc%2Fopendkim%2Fkeys%2Fexample.tld%2Fmail.private » message= » » highlight= » » provider= »manual »/]

Dans cet exemple, le domaine example.tld devra aller chercher sa clé dans /etc/opendkim/keys/example.tld/mail.private
Il est important que vous adaptiez cette configuration à votre domaine.

Dictionnaire de signature

Le fichier dictionnaire de signature est là pour assurer la liaison de chaque adresse e-mail vers son domaine correspondant.

[pastacode lang= »markup » manual= »nano%20%2Fetc%2Fopendkim%2FSigningTable » message= »Créer le dictionnaire de signature » highlight= » » provider= »manual »/]

Ajouter la ligne suivante ( l’utilisation des wildcards est autorisée )

[pastacode lang= »markup » manual= »*%40example.tld%20mail._domainkey.example.tld » message= » » highlight= » » provider= »manual »/]

Dans cet exemple les adresse en @example.tld devront être redirigées vers le sélecteur mail._domainkey.example.tld.
Il est important que vous adaptiez cette configuration à votre domaine.

Génération des clés publiques et privées

Nous allons à présent générer nos paires de clés publiques et privées.

Se déplacer dans le dossier qui recevra les clés

[pastacode lang= »markup » manual= »cd%20%2Fetc%2Fopendkim%2Fkeys » message= » » highlight= » » provider= »manual »/]

Créer un dossier pour notre nouveau domaine example.tld

[pastacode lang= »markup » manual= »mkdir%20example.tld » message= » » highlight= » » provider= »manual »/]

Se déplacer dans le dossier du domaine

[pastacode lang= »markup » manual= »cd%20example.tld » message= » » highlight= » » provider= »manual »/]

Générer les clés pour notre domaine example.tld

[pastacode lang= »markup » manual= »opendkim-genkey%20-s%20mail%20-d%20example.tld » message= » » highlight= » » provider= »manual »/]

L’option -s permet de spécifier un sélecteur et -d le domaine. Cette commande va créer deux fichiers mail.private la clé privée et mail.txt la clé publique.

Changer le propriétaire de la clé privée

[pastacode lang= »markup » manual= »chown%20opendkim%3Aopendkim%20mail.private » message= » » highlight= » » provider= »manual »/]

Ajout des clés publiques aux enregistrements DNS

Nous possédons à présent nos clés publiques, nous devons maintenant les ajouter dans les enregistrements DNS.

Récupérons notre clé publique

[pastacode lang= »markup » manual= »cat%20%2Fetc%2Fopendkim%2Fkeys%2Fexample.tld%2Fmail.txt » message= » » highlight= » » provider= »manual »/]

Vous devriez récupérer une ligne semblable à cette ligne d’exemple :

[pastacode lang= »markup » manual= »mail._domainkey%20IN%20TXT%20%22v%3DDKIM1%3B%20k%3Drsa%3B%20p%3DMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5N3lnvvrYgPCRSoqn%2BawTpE%2BiGY%22%C2%A0%3B%20—–%20DKIM%20key%20mail%20for%20example.tld%20″ message= » » highlight= » » provider= »manual »/]

Copier la clé, la partie « v=DKIM1 … +iGY », dans notre exemple
Ajouter un enregistrement DNS TXT contenant la clé

La propagation DNS peut prendre quelques heures pour être effective ( de 24h à 48h ).

Redémarrer les services Postfix et OpenDKIM

[pastacode lang= »markup » manual= »service%20postfix%20restart%0Aservice%20opendkim%20restart » message= » » highlight= » » provider= »manual »/]

Conclusion

L’utilisation d’OpenDKIM est maintenant effective pour les e-mails envoyés depuis les adresses du domaine @example.tld
Cet article n’est pas exhaustif sur la configuration d’OpenDKIM, il convient d’adapter ces exemples avec la configuration de votre serveur.

 

Sources

Laisser un commentaire