Postfix – DKIM und SPF einrichten
Zusätzlich zum Postfix Header anonymisieren Beitragm öchte ich „kurz und knackig“ beschreiben, wie ihr DKIM für Postfix und SPF einrichtet.
Inspiriert wurde ich durch diese beiden Artikel:
https://www.debinux.de/…/dkim-verstaendnis-konfiguration-und-installation-von-opendkim/
https://kofler.info/dkim-konfiguration-fuer-postfix/
… vielen Dank !
Weitere Informationen zu den Themen findet ihr wie immer auf Wikipedia: DKIM / SPF
Warum sind SPF und DKIM wichtig? Klar jeder Spammer kann sich diese ebenfalls einrichten. Der Hauptgrund ist und bleibt, dass die „Großen“ wie GMX und Web.de die Mails von unserem Mailserver nicht als Spam flaggen.
Punkt 1: SPF im Nameserver hinterlegen
Mit dem SPF Generator kannst du dir einfach und schnell den passenden TXT-Record für deine Domain generieren.
Dieses Beispiel sagt dem Mailserver auf der anderen Seite, dass der Computer mit der IP-Adresse aus dem A-Record und dem MX-Record berechtigt ist diese Mail der Domain zu schicken.
Setze in den Nameservereinstellungen deiner Domain folgenden TXT-Record Eintrag:
1 | v=spf1 a mx ~all |
Weitere Domains und IP-Adressen kannst du in den Erweiterten Optionen des Generators hinzufügen.
Sollte es Probleme bei Formularen oder Weiterleitungen geben, empfiehlt es sich ~all in ?all abzuändern. Mehr dazu im Wikipedia Beitrag.
Punkt 2: Installation von DKIM
Wir installieren die folgenden Pakete. In diesem Beispiel unter Debian Jessie.
1 | apt-get install opendkim opendkim-tools |
Nun legen wir die nötigen Ordner an und vergeben Rechte.
1 2 3 | mkdir -p /etc/opendkim/keys chown -R opendkim. /etc/opendkim chmod go-rw /etc/opendkim/keys |
Punkt 3: Postfix main.cf erweitern
Der Postfix erhält ein paar Milter Zeilen um OpenDKIM einzubinden.
1 2 3 4 5 | # OpenDKIM milter_protocol = 6 milter_default_action = accept non_smtpd_milters=inet:127.0.0.1:12345 smtpd_milters=inet:127.0.0.1:12345 |
Punkt 4: OpenDKIM Config anpassen
Die Konfigurationsdatei kann unter Debian so übernommen werden. Wie gesagt „kurz und knackig“ – mehr Infos unter den oben genannten Links.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | # OpenDKIM agiert als Mail Filter (= Milter) in den # Modi signer (s) und verifier (v) und verwendet eine # Socket-Datei zur Kommunikation (alternativ: lokaler Port) Mode sv #Socket local:/var/run/opendkim/opendkim.sock Socket inet:12345@localhost # OpenDKIM verwendet diesen Benutzer bzw. # diese Gruppe UserID opendkim:opendkim UMask 002 PidFile /var/run/opendkim/opendkim.pid # OpenDKIM bei Problemen neustarten, # aber max. 10 mal pro Stunde AutoRestart yes AutoRestartRate 10/1h # Logging (wenn alles funktioniert eventuell reduzieren) Syslog yes SyslogSuccess yes LogWhy yes # Verfahren, wie Header und Body durch # OpenDKIM verarbeitet werden sollen. Canonicalization relaxed/relaxed # interne Mails nicht mit OpenDKIM verarbeiten ExternalIgnoreList refile:/etc/opendkim/trusted InternalHosts refile:/etc/opendkim/trusted # welche Verschlüsselungs-Keys sollen für welche # Domains verwendet werden # (refile: für Dateien mit regulären Ausdrücke) SigningTable refile:/etc/opendkim/signing.table KeyTable /etc/opendkim/key.table # diesen Signatur-Algorithmus verwenden SignatureAlgorithm rsa-sha256 # Always oversign From (sign using actual From and a null From to prevent # malicious signatures header fields (From and/or others) between the signer # and the verifier. From is oversigned by default in the Debian pacakge # because it is often the identity key used by reputation systems and thus # somewhat security sensitive. OversignHeaders From |
Punkt 5: Interne Mails ohne Signatur
In der trusted
Config tragen wir IP-Adressen und Domainnamen der von uns vertrauten Server ein. Denn diese Server benötigen keine DKIM Signatur.
1 2 3 4 5 | 127.0.0.1 ::1 localhost mail mail.adminforge.de |
Punkt 6: Schlüsselzuordnung der einzelnen Domains
Es lohnt sich auch bei nur einer Domain direkt eine Tabelle anzulegen die sagt welcher Key zu welcher Domain gehört. Postfix könnte ja Jederzeit eine neue Domain vom Admin erhalten 🙂
1 2 3 | # Domain Schlüssel *@adminforge.de adminforge *@weiteredomain.de weiteredomain |
1 2 3 | # Schlüssel Domain:Selektor:Private Key Pfad adminforge adminforge.de:201705:/etc/opendkim/keys/adminforge.private weiteredomain weiteredomain.de:201705:/etc/opendkim/keys/weiteredomain.private |
Punkt 7: DKIM Schlüssel generieren
Für die Erstellung eines neuen Key-Paares geben wir bei -d die Domain, -b die Bitrate (mehr als 2048 könnte zu Problemen führen) und -s den Selektor (dieser steht im DNS-TXT Feld) an.
1 | opendkim-genkey -d adminforge.de -b 2048 -r -s 201705 |
Wir erhalten die beiden Dateien mit Public-Key und Private-Key.
1 2 | 201705.txt 201705.private |
Wir verschieben und benennen diese um.
1 2 3 | mv 201705.txt keys/adminforge.txt mv 201705.private keys/adminforge.private chown -R opendkim. /etc/opendkim |
Punkt 8: DNS-TXT Eintrag hinzufügen
Wir fügen den erstellten Public-Key in unserem Nameserver als TXT-Eintrag hinzu.
1 2 3 | 201705._domainkey IN TXT "v=DKIM1; k=rsa; s=email; " "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtA5Hg8C1AesLJeCdhX0Y6sVH1Tkc2QHHkqUaxrMTkU7rJ3OCsimP3QhmTR3j8DS4o7NW3Sc5HEfxzVGHznSChYF+jhulJV5BX9Qo9McRtNLxeUB5M0+PXi8ylfuwRoc8aX82ly1MnA0HkaUYOgWWYIM4i6ixi6BazHlu39A2zPUe427G5vCl54rI06K9n1QMdOWWPx9WRE275h" "spMYKq0NymSncjWoQAOhPC2GW7imxG0rJfQGaxKrx/IlRuVnsYgDF+kSuOQ86ZO6ZiqkNrlhrdrgDAenxdSFPLyepkE3F40caHrimNdogwLYRVVMd3vjQYyPo855yDC7jDAPftPQIDAQAB" |
Die ‚ “ ‚ könnt ihr entfernen und eine lange Zeile draus machen.
1 | 201705._domainkey IN TXT v=DKIM1; k=rsa; s=email; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtA5Hg8C1AesLJeCdhX0Y6sVH1Tkc2QHHkqUaxrMTkU7rJ3OCsimP3QhmTR3j8DS4o7NW3Sc5HEfxzVGHznSChYF+jhulJV5BX9Qo9McRtNLxeUB5M0+PXi8ylfuwRoc8aX82ly1MnA0HkaUYOgWWYIM4i6ixi6BazHlu39A2zPUe427G5vCl54rI06K9n1QMdOWWPx9WRE275hspMYKq0NymSncjWoQAOhPC2GW7imxG0rJfQGaxKrx/IlRuVnsYgDF+kSuOQ86ZO6ZiqkNrlhrdrgDAenxdSFPLyepkE3F40caHrimNdogwLYRVVMd3vjQYyPo855yDC7jDAPftPQIDAQAB |
Punkt 9: Dienste Neustarten & Prüfen
Dienste Neustarten.
1 2 | systemctl restart opendkim.service systemctl restart postfix.service |
Wir prüfen ob der DNS-TXT Eintrag korrekt hinterlegt ist. Wenn ein „key OK“ erscheint passt alles. Ein „key not secure“ ist ok und erscheint wenn kein DNSSEC verwendet wird.
1 2 3 4 5 | opendkim-testkey -d adminforge.de -s 201705 -vvv opendkim-testkey: using default configfile /etc/opendkim.conf opendkim-testkey: checking key '201705._domainkey.adminforge.de' opendkim-testkey: key not secure opendkim-testkey: key OK |
Einen sehr guter Test ist ein Senden einer Testmail an die angegebene Mail-Adresse auf mail-tester.com.
Das Betreiben der Dienste, Webseite und Server machen wir gerne, kostet aber leider auch Geld. Unterstütze unsere Arbeit mit einer Spende. |
Und wo genau gehört diese „v=spf1 a mx ~all“ hin? Wenn ich solche Details wissen würde, dann bräuchte ich wohl kaum diese Anleitung. Jetzt kann ich erst recht eine andere Anleitung suchen.
Danke habe deine Kritik angenommen 😉
Du müsstest das in den Nameservereinstellungen deiner Domain als MX Record setzen.
Kleine Ammerkung:
„v=spf1 a mx ~all“ muss aber als TXT-Record in den Nameservereinstellungen gesetzt werden, nicht als MX-Record.
ups na klar TXT, habs korrigiert.
Hallo DOMINION,
vielen Dank erst einmal für diese super Beschreibung, jedoch habe ich ein kleines Problem und zwar wird bei der Prüfung angezeigt, dass der Schlüssel vermisst wird: opendkim-testkey: key missing
Ich habe die Dateien alle noch mal kontrolliert, habe aber keinen Fehler gefunden. Ich habe den Selektor anders benannt aber auch darauf geachtet, dass ich überall den Selektor angepasst habe.
Könntest du mir vielleicht eine Richtung zeigen, was ich noch kontrollieren könnte?
Danke
Gruß
Basti
Habe noch etwas ausprobiert und jetzt klappt es. Ich hatte zwei Signaturen aktiv. Liegt das eventuell an der „key.table“?
Ich habe in der Datei /etc/postfix/master.cf folgendes geändert:
-o receive_override_options=no_header_body_checks
in
-o receive_override_options=no_address_mappings,no_milters
Gruß
Basti