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.


 apt-get update
 apt-get upgrade

 

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
apt-get install opendkim opendkim-tools

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
nano /etc/opendkim.conf
Ajouter les lignes suivantes au fichier /etc/opendkim.conf, si certaines sont déjà présentes les commenter pour éviter tout problème
AutoRestart             Yes
AutoRestartRate         10/1h
UMask                   002
Syslog                  yes
SyslogSuccess           Yes
LogWhy                  Yes
 
Canonicalization        relaxed/simple
 
ExternalIgnoreList      refile:/etc/opendkim/TrustedHosts
InternalHosts           refile:/etc/opendkim/TrustedHosts
KeyTable                refile:/etc/opendkim/KeyTable
SigningTable            refile:/etc/opendkim/SigningTable
 
Mode                    sv
PidFile                 /var/run/opendkim/opendkim.pid
SignatureAlgorithm      rsa-sha256
 
UserID                  opendkim:opendkim
 
Socket                  inet:17789@localhost

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.

# Log to syslog
#Syslog                  yes
# Required to use local socket with MTAs that access the socket as a non-
# privileged user (e.g. Postfix)
#UMask                   002
 
# Sign for example.com with key in /etc/mail/dkim.key using
# selector '2007' (e.g. 2007._domainkey.example.com)
#Domain                 example.com
#KeyFile                /etc/mail/dkim.key
#Selector               2007
 
# Commonly-used options; the commented-out versions show the defaults.
#Canonicalization       simple
#Mode                   sv
#SubDomains             no
#ADSPDiscard            no
 
# Always oversign From (sign using actual From and a null From to prevent
# malicious signatures header fields (From and/or others) between the signer
# and the verifier.  From is oversigned by default in the Debian pacakge
# because it is often the identity key used by reputation systems and thus
# somewhat security sensitive.
OversignHeaders         From
 
# List domains to use for RFC 6541 DKIM Authorized Third-Party Signatures
# (ATPS) (experimental)
 
#ATPSDomains            example.com
AutoRestart             Yes
AutoRestartRate         10/1h
UMask                   002
Syslog                  yes
SyslogSuccess           Yes
LogWhy                  Yes
 
Canonicalization        relaxed/simple
 
ExternalIgnoreList      refile:/etc/opendkim/TrustedHosts
InternalHosts           refile:/etc/opendkim/TrustedHosts
KeyTable                refile:/etc/opendkim/KeyTable
SigningTable            refile:/etc/opendkim/SigningTable
 
Mode                    sv
PidFile                 /var/run/opendkim/opendkim.pid
SignatureAlgorithm      rsa-sha256
 
UserID                  opendkim:opendkim
 
Socket                  inet:17789@localhost

/etc/default/opendkim

Ouvrir le fichier
nano /etc/default/opendkim
Ajouter la ligne suivante
SOCKET="inet:17789@localhost"

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
nano /etc/postfix/main.cf
Vérifier que les lignes suivantes sont présentes et dé-commentées
 milter_protocol = 2
 milter_default_action = accept
Si des filtres anti-spam sont installés il faut ajouter OpenDKIM à la liste
smtpd_milters = unix:/spamass/spamass.sock, inet:localhost:17789
 non_smtpd_milters = unix:/spamass/spamass.sock, inet:localhost:17789
Sinon ajouter OpenDKIM
smtpd_milters = inet:localhost:17789
non_smtpd_milters = inet:localhost:17789

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
mkdir /etc/opendkim
mkdir /etc/opendkim/keys

Autoriser les hôtes

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

Créer le fichier /etc/opendkim/TrustedHosts
vi /etc/opendkim/TrustedHosts
Nous pouvons, afin de déclarer les domaines, utiliser des wildwards (*)
127.0.0.1
localhost

192.168.0.1/24
*.example.tld
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.

Créer le dictionnaire de clé
nano /etc/opendkim/KeyTable
Ajouter la ligne suivante
mail._domainkey.example.tld example.tld:mail:/etc/opendkim/keys/example.tld/mail.private

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.

Créer le dictionnaire de signature
nano /etc/opendkim/SigningTable
Ajouter la ligne suivante ( l’utilisation des wildcards est autorisée )
*@example.tld mail._domainkey.example.tld

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
cd /etc/opendkim/keys
Créer un dossier pour notre nouveau domaine example.tld
mkdir example.tld
Se déplacer dans le dossier du domaine
cd example.tld
Générer les clés pour notre domaine example.tld
opendkim-genkey -s mail -d example.tld

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
chown opendkim:opendkim mail.private

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
cat /etc/opendkim/keys/example.tld/mail.txt

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

mail._domainkey IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5N3lnvvrYgPCRSoqn+awTpE+iGY" ; ----- DKIM key mail for example.tld 
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
service postfix restart
service opendkim restart

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