Ajouter un commentaire

Installer DKIM sur Postfix sous Debian

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é


Mise en place


Installation d'OpenDKIM

Installation
apt-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 OpenDKIM
Cré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é correspondante
Cré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.