Installation de DKIMProxy sur Postfix

Installation de DKIMProxy sur Postfix

DKIMProxy vous permet de signer numériquement vos mails. Ce n’est pas une solution pour éviter la boite à Spam, mais elle permet de prouver au receveur que vous êtes bien l’émetteur de l’email. Yahoo! et Gmail utilise cette technologie depuis un petit moment et à été développé par Yahoo! à l’origine.

Installation des paquets

Commencez d’abord par installer les paquets de base. (PostFix doit déjà être installé).

# Si vous précisez uniquement les deux premiers
# Apt-Get vous proposera d'installer le reste
apt-get install dkimproxy libnet-dns-perl \
libcrypt-openssl-rsa-perl libmail-dkim-perl libmilter1.0.1 libio-stringy-perl

Apt-Get se charge d’installer les paquets et vous génère une clé publique par défaut. Tout est lancé et préconfiguré (plutôt succinctement).

Configuration de PostFix pour utiliser DKIMProxy

Rendez-vous dans le répertoire de configuration de PostFix.

cd /etc/postfix/

Configurez votre main.cf pour utiliser le Filter DKIMProxy.

nano /etc/postfix/main.cf
# Si la clé de configuration content_filter n'est pas présente
# Rajoutez-la.
# On indique à PostFix de filtrer le contenu sur le port
# 12028 en local.
content_filter = dksign:[127.0.0.1]:12028

PostFix renverra à partir de maintenant tous les mails vers le service (défini dans master.cf) nommé dksign, sur le port 12028. Les crochets indiques à PostFix de ne pas faire de vérification MX.

Configuration du master.cf pour rajouter les filtres adéquates.

nano /etc/postfix/master.cf
# Rajout d'un filter en sortie
# Modifier le SMTP
smtp      inet  n       -       n       -       250       smtpd
         -o smtpd_proxy_ehlo=no
         -o content_filter=dksign:[127.0.0.1]:12028
# Création du service dksign
# Rajoutez à la fin
dksign  unix    -       -       n       -       10      smtp
         -o smtp_send_xforward_command=no
         -o content_filter=
# On souhaite accepter les messages venant de dksign
127.0.0.1:12029 inet    n       -       n       -       10      smtpd
         -o content_filter=
         -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
         -o smtpd_helo_restrictions=
         -o smtpd_client_restrictions=
         -o smtpd_sender_restrictions=
         -o smtpd_recipient_restrictions=permit_mynetworks,reject
         -o mynetworks=127.0.0.0/8

Génération des clés

DKIM utilise une authentification par clé, il faut donc les créer à l’aide d’OpenSSL

cd /etc/dkimproxy/
mkdir keys/
cd keys/
openssl genrsa -out private.key 1024
openssl rsa -in private.key -out public.key -pubout -outform PEM
# DKIMProxy doit pouvoir lire ces clés
chown dkimproxy:dkimproxy *

Vos clés sont désormais prêtes, il faut ensuite ajouter les enregistrements TXT à votre serveur DNS.

Ajout des enregistrement DNS à votre serveur DNS

Pour fonctionner, le serveur de mail sur lequel vous envoyez votre mail interroge votre serveur DNS pour vérifier que la clé qu’il reçoit correspond bien à celle que vous avez déclarée.
Vous devez créer un enregistrement TXT de la forme [sélecteur]._domainkey.[votre_domaine.com]. Je n’ai jamais bien compris l’utilité du sélecteur, mais il servirait au cas où vous installeriez plusieurs serveurs de mail sur la même machine.
Dans notre cas, notre sélecteur sera postfix, mais vous pouvez utilisez « mail » si vous préférez. Notre enregistrement TXT sera donc, pour nous : postfix._domainkey.admin-serv.net.

Le format d’ajout du champ DNS est le suivant :

[sélecteur]._domainkey IN TXT "k= ; t=; p=;"

Dans notre exemple, notre clé privée est :

cat /etc/dkimproxy/keys/public.key
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCceTBoACziImQH/gzyuayV6XdN
2417hY5ThOL6YPTSXbAFcMDIPGJLqy9BnB5qXB9h0zJm5e5WqKxQmapNt6cLdU4N
ExLc8fKENk2ohP7oOAM1emecr3xUXdmKNJqJ9MZ0s3C+OgbvdF3uAdznbO8yVBYI
MxJP3xjC6OYsgZu41QIDAQAB
-----END PUBLIC KEY-----
# Notez qu'elle est wrappée. Vous devez donc la remettre en ligne.

Votre enregistrement TXT sera donc :

# Ajoutez une ligne précisant que votre domaine utilise DKIM
# Le t=y est facultatif si vous savez ce que vous faites.
postfix._domainkey.admin-serv.net IN TXT "k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCceTBoACziImQH/gzyuayV6XdN2417hY5ThOL6YPTSXbAFcMDIPGJLqy9BnB5qXB9h0zJm5e5WqKxQmapNt6cLdU4NExLc8fKENk2ohP7oOAM1emecr3xUXdmKNJqJ9MZ0s3C+OgbvdF3uAdznbO8yVBYIMxJP3xjC6OYsgZu41QIDAQAB;"
# Patientez un peu le temps que l'enregistrement
# Soit pris en compte puis vérifiez.
dig -t TXT postfix_domainkey.admin-serv.net
# Si vous souhaitez précisez que votre domaine signe tous les mails
# Vous pouvez aussi rajouter un enregistrement TXT supplémentaire
# Par défaut, uniquement votre domaine
_domainkey.admin-serv.net IN TXT "o=-"

Référence : RFC 4870

Configuration de DKIMProxy

Maintenant que tout est prêt, nous allons pouvoir configurer DKIMProxy pour signer vos emails sortant.
Rendez-vous dans le répertoire de configuration de DKIMproxy

cd /etc/dkimproxy/
nano dkimproxy_out.conf
# Nous n'utilisons pas les ports par défaut
listen 127.0.0.1:12028
# Nous avons spécifié un relay sur le port 12029
relay 127.0.0.1:12029
# Spécifiez le domaine que vous souhaitez signer
domain admin-serv.net
# Spécifiez les signatures à rajouter
signature dkim(c=relaxed)
signature domainkeys(c=nofws)
# Indiquez l'emplacement de votre clé privée
keyfile /etc/dkimproxy/keys/private.key
# Votre sélecteur
selector postfix

Redémarrez Postifx et DKIMProxy pour prendre en compte les modifications que nous venons de faire

# DKIMProxy
/etc/init.d/dkimproxy restart
Shutting down inbound DomainKeys-filter: dkimproxy.in.
Shutting down outbound DomainKeys-filter: dkimproxy.out.
Starting inbound DomainKeys-filter: dkimproxy.in.
Starting outbound DomainKeys-filter: dkimproxy.out.
# PostFix
/etc/init.d/postfix restart
Stopping Postfix Mail Transport Agent: postfix.
Starting Postfix Mail Transport Agent: postfix.

Test de la signature des messages sortant

Tentez d’envoyer un mail depuis votre serveur afin de voir si celui-ci signe correctement les messages.

# Choisissez de préférence une adresse Gmail
mail -s "Petit message de test voir si DKIM fonctionne" boris17480@gmail.com
Ceci est un petit message de test.
.
Cc:
# On va rapidement voir dans les logs
cd /var/log/
tail -f mail.info
# On aperçoit la ligne nous montrant que DKIM
# Signe correctement les messages
Nov 24 18:56:39 lucy dkimproxy.out[12097]: DKIM signing - signed; message-id=<20091124175639.04FD986F2@lucy.admin-serv.net>, signer=, from=

Le but d’avoir choisis une adresse Gmail est de pouvoir voir rapidement si oui, ou non, DKIM fonctionne bien.
Ouvrez la source du message et regardez dans les headers de votre mail la ligne de test effectuée par GMail

Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of root@lucy.admin-serv.net designates 91.121.169.79 as permitted sender) smtp.mail=root@lucy.admin-serv.net; dkim=pass header.i=@admin-serv.net

Comme vous le voyez, nous avons réussi le test Gmail. Maintenant nous allons pouvoir effectuer un test sur Yahoo qui donne de bien plus jolie résultats

mail -s "Petit message de test voir si DKIM fonctionne chez Yahoo! " borispigeot@yahoo.fr
Ceci est un petit message de test.
.
Cc:

Si vous voyez la petit serrure numérique, c’est que ça fonctionne chez eux.

Yahoo! DKIM vérifié

Voilà, l’installation et la configuration est terminée, il ne vous reste plus qu’à regarder votre taux d’ouverture des messages. Bien que ça ne soit pas utilisé par la plupart comme AntiSpam, le fait d’avoir une signature prouve que l’administrateur du serveur fait ses efforts pour lutter, au mieux, contre le Spam et le Fishing.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *