24-11
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-perlApt-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]:12028PostFix 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'OpenSSLcd /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=Dans notre exemple, notre clé privée est :; t=; p= ;"
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 DKIMproxycd /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 postfixRedé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=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, from=
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.netComme 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. 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.
28 Commentaires pour ce billet.
Votre commentaire
A noter la création d'un générateur de config DKIM dans la section "outils" du site :
https://admin-serv.net/tools
Bonjour,
Merci pour ce tuto qui m'as permis d'installer dkim.
Cependant, j'ai quelques remarques à faire.
Pour commencer, une simple petite erreur : là où est affiché la clé publique, il est dit "la clé privé est ...". Je pense donc à une petite erreur d'inattention ^^
Ensuite, lors de l'installation, j'ai rencontré pas mal de problèmes! Et tout ça parce que ma configuration (en tout cas certaines parties) n'était pas prise en compte (et ça je ne le savais pas).
Donc, en plus des fichiers de configuration indiqué dans ce tuto, je recommande de faire un tour dans /etc/default/dkimproxy et, soit d'y configurer ce qu'il faut (entre autre le domaine, les chemins vers les clefs, etc..) soit d'utiliser cette configuration.
Donc attention déjà au domaine : celui par défaut, c'est celui configuré sur votre machine via hostname! et non pas celui du fichier de conf. Ensuite, les clef, dkim va les chercher dans /var/lib/dkimproxy (sous les nom de private.key et public.key) et non dans le chemin indiqué dans la configuration.
Bref, plein de petit points auquels il faut faire attention, sinon ça ne fonctionne pas!
Mais en tout cas, merci pour ce tuto :)
@Lowbaka: Normal pour les erreurs/non fonctionnement. L'installation par défaut de DKIM a énormément évolué depuis 2009 (date du tuto) et est devenue un peu plus simple/propre.
En 2009 c'était un tuto : copier/coller, là ça demande un peu d'adaptation.
Merci tout de même pour ton retour, cela fait toujours plaisir ;)
Merci pour ce mémo mais il manque une partie non négligeable : la vérification de la signature des mails entrants.
Salut,
Bon tuto, merci d'avoir pris le temps de le rédiger.
Je pense cependant avoir relevé une petit coquille dans la syntaxe de la déclaration DNS. En effet, après avoir scrupuleusement suivi et adapté ton tuto à mon architecture, le test http://dkimcore.org/c/keycheck me signalait une erreur dans mon enregistrement DNS de DKIM.
Après quelques recherches, il semblerais qu'il manque un point, et qu'il y a un point virgule en trop dans ta syntaxe. La bonne semble être :
._domainkey... IN TXT "k=rsa; t=y; p="
J'espère ne pas me tromper.
++
Arf, tes commentaires ont mangés mes balises ! ^^
Re-voici donc ma syntaxe :
SELECTEUR._domainkey.DOMAIN.TLD. IN TXT "k=rsa; t=y; p=KEY"
@R-No : les deux syntaxes sont valides d'après les RFC (et fonctionnent correctement chez Yahoo par exemple) mais peut-être que l'outils de test n'est pas à jour/configuré pour ce type de configuration.
J'avoue, je ne suis pas allé lire la RFC...
En tout cas, chez Hotmail, la syntaxe de ton tuto renvoi une erreur dans les headers de mes e-mails. L'autre syntaxe, que je viens d'envoyer dans les commentaires, passe correctement les tes d'Hotmail.
Salut !
après implémentation et tirage de cheveux je me retrouve avec un problème, mon domaine ne se fait pas signer. En effet, lors d'une interrogation DNS je ne retrouve absolument pas mon domaine mais juste : selecteur._domainkeys.com en gros, mon ndd se fait viré et je me demande si cela ne viendrait pas du fait que j'ai un nom de domaine séparé par un tiret, si oui ça serait con que je ne puisse pas implémenter DKIM sur mon serveur mail :/
si vous avez une solution je suis preneur ! merci !
@Tetz : A mon avis tu as un soucis dans ton enregistrement DNS. Si tu regardes mon site, il a un tiret et pourtant, il est correctement signé (mon sélecteur est soit mail, soit postfix).
Sans domaine, je ne peux pas voir ce qui cloche, mais je pense que c'est une toute petite erreur.
J'ai pourtant bien retourné en long en large et en travers mes records DNS sans aucune erreur (c'est pratiquement du copier coller d'ici :x) et je me retrouve avec deux problèmes :
- le record TXT qui ne ressort pas
- le header dans le mail qui me ressort juste ".com" et pas mon nom de domaine alors que mes configurations sont bonnes
je suppose que tu peux voir mon mail ;p si tu peux me mail, je te ferai suivre mes fichiers de configuration pour que tu puisses check ce que j'ai fait de bon (ou pas :D) merci à toi !
@Tetz, j'ai un mail en gmail pour toi (alors ça m'aide pas pour regarder ça).
Si dans ton header tu n'as que ".com" sans ton domaine, tu as bel et bien un problème de configuration.
Si le TXT ne ressort pas même si tu fais un :
C'est un soucis niveau config DNS.
Dans la liste des fichiers à regarder, je te dirais bien :
Normalement pour postfix il y a peu de choses à faire, c'est juste un relay et si les mails sortent, il ne devrait pas y avoir de soucis à ce niveau.
je parlais de mon mail en gmail pour que tu me mail (afin que j'ai ton mail) pour que je te fasse suivre les fichiers :D
- commande host :
root [~] > host -t TXT postfix._domainkey.pa-errard.com
postfix._domainkey.pa-errard.com descriptive text "k=rsa\; t=y\; p=ma_super_clé_publique"
(pourquoi le retour me met des \ alors que dans bind j'ai pas ce \)
- fichier de zone :
postfix._domainkey.pa-errard.com. IN TXT "k=rsa; t=y; p=ma_super_clé_publique"
_domainkey.pa-errard.com. IN TXT "o=-;"
- fichier /etc/default/dkimproxy :
RUN_DKIMPROXY_OUT=1
RUN_DKIMPROXY_IN=1
DKIMRPOXY_IN_CONF="/etc/dkimproxy/dkimproxy_in.conf"
DKIMRPOXY_OUT_CONF="/etc/dkimproxy/dkimproxy_out.conf"
(d'ailleurs dans ton tutoriel tu n'en parles pas :D)
- fichier /etc/dkimproxy/dkimproxy_out.conf :
listen 127.0.0.1:12028
relay 127.0.0.1:12029
domain pa-errard.com
signature dkim(c=relaxed)
signature domainkeys(c=nofws)
keyfile /etc/dkimproxy/keys/private.key
selector postfix
Voilà pour la conf (et les ligne que j'ai ajouté à postfix !
et comme j'ai dis, quand je check mes header ils sont de la forme : =@.com :/
Pour les antislash, ils sont complètement normaux.
Par contre dans tes headers de mail là c'est moins normal...
Si tu fais un :
Est-ce que tu as des trucs "bizarres", normalement par défaut tu dois avoir ton hostname dedans, peut-être que l'erreur est là.
A noter aussi que dkimproxy a eu pas mal de mises à jour dans les dernières versions de Debian, d'où des changements en fonctions de ta version (mon tuto date un peu (il a 2 ans)) mais normalement devrait s'adapter.
wai pas de pbm pour le tuto ^^
bon alors, à ne rien y comprendre, j'ai lancé un mail sur mon gmail, je le voit signé par mon serveur (??) je me demande donc si la propagation DNS n'a pas été plus longue que prévue (car faut bien prendre en compte la propa DNS aussi :D)
ah bah, j'ai lancé ta commande, on voit mon domaine nul part haha :D
/usr/bin/perl -I/usr/lib /usr/sbin/dkimproxy.out --domain=com
-I/usr/lib /usr/sbin/dkimproxy.out --domain=com --method=simple --conf_file /etc/dkimproxy/dkimproxy_out.conf --user=dkimproxy --group=dkimproxy
et dans dkimproxy.in je vois le domaine : WTF :D
/usr/bin/perl -I/usr/lib /usr/sbin/dkimproxy.in --hostname=pa-errard.com --conf_file /etc/dkimproxy/dkimproxy_in.conf --user=dkimproxy --group=dkimproxy
je voudrais bien qu'on m'explique là ^^
N'hésites pas à m'envoyer un mail à contact@domaine_du_blog.net
Que je matte tes headers sinon tu as : check-auth@verifier.port25.com
Qui te permet d'avoir un retour de tes headers et leur status.
yep j'utilise aussi le check mais bon, je t'ai envoyé un mail depuis mon root@pa-errard.com (il va ptet passer en spam chez toi)
Comme tu vois tu as un :
--domain=com
A toi de modifier le script dans /etc/init.d/dkimproxy
pour qu'il utilise soit: ton fichier de conf, soit tu le mets en dur.
Par contre tu as peut-être un soucis ailleurs pour qu'il ait "guess" "com" comme domaine...
Bon, bah je risque pas de pouvoir te contacter sur cette boite...
j'envoie avec root, mais la boite mail n'existe pas, si tu veux envoyer un mail tu as admin@ndd ou paerrard@ndd :D
j'étais tombé sur le coup de la ligne du domaine dans /etc/init.d une personne dit que c'est un bug debian et qu'il faut virer les variables (donc je rajoute ou j'enlève ?)
mais le plus étonnant c'est la non réponse des entrées TXT via la commande dig (normal ou pas ?) car avec la commande host pas de soucis
Tu enlèves c'est mieux (ou tu ajoutes, ça marche aussi).
j'ai feinté, j'ai rajouté la même variable que pour le DKIM_IN je vois mes mails signés, tout à l'air de tourner là, je te renvoie un mail tu me diras si tu vois bien comme moi
Tout est bon, mais pas ton SPF ;)
je sais pour le spf, j'ai un champ à rajouter, j'ai pas eu le temps de retourner dessus, mais c'était pas le plus dur ça ^^ :D
merci quoi qu'il en soit, je vais pouvoir me faire mon propre tuto :p
Bonjour, j'ai suivis le tutorial avec attention mais impossible d'avoir un résultat cohérent sur gmail. Après 3 jours à m'arracher les cheveux sur le problème je désespère. Pour les détails voir ici : http://stackoverflow.com/questions/8880500/dkim-authentification-does-not-pass-in-gmail-debian-6
Merci !
Attention, la version 1.2-6 de dkimproxy actuellement dispo sur les dépots de Sqeeze a l'air furieusement buguée.
Si vous avez des soucis avec ce paquet, je vous invite à modifier le fichier /etc/init.d/dkimproxy:
Au lieu de
#DKIMPROXY_OUT_ARGS="--domain=${DOMAIN} --method=simple --conf_file ${DKOUT_CONF} --keyfile=${DKIMPROXY_OUT_PRIVKEY} ${COMMON_ARGS} --pidfile=${PIDDKIMPROXY_OUT} --signature=dkim --signature=domainkeys --min_servers=${DKIMPROXY_OUT_MIN_SERVERS}"
( vous noterez qu'il manque un signe "=" entre "--conf_file" et "${DKOUT_CONF}" )
j'ai personnellement remplacé par
DKIMPROXY_OUT_ARGS="--conf_file=${DKOUT_CONF} ${COMMON_ARGS} --pidfile=${PIDDKIMPROXY_OUT}"
La même erreur est visible sur les paramètres de DKIMPROXY_IN_ARGS.
A noter aussi que dans /etc/default/dkimproxy , des variables s'appellent
DKIMRPOXY_IN_CONF
DKIMPROXY_OUT_CONF
...ça transpire la coquille ( dkimRpoxy au lieu de dkimpRoxy ), et même si a priori ça n'a pas d'impact, ça fait un peu peur quand même.
Bonjour,
Je suis nouveau dans le monde linux et moi aussi j'ai des problème de mail mail rejeté par Gmail et yahoo.
Il semble qu'il soit impossible de récupérer le paquet dkimproxy via apt-get.
Auriez vous une autre procédure ?
Merci par avance