Richten Sie DKIM (DomainKeys) für Ubuntu, Postfix und Mailman ein

22

Ich verwende Ubuntu 12.04 mit Postfix und Mailman. Ich möchte DKIM einrichten . DomainKeys Identified Mail (DKIM) ist der Nachfolger der "DomainKeys" von Yahoo. Es enthält Cisco Identified Mail.

Was sind die Schritte, um dies einzurichten?

Wird opendkim empfohlen?

Die einzige Referenz, die ich habe, ist HowToForge , aber ich ziehe es vor, hier Hilfe zu erhalten (auch wenn dies nur eine Bestätigung der Schritte unter diesem Link ist). Tatsächlich denke ich, dass die Informationen bei HowToForge veraltet sind, weil sie dkim-filter anstelle von opendkim erwähnen.

MountainX für Monica Cellio
quelle

Antworten:

39

openDKIM und Postfix auf Ubuntu Server 12.04LTS

Ich werde versuchen, dies noch einmal zu formatieren. Da es jedoch eine Aufforderung gab, meine Antwort zu veröffentlichen, wollte ich sie jetzt veröffentlichen, anstatt zu warten, bis ich Zeit hatte, sie richtig zu formatieren. Aus Zeitgründen habe ich meine gesamte Antwort in ein Blockzitat eingepackt. Ich hoffe diese Lösung ist hilfreich.

Das sind meine Referenzen:

und Wikipedia hat einen guten Eintrag zu diesem Thema

Zumindest benötigen Sie:

  • Root-Zugriff auf Ihren Mailserver
  • Zugriff zum Aktualisieren der DNS-Einträge für Ihre Domain

Installieren Sie opendkim aus den Repositories:

# sudo apt-get install opendkim opendkim-tools

Sie müssen sich entscheiden, welchen „Selektor“ Sie verwenden möchten. Der Selektor ist im Wesentlichen ein Wort, um den Schlüssel zu beschreiben, den Sie verwenden möchten. Hier werde ich den Selektor 201205 verwenden, da der Schlüssel im Mai 2012 gültig wurde (gerissen wie?). Ich gebe zwei Beispiele für Abwechslung, die hoffentlich Klarheit schaffen. Sie müssen nur EINEN Schlüssel generieren. Ich gebe jedoch beide Beispiele an, damit Sie sie vergleichen können.

  • 201205 (1. Schlüssel)
  • my_selector (2. Schlüssel)

Meine Domain wird sein example.com, aber ich werde eine Subdomain für mein zweites Beispiel verwenden:

  • example.com (1. Schlüssel)
  • mail.example.com (2. Schlüssel)

Ich habe mich entschieden, in folgendem Verzeichnis zu arbeiten:

# mkdir /etc/opendkim/
# cd /etc/opendkim

Generieren Sie die Schlüssel im aktuellen Verzeichnis unter Verwendung des von Ihnen ausgewählten Selektors und der Domäne.

# opendkim-genkey -s 201205 -d example.com

Möglicherweise müssen Sie den Eigentümer ändern oder nicht. Weitere Informationen zu den Eigentümern und Berechtigungen finden Sie in meinem Beispiel für den zweiten Schlüssel weiter unten.

Zuerst sollten Sie überprüfen, ob ein opendkimBenutzer vorhanden ist (Ihre Benutzer- / Gruppen-IDs können unterschiedlich sein):

# grep opendkim /etc/passwd
opendkim:x:108:117::/var/run/opendkim:/bin/false

Und das müssen Sie wahrscheinlich tun:

# chmod 700 /var/run/opendkim

HINWEIS: Diese beiden nächsten Befehle werden unter Ubuntu 12.04 NICHT benötigt. Wenn der obige Befehl jedoch nicht zeigt, dass der Benutzer opendkim ordnungsgemäß eingerichtet wurde, gehen Sie folgendermaßen vor:

# useradd -r -g opendkim -G mail -s /sbin/nologin -d /var/run/opendkim -c "OpenDKIM" opendkim
# chown opendkim:opendkim 201205.private   
# cat 201205.private 
-----BEGIN RSA PRIVATE KEY-----
ABCCXQ...[long string]...SdQaZw9
-----END RSA PRIVATE KEY-----

Überprüfen Sie nun den öffentlichen Schlüssel und stellen Sie fest, dass ein Fehler vorliegt (in openDKIM 2.5.2 unter Ubuntu 12.04)! Wo es enthält, ;=rsa;sollte es enthalten ;k=rsa;. Das kfehlt. Bitte legen Sie es ein.

# cat 201205.txt
201205._domainkey IN TXT "v=DKIM1;=rsa; p=WIGfM..[snip]..QIDIAB" ; ----- DKIM 201205 for example.com

Nachdem es repariert wurde, sieht es so aus:

201205._domainkey IN TXT "v=DKIM1;k=rsa; p=WIGfM..[snip]..QIDIAB" ; ----- DKIM 201205 for example.com

Darüber hinaus müssen Sie wahrscheinlich die Semikolons wie folgt zu entkommen. Wenn Sie den Endkommentar nicht möchten, löschen Sie ihn einfach. Beachten Sie auch, dass Sie das t = y-Flag hinzufügen sollten, um anzuzeigen, dass empfangende Server DKIM testen, aber noch nicht aktiv verwenden. Sie haben einen brauchbaren Ressourceneintrag:

201205._domainkey IN TXT "v=DKIM1\;k=rsa\;t=y\;p=WIGfM..[snip]..QIDIAB"

Sie müssen den Inhalt des oben genannten öffentlichen Schlüssels auf Ihrem autorisierenden DNS-Server veröffentlichen. Ich empfehle die Verwendung eines TXT-Datensatzes. Es scheint ein wenig umstritten zu sein, ob ein SPF-Datensatz oder beide Typen verwendet werden sollen. Nach einigem Lesen habe ich mich entschieden, mich ausschließlich an den TXT-Datensatztyp zu halten, obwohl ich nicht glaube, dass dies das letzte Wort zu diesem Thema ist.

Sie sollten eine kurze TTL (Time to Live) verwenden, damit Sie den Schlüssel ändern können, ohne darauf warten zu müssen, dass er sich über DNS verbreitet. Ich habe 180 Sekunden gebraucht.

Das zweite Beispiel für die Generierung eines Schlüsselpaares war für mich etwas kniffliger. Ich werde beschreiben, was ich getan habe. Das erste Element ist, dass ich den Domain-Wert "example.com" verwendet habe, obwohl der Schlüssel für "mail.example.com" verwendet wird. Ich bin durch Versuch und Irrtum dazu gekommen. Es funktioniert, während "mail.example.com" nicht funktioniert hat. Die Gründe dafür sind mir leider nicht bekannt. Dies ist der einzige Unterschied, auf den ich gestoßen bin, aber es war beunruhigend genug, dass ich das Gefühl hatte, meine Erfahrungen mit der Verwendung von Subdomains dokumentieren zu müssen. Keines der anderen Tutorials für Anfänger, die ich gefunden habe, hat dies getan. Generiere einen zweiten Schlüssel:

opendkim-genkey -s my_selector -d example.com

Überprüfen Sie wie oben den Besitz und die Berechtigungen des privaten Schlüssels. So sollten sie aussehen:

# ls -la /etc/opendkim
-rw-------  1 opendkim opendkim  891 May 10 07:44 my_selector.private

Überprüfen Sie den veröffentlichten DNS-Eintrag mit dig. Es sollte genau das zurückgeben, was Sie im Ressourceneintrag (RR) eingegeben haben.

$ dig 201205._domainkey.example.com txt +short
"v=DKIM1\;k=rsa\;t=y\;p=WIGfM..[snip]..QIDIAB"

Testen Sie nun den Schlüssel. Bei den folgenden Befehlen wird davon ausgegangen, dass Sie sich in dem Verzeichnis befinden, in dem sich der Schlüssel befindet (/ etc / opendkim für mich).

# opendkim-testkey -d example.com -s 201205 -k 201205.private -vvv
opendkim-testkey: key loaded from /etc/opendkim/201205.private
opendkim-testkey: checking key '201205._domainkey.example.com'
opendkim-testkey: key not secure
opendkim-testkey: key OK

Diese Ergebnisse werden erwartet. Der "Schlüssel nicht sicher" zeigt keinen Fehler an. Es ist zu erwarten, dass DNSSSEC nicht verwendet wird. DNSSEC kommt, aber meiner Lektüre nach ist es noch nicht bereit für die Hauptsendezeit.

Beispiel mit 2. Schlüssel:

# opendkim-testkey -d example.com -s my_selector -k /etc/opendkim/my_selector.private -vvvv
opendkim-testkey: key loaded from /etc/opendkim/my_selector.private
opendkim-testkey: checking key 'my_selector._domainkey.example.com'
opendkim-testkey: key not secure
opendkim-testkey: key OK

Beachten Sie, dass opendkim meldet, dass der Schlüssel nicht sicher ist. Dies hängt damit zusammen, dass DNSSEC auf meinem DNS-Server nicht implementiert ist und theoretisch jemand die DNS-Suche abfangen und durch seinen eigenen Schlüssel ersetzen kann.

Bearbeiten Sie die OpenDKIM-Konfigurationsdatei:

# nano /etc/opendkim.conf
# cat /etc/opendkim.conf
# This is a basic configuration that can easily be adapted to suit a standard
# installation. For more advanced options, see opendkim.conf(5) and/or
# /usr/share/doc/opendkim/examples/opendkim.conf.sample.
#
Domain                  example.com
KeyFile                 /etc/opendkim/201205.private
Selector                201205
#
# Commonly-used options
Canonicalization        relaxed/simple
Mode                    sv
SubDomains              yes
# Log to syslog
Syslog                  yes
LogWhy                  yes
# Required to use local socket with MTAs that access the socket as a non-
# privileged user (e.g. Postfix)
UMask                   022
UserID                  opendkim:opendkim
#
KeyTable                /etc/opendkim/KeyTable
SigningTable            /etc/opendkim/SigningTable
ExternalIgnoreList      /etc/opendkim/TrustedHosts
InternalHosts           /etc/opendkim/TrustedHosts
#
Socket                  inet:8891@localhost
#EOF

Wenn Sie mein zweites Schlüsselbeispiel mit der Zieldomäne "mail.example.com" verwenden, verweist der Eintrag immer noch nur auf die Hauptdomäne:

Domain                  example.com
KeyFile                 /etc/dkim/my_selector.private
Selector                my_selector 
-----

Anmerkung aus einer meiner Quellen: Wenn Sie mehrere Instanzen von Postfix ausführen, müssen Sie diese für jede Instanz (oder die, die Sie mit opendkim verwenden möchten) zur Datei opendkim.conf hinzufügen.

Erstellen Sie eine Datei mit Ihrem Texteditor /etc/opendkim/TrustedHosts:

Fügen Sie Domänen, Hostnamen und / oder IP-Adressen hinzu, die von OpenDKIM verarbeitet werden sollen. Localhost nicht vergessen.

127.0.0.1
localhost
example.com
mail.example.com
192.168.1.100 #(IP address of your server, if applicable)

(Die letzte Zeile oben wird wahrscheinlich nicht benötigt. Wenn Sie eine IP-Adresse zum Hinzufügen haben, stellen Sie sicher, dass Sie Ihre eigene verwenden, nicht das obige Beispiel.)

Bearbeiten /etc/default/opendkim:

Kommentieren Sie diese Zeile aus und verwenden Sie Port 8891:

SOCKET="inet:8891@localhost" # listen on loopback on port

Stellen Sie sicher, dass Ihre Firewall (iptables) Loopback auf localhost zulässt:

sudo iptables -A INPUT -i lo -j ACCEPT

Erstellen Sie als Nächstes eine Datei mit Ihrem Texteditor /etc/opendkim/KeyTableund fügen Sie die Domäne zur KeyTable hinzu

Zeile hinzufügen:

#EXAMPLE showing my 2nd key:
my_selector._domainkey.example.com example.com:my_selector:/etc/opendkim/my_selector.private

Weiter Erstellen Sie eine Datei mit Ihrem Texteditor /etc/opendkim/SigningTableund fügen Sie die Domäne der SigningTable hinzu

Ich zeige beide Beispiele. Beachten Sie, dass ich für meinen 2. Schlüssel jetzt den vollständigen Domainnamen "mail.example.com" verwenden muss:

example.com 201205._domainkey.example.com
mail.example.com my_selector._domainkey.example.com

Beachten Sie, dass bei OpenDKIM 2.0.1-Domänennamen die Groß- und Kleinschreibung beachtet wird. In diesem Beispiel verwenden wir eine neuere Version von OpenDKIM, und dies scheint kein Problem zu sein.

Postfix konfigurieren. Bearbeiten Sie /etc/postfix/main.cf und fügen Sie die Zeilen am Ende hinzu

milter_default_action = accept
milter_protocol = 2
smtpd_milters=inet:localhost:8891
non_smtpd_milters=inet:localhost:8891

Ändern Sie auch den Hostnamen:

#myhostname = localhost         #original
myhostname = mail.example.com

Sie sollten auch den entsprechenden Eintrag in / etc / hosts ändern. Diese Änderungen werden nach einem Neustart wirksam (obwohl Sie sie sofort mit dem Befehl: festlegen können hostname NEW_NAME).

Starten Sie postfix und opendkim neu, wenn Sie nicht neu gestartet haben:

# service opendkim restart
Restarting OpenDKIM: opendkim.
# service postfix restart
 * Stopping Postfix Mail Transport Agent postfix   [ OK ]
 * Starting Postfix Mail Transport Agent postfix   [ OK ] 

Testen

Der beste Weg, um zu überprüfen, ob Ihre signierte Mail authentifiziert wird und ob Ihre DNS-Einträge richtig eingerichtet sind, ist die Nutzung eines der kostenlosen Testdienste. Ich habe diese verwendet:

Jede dieser Anweisungen gibt Aufschluss darüber, ob alles ordnungsgemäß funktioniert, und gibt bei Bedarf Hinweise zur Fehlerbehebung.

Wenn Sie ein Google Mail-Konto haben, können Sie dort auch eine signierte Nachricht für einen schnellen und einfachen Test senden.

Wenn Sie zufrieden sind, können Sie das Test-Flag im DNS-TXT-Eintrag entfernen und die TTL erhöhen.

Getan!

MountainX für Monica Cellio
quelle
Funktioniert perfekt auf präzise. Guter Durchgang danke.
Aki
Verwenden Sie -b 1024, um Schlüssel mit 1024 Bits zu generieren. Es ist ein Muss, um mein Google Mail zu unterschreiben!
Prashant Singh
1
Bitte beachten Sie, dass in opendkim.conf die drei Parameter "Domain", "KeyFile" und "Selector" bei Verwendung von "SigningTable" und "KeyTable" ignoriert werden. Ich bin mir nicht sicher, ob sich dies irgendwann geändert hat, aber es ist erwähnenswert ( opendkim.org/opendkim.conf.5.html )
billynoah
0

Dies ist eine gute Anleitung.

Es wird erklärt, dass opendkim in der Tat empfohlen wird und dass die Schritte zur Implementierung Ihrer dkim-Signatur dieselben sind wie bei dkim-filter.

dkim-milter wird nicht mehr weiterentwickelt. Der ursprüngliche Autor hat die Quelle gespalten und entwickelt nun opendkim. Für Lucid und spätere Releases wird opendkim dem dkim-filter vorgezogen. Die Anweisungen auf dieser Seite sollten identisch sein (nur mit den erforderlichen angepassten Paketnamen).

BTW Domainkeys ist der veraltete Vorgänger von DKIM. Fügen Sie Ihrer DNS-Zone TXT-Einträge für SPF und DKIM hinzu, es ist jedoch nicht mehr erforderlich, sich mit Domainschlüsseln zu befassen.

iainH
quelle
Der Artikel, den Sie verlinkt haben, ist veraltet. opendkim ist das Paket, das Sie jetzt verwenden können. Ich arbeite daran, es einzurichten ...
MountainX für Monica Cellio
Ich würde ein Update von Ihren Erfahrungen schätzen, da ich im Begriff bin, einen Server von Exim4 auf Postfix-Dovecot umzustellen, und nach aktuellen Anleitungen suchen werde.
iainH
Ich habe meine Lösung gepostet, aber ich hatte keine Zeit, sie zu formatieren. Sie (oder jeder andere) können es gerne formatieren. Da meine Notizen jedoch sehr umfangreich sind, wollte ich, dass Sie unverzüglich darauf zugreifen können. Ich hoffe sie sind hilfreich.
MountainX für Monica Cellio
-1

http://wiki.zimbra.com/wiki/Configuring_for_DKIM_Signing

Ich achte immer darauf, ein paar Anleitungen zu irgendetwas zu überkreuzen. Dieses Tutorial zum Einrichten funktioniert, ich habe es nur verifiziert und es validiert dieses. Möglicherweise möchten Sie jedoch eine Beispiel-TXT anzeigen, damit der Domäneneintrag detailliert wird. Die Leute könnten verwirrt sein und explizit alles vom Schlüssel selbst in den p-Wert setzen, was ich nicht ganz sicher bin, ob es richtig ist. dh ... einschließlich ----- BEGIN PUBLIC KEY ----- und ----- END PUBLIC KEY -----. Das kann einige verwirren. Stellen Sie einfach sicher, dass Sie nur den Verschlüsselungsteil und nicht die Markierungen einfügen.

Tom
quelle
3
Willkommen bei Ask Ubuntu! Während dies theoretisch die Frage beantworten mag, wäre es vorzuziehen , die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen.
Braiam