DKIM signiert ausgehende Mail von jeder Domain (mit Postfix und Ubuntu)

40

Ich habe DKIM auf meinem Mailserver eingerichtet (Postfix und Ubuntu), damit es ausgehende E-Mails signiert. Ich habe diese Anweisungen verwendet: https://help.ubuntu.com/community/Postfix/DKIM

Ich benötige es jedoch, um E-Mails von einer beliebigen Domain (in der Absenderadresse) und nicht nur von meiner eigenen zu signieren. Ich baue einen E-Mail-Newsletter-Service auf und Kunden senden ihre eigene E-Mail über den Server.

Zuerst habe ich in /etc/dkim-filter.conf "Domain *" gesetzt. Dadurch wurde es möglich, die DKIM-Header in alle ausgehenden E-Mails aufzunehmen, unabhängig von der Domain.

Die Überprüfung schlägt jedoch in Google Mail fehl, da die Domain in der Absenderadresse und nicht in meiner Domain (und im DNS-Eintrag) überprüft wird. Weiß jemand, wie man das macht?

Brian Armstrong
quelle

Antworten:

41

Ok, ich habe es alleine geschafft, aber ich wollte die Schritte hier für die Nachwelt posten, weil es keine Dokumentation darüber gab (die ich finden konnte) und es praktisch erraten und überprüfen war.

Nachdem ich "Domain *" wie oben beschrieben eingestellt habe, würde es so signieren:

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=

Beachten Sie die "d = clientdomain.com". Dies wurde basierend auf der Absenderadresse in der E-Mail generiert, wobei die Absenderadresse etwa "[email protected]" lautete. Wenn die Domäne des Clients und nicht meine überprüft wird, ist offensichtlich kein DNS-TXT-Eintrag vorhanden, und die Überprüfung schlägt fehl.

Daher habe ich in dieser Dokumentation herausgefunden, dass Sie einen KeyList-Parameter festlegen können. http://manpages.ubuntu.com/manpages/hardy/man5/dkim-filter.conf.5.html

Es hat nicht wirklich beschrieben, was ich tun wollte, aber ich dachte, ich würde damit spielen. Ich habe KeyFile auskommentiert und KeyList auf "/etc/mail/dkim_domains.key" gesetzt. Dies ist ein beliebiger Dateiname, den ich mir ausgedacht habe. Ich habe dann diese Datei erstellt und diese darin abgelegt "*: feedmailpro.com: /etc/mail/dkim.key". Dies teilt es für jede Client-Domain mit, signiert es mit meiner Domain (feedmailpro.com) und verwendet die Datei dkim.key.

DKIM und Postfix neu gestartet

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

Dies ist der Schlüssel, der beim Senden einer Test-E-Mail generiert wurde.

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=

Verbesserung, Sie sehen, dass d = now auf meine Domain gesetzt ist (obwohl die Absenderadresse der E-Mail nicht meine Domain war). Allerdings wurde s = auf "dkim.key" anstatt auf den Selektor geändert, den ich in der dkim-filter.conf gewählt habe. In den ursprünglichen Setup-Anweisungen würde ich den Selektor auf "mail" setzen. Das war komisch, aber ich bemerkte, dass der Dateiname meines Schlüssels dkim.key geändert wurde.

Also habe ich "/etc/mail/dkim.key" in "/ etc / mail / mail" umbenannt. Der Verweis darauf in "/etc/mail/dkim_domains.key" wurde ebenfalls aktualisiert.

Starten Sie dkim-filter und postfix erneut wie oben beschrieben und jetzt funktioniert es. Hier ist die letzte Überschrift, die mit der richtigen Auswahl richtig signiert (anscheinend basierend auf dem Dateinamen des Schlüssels).

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=

Jetzt ist s = mail richtig und d = feedmailpro.com ist richtig. Es klappt!

Insgesamt war dies weitaus schwieriger als erwartet und es schien keine Dokumentation zu geben, wie dies zu tun ist (Signieren für alle ausgehenden Domains), aber ich denke, es ist Open-Source-Software, also kann ich mich nicht beschweren.

Ein letzter Hinweis: Um zu überprüfen, ob der TXT-DNS-Eintrag korrekt eingerichtet wurde, können Sie einen Befehl wie bei Ihrer Domain ausführen

dig mail._domainkey.feedmailpro.com TXT

Möglicherweise muss dig installiert werden (sudo apt-get install dig). Wenn Sie den DNS-Eintrag mit Slicehost Manager hinzufügen, geben Sie den TXT-Eintrag folgendermaßen ein.

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

Ich verstehe nicht wirklich, warum der Name auf "mail._domainkey" ohne einen Punkt am Ende oder ohne meine Domain wie "mail._domainkey.feedmailpro.com" gesetzt ist. Aber wie auch immer, es scheint zu funktionieren, also bin ich glücklich.

Wenn Sie versuchen, dies zu duplizieren, finden Sie hier die Anweisungen, mit denen ich begonnen habe: https://help.ubuntu.com/community/Postfix/DKIM

Brian Armstrong
quelle
2
Danke, dass du das hier aufstellst, es hilft anderen (wie mir) raus :)
thomasrutter
Herzlich willkommen Thomas!
Brian Armstrong
Wow, das hat mir sehr geholfen. Ich habe mir wegen des "s = dkim.key" den Kopf geschlagen, bis ich auf deinen Beitrag stieß!
3.
Eine Sache, die der Leitfaden auf ubuntu.com nicht erwähnt, ist, dass Sie, sobald Sie es zum Laufen gebracht haben, t = y in t = n im TXT-Datensatz ändern, um anzugeben, dass es sich nicht um einen Test handelt.
3.
Es gibt einige gute Ressourcen gibt für den SigningTable verwenden, etc. Zum Beispiel blog.tjitjing.com/index.php/2012/03/... (ausgezeichnet) und sogar die opendkim readme, opendkim.org/opendkim-README
rfay
15

Inspiriert von Brian Armstrongs Antwort für dkim-filter habe ich das hier für OpenDKIM gemacht .

/etc/opendkim.conf

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

Beachten Sie, dass SigningTable refile hat : In seiner Definition gibt dies an, dass die Datei reguläre Ausdrücke enthält. in unserem Fall der Platzhalter *.

/ etc / mail / dkim_key_table

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

Hier keyname wird verwendet , um den Schlüssel zwischen dieser Datei übereinstimmen und der dkim_signing_table Datei. In meiner realen Datei habe ich dies genauso benannt wie meinen Selektor.

example.com und der Selektor sollten ersetzt werden. Dabei handelt es sich um die Domain und den Selektor, die bzw. den Sie in d = und s = Ihrer Signatur verwenden möchten .

/ etc / mail / dkim_signing_table

*   keyname

Diese Datei ordnet eine einfache Adresse zu, die im Header Von: einem Schlüssel in der Tabelle dkim_key_table zugeordnet ist. In diesem Fall möchten wir, dass alle über diesen Server gesendeten E-Mails mit demselben Schlüssel signiert werden, sodass ein Platzhalter * verwendet wird.

Adam J. Forster
quelle
für diejenigen, die "keine Übereinstimmung der Signiertabelle in OpenDKIM" erhalten serverfault.com/q/569823/115907
kommradHomer
Wenn jemand zu dieser Antwort kommt (großartige Antwort, übrigens! Hat mir beigebracht, was ich brauchte) und von zwei verschiedenen Domänen mit unterschiedlichen Schlüsseln senden möchte, kann dies folgendermaßen geschehen: KeyTable-Datei: "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:" * @ firstdomain. com tagone._domainkey.firstdomain.com *@seconddomain.com tagtwo._domainkey.seconddomain.com "Jede Datei besteht aus 2 Zeilen (Kommentare speichern keine Zeilenumbrüche hier)
Sean Colombo
oder: SigningTable csl: * = Schlüsselname KeyTable csl: Schlüsselname = example.com: Selector: /etc/mail/selector.key
danblack
3

Ein alter Thread, aber vielleicht hat jemand anderes, der dies findet, eine Chance zu wissen, dass die 2.x-Version von opendkim mit KeyTable anstelle von KeyList funktioniert.

Sie können Ihre KeyList-Datei mit dem Tool opendkim-convert-keylist konvertieren ( http://manpages.ubuntu.com/manpages/lucid/man8/opendkim-convert-keylist.8.html ).

Weitere Informationen zur Implementierung von KeyTable finden Sie auf der opendkim-Manpage: ( http://www.opendkim.org/opendkim.conf.5.html )

user203421
quelle
Fassen Sie den Artikel, den Sie verlinkt haben, unter Angabe relevanter Codesegmente oder Konfigurationsblöcke zusammen. Websites können sich in Zukunft ändern oder aus einer Reihe von Gründen nicht geladen werden.
89c3b1b8-b1ae-11e6-b842-48d705
2

Ich verstehe nicht wirklich, warum der Name ohne Punkt auf "mail._domainkey" gesetzt ist

Die Dokumentation für den DKIM-Filter wird normalerweise im Unix-Man-Format installiert. Nur Google weiß es :-) Ich hatte auch ein Problem.

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

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

Ich habe es auf Debian versucht. Wenn es nicht in Ihrer Distribution enthalten ist, können Sie das Quell-Tarball herunterladen und das Dokument einfach lesen.

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

usw.

-

Ich verstehe nicht wirklich, warum der Name ohne Punkt auf "mail._domainkey" gesetzt ist

Damit können Sie in beiden DNS-Einträgen unterschiedlicher Domains genau das Gleiche verwenden.

Hynekcer
quelle