Vous êtes ici : Accueil / Debian GNU/Linux / Serveurs / E-Mails / Configurer DKIM avec Exim 4 sur Debian

Configurer DKIM avec Exim 4 sur Debian

Par Pierre-Yves Landuré Dernière modification 26/11/2016 11:39

DKIM signifie DomainKeys Identified Mail. C'est une méthode imaginée par Yahoo! permettant de certifier qu'un email a été envoyé par un serveur autorisé. Si un email en provenance d'un domaine lambda a été envoyé par un serveur non validé pour ce domaine, il est fort probable que cet email soit un spam.

Ce guide est testé sur:

  • Debian 6.0 Squeeze
  • Debian 7.0 Wheezy

Prérequis

Ce guide nécessite:

Paramètres

Choisissez un code pour le serveur sur lequel vous configurez DKIM:

SELECTOR="server_code"

Chaque serveur SMTP envoyant des emails pour le domaine protégé doit posséder un code différent.

Une convention possible pour ce code est d'utiliser le nom de domaine du serveur SMTP. Ainsi, pour le serveur "smtp.biapy.fr", le code est:

SELECTOR="smtp-biapy-fr"

Installation

Déterminez le chemin d'installation:

INSTALL_PATH="/etc/exim4/dkim"

Créez le dossier:

command mkdir --parent "${INSTALL_PATH}"

Préparation de l'environnement

Installez les logiciels nécessaires:

command apt-get install openssl ca-certificates

Création de la clef DKIM

Créez la clef RSA destinée à signer les emails sortants:

command openssl genrsa -out "${INSTALL_PATH}/dkim.private.${SELECTOR}" 768

Générez la clef publique associée:

command openssl rsa -in "${INSTALL_PATH}/dkim.private.${SELECTOR}" \
-out "${INSTALL_PATH}/dkim.public.${SELECTOR}" \
-pubout -outform DER

Convertissez la clef publique en base64:

command base64 -w 0 < "${INSTALL_PATH}/dkim.public.${SELECTOR}" > "${INSTALL_PATH}/dkim.public.base64.${SELECTOR}"
command echo "" >> "${INSTALL_PATH}/dkim.public.base64.${SELECTOR}"

Ajustez les permissions:

command chown root:Debian-exim "${INSTALL_PATH}/dkim.private.${SELECTOR}"
command chmod 440 "${INSTALL_PATH}/dkim.private.${SELECTOR}"

Configuration d'Exim 4

Configurez Exim pour utiliser la clef DKIM:

command echo "
### main/02_exim4-config_dkim
#################################

# The signing method for DKIM
DKIM_CANON = relaxed

# Domain for which DKIM signing is used.
# This option must be unset if multiple domains are handled by this server.
# DKIM_DOMAIN=

# private key used for DKIM.
DKIM_PRIVATE_KEY = ${INSTALL_PATH}/dkim.private.${SELECTOR}

# DKIM selector, guessed from the DKIM private key file extension.
DKIM_SELECTOR = \${extract{-1}{.}{DKIM_PRIVATE_KEY}}
" \
    > '/etc/exim4/conf.d/main/02_exim4-config_dkim'

Configurez la signature automatique de tous les emails sortants appartenant aux domaines locaux:

command sed -i -e '/ifdef DKIM_DOMAIN/i\
.ifndef DKIM_DOMAIN\
dkim_domain = ${if match_domain{$sender_address_domain}{+local_domains} {$sender_address_domain} { \\\
${if match_domain{$sender_address_domain}{+cyrus_all_domains} {$sender_address_domain}  {}} \\\
}}\
.endif' '/etc/exim4/conf.d/transport/30_exim4-config_remote_smtp'

Rechargez la configuration:

/etc/init.d/exim4 restart

Configuration DNS

Obtenez la configuration de la zone DNS du domaine pour DKIM:

PUBLIC_KEY="$(command cat "${INSTALL_PATH}/dkim.public.base64.${SELECTOR}")"
command echo "# Dkim configuration for server with selector {$SELECTOR}.

_asp._domainkey IN TXT \"dkim=all\"
_adsp._domainkey IN TXT \"dkim=all\"
_domainkey IN TXT \"t=y; o=-;\"

${SELECTOR}._domainkey 14400 IN TXT \"v=DKIM1; k=rsa; p=${PUBLIC_KEY};\"
" | command tee "${INSTALL_PATH}/named.conf"

Ajoutez les lignes affichées à la configuration de votre zone DNS. Prévoyez 24h pour que les modifications des réglages DNS soient prisent en compte.

Si vous disposez d'un serveur Bind sur l'hôte local, ajoutez aux zones concernées la ligne fournie par:

command echo ";; Enable DKIM verification
\$INCLUDE ${INSTALL_PATH}/named.conf"

Les lignes _asp._domainkey et _adps._domainkey sont utilisées pour signaler si tous les e-mails pour le domaine sont signés (all) (asp est l'acronyme de Author Signing Practices). Si d'autres serveurs SMTP expédient des emails pour le domaine, vous pouvez signalez que seulement certains emails sont signés (unknown).

La ligne "_domainkey" signale à l'aide de "o=-" que tous les emails doivent être signés. Si ce n'est pas le cas, remplacez l'option par "o=~".

Important: L'option "t=y;" dans la ligne "_domainkey" signifie que la configuration est en cours de test. Retirez-la dès que vous vous êtres assuré du bon fonctionnement de la configuration.

Pour mettre en place le SPF (Sender Framework Policy), inspirez-vous de l'article configurer Sender ID et DomainKeys (fr) écrit par Samuel ROZE (fr). Le SPF évite que les e-mails du domaine soient classés comme indésirables par Windows Live Mail.

Vérification

Envoyez un email à l'adresse check-auth@verifier.port25.com . Vous recevrez en retour un rapport complet de votre configuration DKIM et SPF.

Vous pouvez aussi tester la configuration avec ces outils:

Important: Une fois les tests terminés avec succès, retirez "t=y; " de la valeur "_domainkey".

Remerciements :