42 votes

DKIM signer les mails sortants de n'importe quel domaine (avec Postfix et Ubuntu)

J'ai configuré DKIM sur mon serveur de messagerie (postfix et ubuntu) afin de signer les e-mails sortants. J'ai utilisé ces instructions : https://help.ubuntu.com/community/Postfix/DKIM

Cependant, j'ai besoin de le configurer pour signer des e-mails provenant de n'importe quel domaine (dans l'adresse De) et pas seulement du mien. Je construis un service de newsletter par e-mail et les clients enverront leurs propres e-mails via le serveur.

J'ai d'abord défini "Domain *" dans /etc/dkim-filter.conf. Cela a permis d'inclure les en-têtes DKIM dans tous les e-mails sortants, quel que soit le domaine.

Cependant, la vérification échoue sur gmail car il vérifie le domaine dans l'adresse De, et non pas mon domaine (et enregistrement DNS). Quelqu'un sait comment faire cela?

45voto

cam8001 Points 836

Ok, j'ai réussi à résoudre cela par moi-même, mais je voulais poster les étapes ici pour la postérité car il n'y avait aucune documentation sur cela (que j'ai pu trouver) et c'était pratiquement deviner et vérifier.

Après avoir défini "Domain *" comme décrit ci-dessus, cela le signait comme ceci :

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=clientdomain.com;
    s=main; t=1250005729;
    bh=twleuNpYDuUTZQ/ur9Y2wxCprI0RpF4+LlFYMG81xwE=;
    h=Date:From:To:Message-Id:Subject:Mime-Version:Content-Type;
    b=kohI7XnLlw/uG4XMJoloc4m9zC13g48+Av5w5z7CVE0u3NxsfEqwfDriapn7s7Upi
     31F3k8PDT+eF57gOu2riXaOi53bH3Fn/+j0xCgJf8QpRVfk397w4nUWP/y8tz4jfRx
     GhH21iYo05umP0XflHNglpyEX02bssscu2VzXwMc=

remarquez le "d=clientdomain.com". Il le générait en fonction de l'adresse de provenance dans l'e-mail, où l'adresse de provenance était quelque chose comme "contact@clientdomain.com". Évidemment, s'il vérifiait le domaine du client et non le mien, aucun enregistrement TXT DNS n'était là et la vérification échouerait.

Donc de toute façon, j'ai découvert dans cette documentation que vous pouvez définir un paramètre KeyList. http://manpages.ubuntu.com/manpages/hardy/man5/dkim-filter.conf.5.html

Il n'a pas vraiment décrit ce que je voulais faire, mais j'ai pensé que j'allais jouer avec. J'ai commenté KeyFile et défini KeyList sur "/etc/mail/dkim_domains.key" qui est un nom de fichier arbitraire que j'ai inventé. J'ai ensuite créé ce fichier et mis ceci dedans "*:feedmailpro.com:/etc/mail/dkim.key". Cela lui dit de signer pour n'importe quel domaine client avec mon domaine (feedmailpro.com), et d'utiliser le fichier dkim.key.

Redémarré DKIM et postfix

sudo /etc/init.d/dkim-filter restart
sudo /etc/init.d/postfix restart

Maintenant voici la clé qu'il a générée lorsque j'ai envoyé un e-mail de test.

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=feedmailpro.com;
    s=dkim.key; t=1250005729;
    bh=twleuNpYDuUTZQ/ur9Y2wxCprI0RpF4+LlFYMG81xwE=;
    h=Date:From:To:Message-Id:Subject:Mime-Version:Content-Type;
    b=kohI7XnLlw/uG4XMJoloc4m9zC13g48+Av5w5z7CVE0u3NxsfEqwfDriapn7s7Upi
     31F3k8PDT+eF57gOu2riXaOi53bH3Fn/+j0xCgJf8QpRVfk397w4nUWP/y8tz4jfRx
     GhH21iYo05umP0XflHNglpyEX02bssscu2VzXwMc=

Amélioration, vous voyez maintenant que le "d=" est défini sur mon domaine (même si l'adresse de provenance de l'e-mail n'était pas mon domaine). Cependant, le "s=" a été changé en "dkim.key" au lieu du sélecteur que j'ai choisi dans dkim-filter.conf. Dans les instructions de configuration initiales, j'avais défini le sélecteur sur "mail". C'était étrange, mais j'ai remarqué que cela l'avait changé en le nom de fichier de ma clé, dkim.key.

Alors j'ai renommé "/etc/mail/dkim.key" en "/etc/mail/mail". J'ai également mis à jour la référence à cela dans "/etc/mail/dkim_domains.key".

Redémarré dkim-filter et postfix à nouveau comme ci-dessus, et maintenant cela fonctionnait. Voici l'en-tête final qui se signe correctement en utilisant le bon sélecteur (apparemment en fonction du nom de fichier de la clé).

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=feedmailpro.com;
    s=mail; t=1250006218;
    bh=tBguOuDhBDlhv0m4KF66LG10V/8ijLcAKZ4JbjpLXFM=;
    h=Date:From:To:Message-Id:Subject:Mime-Version:Content-Type;
    b=c9eqvd+CY86BJDUItWVVRvI3nibfEDORZbye+sD1PVltrcSBOiLZAxF3Y/4mP6vRX
     MUUNCC004oIH1u7FYafgF32lpuioMP1cd7bi6x3AZ5zH4BYETNBnnz4AhAPBtqlIh/
     FFMz8jkhhLhcM2hDpwJkuKjAe3LzfNVDP8kD11ZI=

Maintenant s=mail est correct, et d=feedmailpro.com est correct. Ça marche !

Dans l'ensemble, cela a été bien plus compliqué que ce à quoi je m'attendais et il semblait n'y avoir aucune documentation sur comment faire cela (signer pour tous les domaines sortants), mais je suppose que c'est un logiciel open source donc je ne peux pas me plaindre.

Une dernière note, pour vérifier si l'enregistrement DNS TXT a été correctement configuré, vous pouvez faire une commande comme suit avec votre domaine

dig mail._domainkey.feedmailpro.com TXT

Vous devrez peut-être installer dig (sudo apt-get install dig). Si vous utilisez Slicehost manager pour ajouter l'entrée DNS, vous entreriez l'enregistrement TXT de cette manière.

Type: TXT
Nom: mail._domainkey
Données: k=rsa; t=s; p=M5GfMA0...VOTRE LONGUE CLÉ...fIDAQAB
Secondes TTL: 86400

Je ne comprends pas vraiment pourquoi le nom est défini sur "mail._domainkey" sans point à la fin ou sans mon domaine, comme "mail._domainkey.feedmailpro.com". Mais bon, ça semble fonctionner donc je suis content.

Si vous essayez de reproduire ceci, voici les instructions avec lesquelles j'ai commencé : https://help.ubuntu.com/community/Postfix/DKIM

17voto

MrChrister Points 2276

Inspiré par la réponse de Brian Armstrong pour dkim-filter, voici comment j'ai fait cela pour OpenDKIM.

/etc/opendkim.conf

Syslog          yes
UMask           002
KeyTable        /etc/mail/dkim_key_table
SigningTable    refile:/etc/mail/dkim_signing_table

Remarquez que SigningTable a refile: dans sa définition, cela spécifie que le fichier inclut des expressions régulières; dans notre cas, le joker *.

/etc/mail/dkim_key_table

keyname  example.com:selector:/etc/mail/selector.key

Ici, keyname est utilisé pour faire correspondre la clé entre ce fichier et le fichier dkim_signing_table. Dans mon fichier réel, j'ai nommé ceci de la même manière que mon sélecteur.

example.com et sélecteur doivent être remplacés par le domaine et le sélecteur que vous souhaitez utiliser dans les d= et s= de votre signature, respectivement.

/etc/mail/dkim_signing_table

*   keyname

Ce fichier map simplement les adresses trouvées dans l'en-tête From: à une clé dans la dkim_key_table. Dans ce cas, nous voulons que tous les emails envoyés via ce serveur soient signés avec la même clé, donc un joker * est utilisé.

3voto

homer Points 101

Ancien fil mais peut-être que quelqu'un d'autre qui trouve ceci a une utilité à savoir que la version 2.x d'opendkim fonctionne avec KeyTable au lieu de KeyList.

Vous pouvez convertir votre fichier KeyList avec l'outil opendkim-convert-keylist (http://manpages.ubuntu.com/manpages/lucid/man8/opendkim-convert-keylist.8.html)

Vous pouvez en savoir plus sur la mise en œuvre de KeyTable dans la page de l'homme opendkim : (http://www.opendkim.org/opendkim.conf.5.html)

2voto

hynekcer Points 193

Je ne comprends pas vraiment pourquoi le nom est défini comme "mail._domainkey" sans point.

La documentation pour le filtre DKIM est généralement installée au format man unix. Seul Google le sait :-) J'ai aussi eu un problème.

man dkim-filter.conf
man dkim-filter
man dkim-genkey

man dkim-stats
man dkim-testkey
man dkim-testssp

J'ai essayé sur Debian. Si ce n'est pas réellement dans votre distribution, vous pouvez télécharger le fichier tarball source et lire la documentation facilement.

man dkim-milter-2.8.3/dkim-filter/dkim-filter.conf.5

etc.

--

Je ne comprends pas vraiment pourquoi le nom est défini comme "mail._domainkey" sans point.

Ainsi, vous pouvez utiliser exactement le même dans les deux enregistrements DNS de différents domaines.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X