Tutoriel : signer ses e-mails avec DKIM

Tutoriel : signer ses e-mails avec DKIM

La lutte contre le spam engendre des dommages collatéraux. Même si un e-mail que l'on expédie peut nous sembler sain, cela arrive parfois qu'il soit directement placé dans le dossier des indésirables de notre correspondant. Pour limiter cela, et dans le cas où vous gérez votre propre serveur, je vous propose d'installer DKIM.

Signer ses e-mails automatiquement

Il ne faut pas considérer DKIM (DomainKeys Identified Mail) comme une arme absolue pour passer tous les filtres anti-spam mais comme un outil supplémentaire pour montrer vos bonnes intentions.

Avant de commencer l'installation de DKIM, vérifiez que votre serveur est à jour :

$ aptitude update && aptitude upgrade

Comme d'habitude, vous ouvrez une connexion SSH et on commence par installer DKIM et ses outils :

$ aptitude install opendkim opendkim-tools

Nous pouvons passer à la configuration qui est au final assez light. Ouvrez le fichier suivant :

$ nano /etc/opendkim.conf

Et insérez les lignes suivantes en bas du fichier :

AutoRestartRate         10/1h
Syslog                  yes
SyslogSuccess           Yes
LogWhy                  Yes
Canonicalization        relaxed/simple
# Emplacement des fichiers
ExternalIgnoreList      refile:/etc/opendkim/TrustedHosts
InternalHosts           refile:/etc/opendkim/TrustedHosts
KeyTable                refile:/etc/opendkim/KeyTable
SigningTable            refile:/etc/opendkim/SigningTable
# Autres infos
Mode                    sv
PidFile                 /var/run/opendkim/opendkim.pid
SignatureAlgorithm      rsa-sha256
UserID                  opendkim:opendkim
Socket                  inet:PORT_DKIM@localhost

Enregistrez le fichier et ouvrez le suivant :

$ nano /etc/default/opendkim

On y indique le socket utilisé par DKIM :

SOCKET="inet:PORT_DKIM@localhost"

On enregistre et on créé le dossier qui contiendra les clés privées (une par nom de domaine) :

$ mkdir -p /etc/opendkim/keys

Enregistrez le fichier et ouvrez celui qui contiendra les infos de notre Host :

$ nano /etc/opendkim/TrustedHosts

Voici la configuration à mettre en place :

127.0.0.1 localhost 3_PREMIERS_BLOCS_IP_DU_SERVEUR.1/24

Enregistrez le fichier. DKIM fonctionne avec Postfix. Il nous faut donc modifier le fichier de configuration de ce dernier :

$ nano /etc/postfix/main.cf

Et ajoutez tout en bas :

# DKIM
milter_protocol = 6
milter_default_action = accept
smtpd_milters = inet:localhost:PORT_DKIM
non_smtpd_milters = inet:localhost:PORT_DKIM

Redémarrez Postfix :

$ service postfix restart

DKIM utilise un port spécifique, il faut donc l'autoriser dans notre firewall :

$ nano /etc/init.d/firewall

Vous ajoutez les lignes suivantes :

# DKIM
iptables -t filter -A INPUT -p tcp --dport PORT_DKIM -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport PORT_DKIM -j ACCEPT

Après avoir enregistré le fichier, il faut redémarrer le firewall pour la prise en compte :

$ /etc/init.d/firewall stop
$ /etc/init.d/firewall start

Nous en avons terminée avec l'installation et la configuration de DKIM.

Ajouter DKIM à un nom de domaine

On peut à présent ajouter l'ensemble des noms de domaine gérés sur le serveur. On commence par ouvrir le fichier suivant :

$ nano /etc/opendkim/TrustedHosts

En bas, ajoutez la ligne suivante (à répéter pour chaque domaine) :

*.DOMAINE1.COM

Enregistrez le fichier et ouvrez le suivant pour la configuration des clés privées :

$ nano /etc/opendkim/KeyTable

Et insérez la ligne comme suit :

mail._domainkey.DOMAINE1.COM DOMAINE1.COM:mail:/etc/opendkim/keys/DOMAINE1.COM/mail.private

Enregistrez à nouveau le fichier et ouvrez celui des infos de signature :

$ nano /etc/opendkim/SigningTable

Copiez la ligne suivante :

*@DOMAINE1.COM mail._domainkey.DOMAINE1.COM

Après avoir sauvegardé le fichier, nous allons créer le dossier pour notre premier domaine. On se déplace dans le dossier qui contiendra les clés privées des domaines :

$ cd /etc/opendkim/keys

On créé notre dossier et on s'y place à l'intérieur :

$ mkdir DOMAINE1.COM && cd DOMAINE1.COM

On créé la clé privée avec la commande suivante :

$ opendkim-genkey -s mail -d DOMAINE1.COM

On met les bons droits à notre clé, ceux de DKIM :

$ chown opendkim:opendkim mail.private

Il faut maintenant récupérer la clé publique en exécutant la commande suivante :

$ cat mail.txt

Copiez le résultat et mettez le au chaud, nous en aurons besoin pour l'insérer dans le fichier de configuration de DNS de notre domaine :

$ nano /etc/bind/db.DOMAINE1.COM

Modifiez la ligne suivante :

2015020901 // A incrémenter d'un chiffre à chaque modif

Et copiez tout en bas le résultat de votre clé publique (pour l'exemple, j'ai tronqué la mienne) :

mail._domainkey IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCi66..."

Enregistrez le fichier et redémarrez tous les services :

$ service opendkim restart
$ service bind9 restart

Il suffit maintenant d'attendre la propagation des DNS avant de tester le bon fonctionnement. Pour ce faire, rendez-vous sur le site http://www.mail-tester.com/. Copiez l'adresse e-mail contenue dans le champ à fond blanc et, sans fermer ni rafraichir la page, envoyez un e-mail à cette adresse. Retournez ensuite sur le site et cliquez sur le bouton bleu :

Mail tester

Si le test est OK, vous devriez avoir un message aussi sympa que celui-ci :

Résultat avec signature DKIM

Voilà, vous êtes prêts à envoyer des mails avec une jolie signature. A noter que cet outil permet également de tester vos newsletters. C'est toujours bon à savoir car par exemple, l'oubli d'un simple attribut ALT sur une image ou une redirection sur un lien de tracking diminue votre score.

Amusez-vous bien. ;)

Catégorie Tutoriels - Écrit par le 12/03/2015 - Article lu 2 143 fois - 2 commentaires

2 réflexions sur ce billet

Écrit par Sébastien
Le 10/10/2015 à 05h57

Bonjour,

Merci beaucoup pour votre travail, encore un très bon tuto.

Petite question. Vous indiquez dans la première partie du tutoriel d'ajouter
127.0.0.1localhost3_PREMIERS_BLOCS_IP_DU_SERVEUR.1/24 dans le fichier /etc/opendkim/TrustedHosts

Voila ma question. Faut-il mettre la ligne comme vous l'indiquer donc sans espace
127.0.0.1localhost3_PREMIERS_BLOCS_IP_DU_SERVEUR.1/24 ou avec des espaces
127.0.0.1 localhost 3_PREMIERS_BLOCS_IP_DU_SERVEUR.1/24

Merci pour votre réponse

Cordialement

Écrit par Hervé
Le 10/10/2015 à 08h43

Bonjour Sébastien

Il faut bien entendu indiquer les espaces. J'ai corrigé le tutoriel. ;)

Les commentaires de ce billet sont fermés

Haut de page