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 opendkim
Benutzer 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 k
fehlt. 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/KeyTable
und 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/SigningTable
und 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:
- Brandon Checketts Email Validator - http://www.brandonchecketts.com/emailtest.php (mein Favorit)
- Senden Sie eine signierte E-Mail an: check-auth@verifier.port25.com (auch mein Favorit)
Senden Sie eine signierte E-Mail an: sa-test@sendmail.net (Sie können alle Test-E-Mail-Adressen in das Feld An: einer einzelnen zu testenden ausgehenden Nachricht eingeben.)
Senden Sie eine signierte E-Mail an: autorespond+dkim@dk.elandsys.com <--- BROKEN !!! Verwenden Sie dieses nicht.
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!