Introduction
Afin d'éviter de voir finir ses e-mails dans les spams, 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, ce qui peut s'avérer utile pour connaitre le responsable de l'envoi en cas de réclamation.
Pré-requis
Premièrement, il vous faudra avoir votre système le plus à jour possible
apt-get update
apt-get upgrade
Pour conserver Debian à jour, vous devez avoir une liste des dépôts officiels. Vous pourrez trouver une liste des dépôts disponibles chez Ikoula et les instructions d'installation à cette adresse.
Avertissement : Avant toute modification de votre système prévoyez toujours une sauvegarde des fichiers en cas de mauvaise manipulation.
Lorsque le serveur est en production, il est conseillé de réaliser des opérations lors des heures les plus creuses de votre activité
Lorsque le serveur est en production, il est conseillé de réaliser des opérations lors des heures les plus creuses de votre activité
Mise en place
Installation d'OpenDKIM
Installationapt-get install opendkim opendkim-tools
Configuration
Elle se fait via 2 fichiers : /etc/opendkim.conf et /etc/default/opendkim.
/etc/opendkim.conf
- Ouvrir le fichiers
vi /etc/opendkim.conf
- Ajouter les lignes suivantes au fichier /etc/opendkim.conf
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 : AutoResart : Redémarrer automatiquement le service en cas d'erreur.
AutoRestartRate : Le nombre de redémarrage maximum dans un temps donné. Par exemple, 10 / 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.
Voici un exemple de configuration. Il est nécessaire de faire correspondre les paramètres à votre configuration actuelle et selon vos besoins. Suivez ce lien pour plus d'informations sur OpenDKIM.
#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
vi /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 Postfix
vi /etc/postfix/main.cf
Vérifier que les lignes suivante existent et ne sont pas commentées
milter_protocol = 2
milter_default_action = accept
Il est nécessaire d'ajouter OpenDKIM à la liste des filtres anti-spam
smtpd_milters = unix:/spamass/spamass.sock, inet:localhost:17789
non_smtpd_milters = unix:/spamass/spamass.sock, inet:localhost:17789
Si non, ajoutez OpenDKIM
smtpd_milters = inet:localhost:17789
non_smtpd_milters = inet:localhost:17789
Création des dossiers
Il vous faudra également créer des dossiers qui contiendront les données liées à OpenDKIM (hôtes, signatures...)Créer la structure
mkdir /etc/opendkim
mkdir /etc/opendkim/keys
Autoriser les hôtes
Nous allons maintenant spécifier les hôtes qui pourront signer les e-mails avec OpenDKIMCréer le fichier /etc/opendkim/TrustedHosts
vi /etc/opendkim/TrustedHosts
Pour déclarer des domaines, nous pouvons utiliser des wildwards
#Ne pas toucher les 3 premieres lignes
127.0.0.1
localhost
192.168.0.1/24
*.example.tld
Ce fichier est un exemple de configuration pour le domaine *.example.tld
Enregistrez et fermez le fichier TrustedHosts
Dictionnaire de clés
Il existe pour assurer la liaison des domaines à la clé correspondanteCréation
vi /etc/opendkim/KeyTable
Ajoutez 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
Il existe pour assurer la liaison de chaque adresse vers son domaine correspondant.Création
vi /etc/opendkim/SigningTable
Ajout de la ligne suivante (les wildcards sont ici autorisées)
*@example.tld mail._domainkey.example.tld
Ici, les adresees en @example.tld devront être redirigées vers le sélecteur mail._domainkey.example.tld
Cette configuration doit être adaptée à votre domaine.
Génération des clés publiques ou provées
Voici comment créer des paires de clés publiques et privées.Se déplacer dans le dossier qui recevra les clés
cd /etc/opendkim/keys
Création d'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 des clés pour le domaine example.tld
opendkim-genkey -s mail -d example.tld
L'option-s permet de spécifier un sélecteur et -d le domaine. Cela va générer la création de 2 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 de clés publiques aux enregistrements DNS
Toutes les clés publiques sont maintenant crées, il faut désormais les ajouter dans les enregistrements DNS.Récupérons la clé publique
cat /etc/opendkim/keys/example.tld/mail.txt
Une ligne comme suit devrait alors apparaitre :
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 l'exemple
Ajoutez un enregistrement DNS TXT contenant la clé
La propagation des DNS peut prendre de 24 à 48h pour être effective
Redémarrer les services Postfix et OpenDKIM
service postfix restart
service opendkim restart
Conclusion
L'utilisation d'OpenDKIM est maintenant effecive 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.