DKIM signe le courrier sortant de n'importe quel domaine (avec Postfix et Ubuntu)

40

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

Cependant, j'en ai besoin pour signer des courriels de n'importe quel domaine (dans l'adresse de l'expéditeur) et pas seulement du mien. Je construis un service de courrier électronique et les clients enverront leur propre courrier électronique via le serveur.

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

Cependant, la vérification de la vérification échoue sur Gmail car il vérifie le domaine dans l’adresse de départ, et non mon domaine (et mon enregistrement DNS). Est-ce que quelqu'un sait comment faire ça?

Brian Armstrong
la source

Réponses:

41

Ok, j’ai réussi à le résoudre moi-même, mais je voulais publier ici les étapes pour la postérité car il n’y avait aucune documentation à ce sujet (que je pouvais trouver) et c’était pratiquement deviner et vérifier.

Après avoir défini "Domain *" comme décrit ci-dessus, il serait signé comme suit:

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 générait ceci en fonction de l'adresse de départ dans le courrier électronique, où l'adresse de provenance ressemblait à "[email protected]". Il est évident que s'il vérifie le domaine du client et non le mien, aucun enregistrement DNS TXT n'est présent et la vérification échouera.

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

Cela ne décrivait pas vraiment ce que je voulais faire, mais je pensais jouer avec. J'ai commenté KeyFile et défini KeyList à "/etc/mail/dkim_domains.key", nom de fichier arbitraire que j'ai composé. J'ai ensuite créé ce fichier et y ai mis "*: feedmailpro.com: /etc/mail/dkim.key". Cela le dit pour n'importe quel domaine client, signez-le avec mon domaine (feedmailpro.com) et utilisez le fichier dkim.key.

DKIM et postfix redémarrés

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

Maintenant, c'est la clé 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 le d = maintenant est défini sur mon domaine (même si l'adresse de l'expéditeur de l'email n'était pas mon domaine). Cependant, s = a été remplacé par "dkim.key" au lieu du sélecteur que j'ai choisi dans dkim-filter.conf. Dans les instructions de configuration d' origine , je plaçais le sélecteur sur "mail". C'était bizarre, mais j'ai remarqué que cela changeait le nom de fichier de ma clé, dkim.key.

Je suis donc allé renommer "/etc/mail/dkim.key" en "/ etc / mail / mail". Également mis à jour la référence dans "/etc/mail/dkim_domains.key".

Redémarrez dkim-filter et postfix comme ci-dessus, et tout commence à fonctionner. Voici l'en-tête final qui signe correctement à l'aide du sélecteur de droite (apparemment basé sur le 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 a raison, et d = feedmailpro.com a raison. Ça marche!

Dans l’ensemble, c’était beaucoup plus difficile que prévu et il ne semblait exister aucune documentation sur la procédure à suivre (signature pour tous les domaines sortants), mais je suppose qu’il s’agit d’un logiciel open source et que je ne peux donc pas me plaindre.

Une dernière remarque, pour vérifier si l’enregistrement DNS TXT a été configuré correctement, vous pouvez exécuter une commande similaire à celle de votre domaine.

dig mail._domainkey.feedmailpro.com TXT

Peut-être besoin d'installer dig (sudo apt-get install dig). Si vous utilisez Slicehost Manager pour ajouter l'entrée DNS, vous devez saisir l'enregistrement TXT comme ceci.

Type: TXT
Name: mail._domainkey
Data: k=rsa; t=s; p=M5GfMA0...YOUR LONG KEY...fIDAQAB
TTL seconds: 86400

Je ne comprends pas vraiment pourquoi le nom est défini sur "mail._domainkey" sans période à la fin ou sans mon domaine, comme "mail._domainkey.feedmailpro.com". Mais peu importe, cela semble fonctionner, donc je suis heureux.

Si vous essayez de dupliquer cela, voici les instructions que j'ai commencées avec: https://help.ubuntu.com/community/Postfix/DKIM

Brian Armstrong
la source
2
Merci d'avoir mis ça ici, ça aide les autres (comme moi) à sortir :)
thomasrutter
Bienvenue, thomas!
Brian Armstrong
Wow, cela a beaucoup aidé. Je me suis cogné la tête à cause du "s = dkim.key" jusqu'à ce que je tombe sur votre message!
3molo
Une chose que le guide sur ubuntu.com omet de mentionner est qu’une fois que tout fonctionne, changez t = y en t = n dans l’enregistrement TXT pour indiquer que ce n’est pas un test.
3molo
Il existe de bonnes ressources pour utiliser SigningTable, etc. Par exemple, blog.tjitjing.com/index.php/2012/03/… (excellent) et même le readme opendkim
rfay
15

Inspiré par la réponse de Brian Armstrong pour dkim-filter, voici comment je l’ai fait pour OpenDKIM .

/etc/opendkim.conf

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

Notez que SigningTable a refile : dans sa définition, cela spécifie que le fichier inclut des expressions régulières; dans notre cas, le caractère générique *.

/ 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 vrai fichier, j'ai nommé cela 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 signatures d = et s = de votre signature .

/ etc / mail / dkim_signing_table

*   keyname

Ce fichier associe une adresse simple trouvée dans l'en- tête De: à une clé de la table dkim_key_table. Dans ce cas, nous souhaitons que tous les courriers électroniques envoyés via ce serveur soient signés avec la même clé. Un caractère générique * est donc utilisé.

Adam J. Forster
la source
pour ceux qui obtiennent « aucune correspondance de table de signature à OpenDKIM » serverfault.com/q/569823/115907
kommradHomer
Si quelqu'un parvient à cette réponse (bonne réponse, d'ailleurs! M'a appris ce dont j'avais besoin) et cherche à envoyer à partir de deux domaines différents avec des clés différentes, cela peut être fait comme ceci: Fichier KeyTable: "tagone._domainkey.firstdomain.com firstdomain .com: tagone: /etc/opendkim/keys/firstdomain.com/tagone tagtwo._domainkey.seconddomain.com seconddomain.com:tagtwo:/etc/opendkim/keys/seconddomain.com/tagtwo "SigningTable:" * first firstdomain. com tagone._domainkey.firstdomain.com *@seconddomain.com tagtwo._domainkey.seconddomain.com "Chaque fichier est constitué de 2 lignes (les commentaires ne sauvegardent pas les sauts de ligne ici)
Sean Colombo Le
ou: SigningTable csl: * = keyname KeyTable csl: keyname = example.com: sélecteur: /etc/mail/selector.key
danblack
3

Ancien fil de discussion, mais peut-être que quelqu'un d'autre trouve cela utile de savoir que la version 2.x de opendkim fonctionne avec KeyTable au lieu de KeyList.

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

Vous pouvez en savoir plus sur l’implémentation de KeyTable sur la page de manuel opendkim: ( http://www.opendkim.org/opendkim.conf.5.html )

utilisateur203421
la source
Veuillez résumer l’article que vous avez lié, en citant tous les segments de code ou blocs de configuration pertinents. Les sites peuvent changer à l’avenir ou ne pas se charger pour un certain nombre de raisons.
89c3b1b8-b1ae-11e6-b842-48d705
2

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

La documentation du filtre DKIM est généralement installée au format unix man. 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

Je l'ai essayé sur Debian. Si ce n'est pas vraiment dans votre distribution, vous pouvez télécharger le fichier source tarball et le document facile à lire.

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

etc.

-

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

Vous pouvez donc utiliser exactement la même chose dans les deux enregistrements DNS de domaines différents.

hynekcer
la source