Nach Abschluss von Teil 1 und Teil 2 haben wir einen funktionierenden Postfix-SMTP-Server und Dovecot-IMAP-Server. Wir können E-Mails mit einem Desktop-E-Mail-Client senden und empfangen. Obwohl ich korrekt MX erstellt habe , A und PTR Rekord, meine E-Mails wurden von Gmail und Outlook Mail als Spam markiert. In diesem Teil sehen wir uns also an, wie Sie die E-Mail-Zustellung an den Posteingang des Empfängers verbessern können, indem Sie SPF und DKIM auf dem CentOS/RHEL-Server einrichten.
Was sind SPF- und DKIM-Einträge?
SPF und DKIM sind zwei Arten von TXT-Einträgen im DNS, die dabei helfen können, E-Mail-Spoofing zu verhindern und legitime E-Mails in den Posteingang des Empfängers statt in den Spam-Ordner zuzustellen. Wenn Ihre Domain durch E-Mail-Spoofing missbraucht wird, landen Ihre E-Mails wahrscheinlich im Spam-Ordner des Empfängers, wenn der Empfänger Sie nicht im Adressbuch hinzugefügt hat.
SPF (Sender Policy Framework)-Eintrag gibt an, welche Hosts oder IP-Adressen E-Mails im Namen einer Domain senden dürfen . Sie sollten nur Ihrem eigenen E-Mail-Server oder dem Server Ihres ISP erlauben, E-Mails für Ihre Domain zu senden.
DKIM (DomainKeys Identified Mail) verwendet einen privaten Schlüssel, um eine Signatur zu E-Mails hinzuzufügen, die von Ihrer Domain gesendet werden . Empfangende SMTP-Server verifizieren die Signatur mithilfe des entsprechenden öffentlichen Schlüssels, der in den DNS-Einträgen Ihrer Domain veröffentlicht wird.
Erstellen Sie einen SPF-Eintrag im DNS
Erstellen Sie in Ihrer DNS-Verwaltungsoberfläche einen neuen TXT-Eintrag wie unten.
TXT @ v=spf1 mx ~all
Wo:
- TXT gibt an, dass es sich um einen TXT-Eintrag handelt.
- Geben Sie @ ein im Namensfeld, um den Namen der Apex-Domäne darzustellen.
- v=spf1 gibt an, dass dies ein SPF-Eintrag ist und die SPF-Eintragsversion SPF1 ist.
- mx bedeutet, dass alle in den MX-Einträgen aufgeführten Hosts E-Mails für Ihre Domain senden dürfen und alle anderen Hosts nicht zugelassen sind.
- ~alle gibt an, dass E-Mails von Ihrer Domain nur von Hosts kommen sollen, die im SPF-Eintrag angegeben sind. Von anderen Hosts gesendete E-Mails werden als nicht vertrauenswürdig gekennzeichnet. Mögliche Alternativen sind
+all
,-all
,?all
, aber sie werden selten verwendet.
-all
bedeutet, dass E-Mails, die von nicht zugelassenen Hosts gesendet werden, abgelehnt werden sollten, um niemals im Posteingang oder Spam-Ordner des Empfängers zu landen. Ich habe gesehen, dass es von facebook.com verwendet wird, aber wir brauchen im Allgemeinen keine so strenge Richtlinie.
Einige Leute denken vielleicht, dass -all
wird besser sein, da es E-Mails von nicht vertrauenswürdigen Hosts ablehnt. Nun, mit -all
in Ihrer SPF-Richtlinie dazu führen kann, dass Ihre eigenen E-Mails abgelehnt werden, wenn der Empfänger zwei SMTP-Server hat und der Haupt-SMTP-Server offline geht, werden Ihre E-Mails vorübergehend auf dem Backup-SMTP-Server gespeichert. Wenn der Haupt-SMTP-Server wieder online geht, wird die E-Mail vom Backup-SMTP-Server an den Haupt-SMTP-Server weitergeleitet. Da Sie den Backup-SMTP-Server des Empfängers nicht in Ihrer SPF-Richtlinie aufgeführt haben, wird die E-Mail vom Haupt-SMTP-Server des Empfängers abgelehnt. Sie sollten also ~all
verwenden in Ihrer SPF-Richtlinie.
Beachten Sie, dass einige DNS-Manager verlangen, dass Sie den SPF-Eintrag wie unten in doppelte Anführungszeichen setzen.
TXT @ "v=spf1 mx ~all"
Um zu überprüfen, ob Ihr SPF-Eintrag an das öffentliche Internet weitergegeben wird, können Sie dig
verwenden Dienstprogramm auf Ihrer Linux-Box wie unten. (Auf CentOS/RHEL müssen Sie die bind-utils
installieren Paket, um dig
zu verwenden Befehl:sudo dnf install bind-utils
.)
dig your-domain.com txt
Die txt
Option sagt dig
dass wir nur TXT-Einträge abfragen wollen.
Sie können auch den Online-SPF-Validator verwenden wie spf.myisp.ch, um zu sehen, welche Hosts E-Mails für Ihre Domain senden dürfen, und um Ihren SPF-Eintrag zu debuggen, wenn ein Fehler auftritt. Der dmarcian SPF Surveyor kann Ihnen helfen, die Syntax Ihres SPF-Eintrags zu testen.
Konfigurieren des SPF-Richtlinien-Agents
Wir müssen auch unseren Postfix-SMTP-Server anweisen, den SPF-Eintrag eingehender E-Mails zu überprüfen, um gefälschte E-Mails zu erkennen. Installieren Sie zuerst die erforderlichen Pakete:
sudo dnf install epel-release sudo dnf install pypolicyd-spf
Fügen Sie dann einen Benutzer für policyd-spf hinzu.
sudo adduser policyd-spf --user-group --no-create-home -s /bin/false
Bearbeiten Sie die Konfigurationsdatei des Postfix-Master-Prozesses.
sudo nano /etc/postfix/master.cf
Fügen Sie am Ende der Datei die folgenden Zeilen hinzu, die Postfix anweisen, den SPF-Richtlinien-Daemon zu starten, wenn er sich selbst startet. Policyd-spf wird als policyd-spf
ausgeführt Benutzer.
policyd-spf unix - n n - 0 spawn user=policyd-spf argv=/usr/libexec/postfix/policyd-spf
Hinweis :Sie sollten policyd-spf nicht in einer Chroot-Umgebung ausführen.
Speichern und schließen Sie die Datei. Bearbeiten Sie als Nächstes die Hauptkonfigurationsdatei von Postfix.
sudo nano /etc/postfix/main.cf
Hängen Sie die folgenden Zeilen am Ende der Datei an. Die erste Zeile gibt die Zeitüberschreitungseinstellung des Postfix-Richtlinienagenten an (für die DNS-Abfrage). Die folgenden Zeilen legen Beschränkungen für eingehende E-Mails fest, indem der SPF-Eintrag überprüft wird.
policyd-spf_time_limit = 3600 smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_policy_service unix:private/policyd-spf
Speichern und schließen Sie die Datei. Starten Sie dann Postfix neu.
sudo systemctl restart postfix
Wenn Sie das nächste Mal eine E-Mail von einer Domain mit einem SPF-Eintrag erhalten, können Sie die Ergebnisse der SPF-Prüfung im Roh-E-Mail-Header sehen. Der folgende Header gibt an, dass der Absender die E-Mail von einem autorisierten Host gesendet hat.
Received-SPF: Pass (mailfrom) identity=mailfrom;
DKIM einrichten
Zwei gängige Softwareteile, die DKIM-Signaturen und -Verifizierungen unter Linux durchführen können, sind OpenDKIM und Amavis. Wir werden OpenDKIM verwenden, da es leichtgewichtig ist und OpenDMARC nicht mit Amavis funktioniert.
Installieren und konfigurieren Sie OpenDKIM auf CentOS 8/RHEL8
Installieren Sie OpenDKIM aus dem EPEL-Repository (Extra Packages for Enterprise Linux).
sudo dnf install epel-release sudo dnf install opendkim perl-Getopt-Long
Bearbeiten Sie die Hauptkonfigurationsdatei von OpenDKIM.
sudo nano /etc/opendkim.conf
Suchen Sie die folgende Zeile.
Mode v
Standardmäßig läuft OpenDKIM im Verifizierungsmodus (v), der die DKIM-Signatur eingehender E-Mail-Nachrichten überprüft. Wir müssen ausgehende E-Mails signieren, also ändern Sie diese Zeile wie folgt, um den Signiermodus zu aktivieren.
Mode sv
Suchen Sie dann die folgenden Zeilen.
## Specifies whether or not the filter should generate report mail back ## to senders when verification fails and an address for such a purpose ## is provided. See opendkim.conf(5) for details. SendReports yes ## Specifies the sending address to be used on From: headers of outgoing ## failure reports. By default, the e-mail address of the user executing ## the filter is used ([email protected]). # ReportAddress "Example.com Postmaster" <[email protected]>
Wenn eine Signaturüberprüfung fehlschlägt und die Signatur eine Berichtsanforderung („r=y“) enthielt und die signierende Domain eine Berichtsadresse (d. h. ra=Benutzer) in einem Berichtsdatensatz im DNS ankündigt, sendet OpenDKIM einen strukturierten Bericht an diese Adresse mit Details, die zum Reproduzieren des Problems erforderlich sind. Möglicherweise möchten Sie eine bestimmte Absender-E-Mail-Adresse verwenden, um den Bericht zu senden. Kommentieren Sie ReportAddress
aus Parameter und E-Mail-Adresse ändern. Beachten Sie, dass dies nicht zu dem Backscatter-Problem führt, da Berichts-E-Mails an eine E-Mail-Adresse gesendet werden, die im DNS-Eintrag der Absenderdomäne angegeben ist.
Suchen Sie die folgende Zeile und kommentieren Sie sie aus, da wir separate Schlüssel für jeden Domainnamen verwenden werden.
KeyFile /etc/opendkim/keys/default.private
Suchen Sie als Nächstes die folgenden 4 Zeilen und kommentieren Sie sie aus.
# KeyTable /etc/opendkim/KeyTable # SigningTable refile:/etc/opendkim/SigningTable # ExternalIgnoreList refile:/etc/opendkim/TrustedHosts # InternalHosts refile:/etc/opendkim/TrustedHosts
Speichern und schließen Sie die Datei.
Signaturtabelle, Schlüsseltabelle und Trusted-Hosts-Datei erstellen
Bearbeiten Sie die Unterzeichnungstabelle Datei.
sudo nano /etc/opendkim/SigningTable
Fügen Sie am Ende dieser Datei die folgende Zeile hinzu. Dies teilt OpenDKIM mit, dass ein Absender auf Ihrem Server einen @your-domain.com
verwendet -Adresse, dann sollte sie mit dem privaten Schlüssel signiert werden, der durch 20200308._domainkey.your-domain.com
identifiziert wird .
*@your-domain.com 20200308._domainkey.your-domain.com
20200308 ist der DKIM-Selektor. Ein Domänenname kann mehrere DKIM-Schlüssel haben. Mit dem DKIM-Selektor können Sie einen bestimmten DKIM-Schlüssel auswählen. Sie können einen beliebigen Namen für den DKIM-Selektor verwenden, aber ich fand es praktisch, das aktuelle Datum (8. März 2020) als DKIM-Selektor zu verwenden. Speichern und schließen Sie die Datei. Bearbeiten Sie dann die Schlüsseltabelle Datei.
sudo nano /etc/opendkim/KeyTable
Fügen Sie die folgende Zeile hinzu, die den Speicherort des privaten DKIM-Schlüssels angibt.
20200308._domainkey.your-domain.com your-domain.com:20200308:/etc/opendkim/keys/your-domain.com/20200308.private
Speichern und schließen Sie die Datei. Bearbeiten Sie als Nächstes die Datei für vertrauenswürdige Hosts.
sudo nano /etc/opendkim/TrustedHosts
127.0.0.0.1 und ::1 sind standardmäßig in dieser Datei enthalten. Fügen Sie nun die folgende Zeile hinzu. Dies teilt OpenDKIM mit, dass OpenDKIM keine DKIM-Verifizierung für die E-Mail durchführen sollte, wenn eine E-Mail von Ihrem eigenen Domänennamen stammt.
*.your-domain.com
Speichern und schließen Sie die Datei.
Generieren Sie ein privates/öffentliches Schlüsselpaar
Da DKIM verwendet wird, um ausgehende Nachrichten zu signieren und eingehende Nachrichten zu überprüfen, müssen Sie einen privaten Schlüssel zum Signieren ausgehender E-Mails und einen öffentlichen Schlüssel zum Empfangen von SMTP-Servern generieren, um die DKIM-Signatur Ihrer E-Mail zu überprüfen. Der öffentliche Schlüssel wird im DNS veröffentlicht.
Erstellen Sie einen separaten Ordner für die Domain.
sudo mkdir /etc/opendkim/keys/your-domain.com
Generieren Sie Schlüssel mit opendkim-genkey
Werkzeug.
sudo opendkim-genkey -b 2048 -d your-domain.com -D /etc/opendkim/keys/your-domain.com -s 20200308 -v
Der obige Befehl erstellt 2048-Bit-Schlüssel. -d (domain)
gibt die Domäne an. -D (directory)
gibt das Verzeichnis an, in dem die Schlüssel gespeichert werden. Ich verwende 20200308
als DKIM-Selektor. Sobald der Befehl ausgeführt wird, wird der private Schlüssel in 20200308.private
geschrieben Datei und der öffentliche Schlüssel wird in 20200308.txt
geschrieben Datei.
Standardmäßig kann nur root die Schlüsseldateien lesen und schreiben. Machen Sie opendkim
als Eigentümer des privaten Schlüssels.
sudo chown opendkim:opendkim /etc/opendkim/keys/ -R
Veröffentlichen Sie Ihren öffentlichen Schlüssel in DNS-Einträgen
Anzeige des öffentlichen Schlüssels
sudo cat /etc/opendkim/keys/your-domain.com/20200308.txt
Die Zeichenfolge nach dem p
Parameter ist der öffentliche Schlüssel.
Erstellen Sie in Ihrem DNS-Manager einen TXT-Eintrag, geben Sie 20200308._domainkey
ein im Namensfeld. (Sie müssen 20200308 durch Ihren eigenen DKIM-Selektor ersetzen.) Gehen Sie dann zurück zum Terminalfenster, kopieren Sie alles in den Klammern und fügen Sie es in das Wertefeld des DNS-Eintrags ein. Sie müssen alle doppelten Anführungszeichen und Zeilenumbrüche im Wertfeld löschen. Wenn Sie sie nicht löschen, wird der Schlüsseltest im nächsten Schritt wahrscheinlich fehlschlagen.
DKIM-Schlüssel testen
Geben Sie den folgenden Befehl auf Ihrem CentOS 8/RHEL 8-Server ein, um Ihren Schlüssel zu testen.
sudo opendkim-testkey -d your-domain.com -s 20200308 -vvv
Wenn alles in Ordnung ist, sehen Sie die key OK
Nachricht.
opendkim-testkey: using default configfile /etc/opendkim.conf opendkim-testkey: checking key '20200308._domainkey.linuxbabe.com' opendkim-testkey: key OK
Beachten Sie, dass Ihr DKIM-Eintrag möglicherweise einige Zeit benötigt, um im Internet verbreitet zu werden. Abhängig von der von Ihnen verwendeten Domänenregistrierungsstelle wird Ihr DNS-Eintrag möglicherweise sofort weitergegeben oder es kann bis zu 24 Stunden dauern, bis er weitergegeben wird. Sie können zu https://www.dmarcanalyzer.com/dkim/dkim-check/ gehen und 20200308
eingeben als Selektor und geben Sie Ihren Domänennamen ein, um die DKIM-Eintragsweitergabe zu überprüfen.
Wenn Sie „Schlüssel nicht sicher“ sehen, geraten Sie nicht in Panik. Dies liegt daran, dass DNSSEC für Ihren Domainnamen nicht aktiviert ist. DNSSEC ist ein Sicherheitsstandard für sichere DNS-Abfragen. Die meisten Domainnamen haben DNSSEC nicht aktiviert. Sie können dieser Anleitung weiterhin folgen.
Jetzt können wir den opendkim-Dienst starten.
sudo systemctl start opendkim
Und aktivieren Sie den automatischen Start beim Booten.
sudo systemctl enable opendkim
OpenDKIM lauscht auf 127.0.0.1:8891
.
Postfix mit OpenDKIM verbinden
Postfix-Hauptkonfigurationsdatei bearbeiten.
sudo nano /etc/postfix/main.cf
Fügen Sie am Ende dieser Datei die folgenden Zeilen hinzu, damit Postfix OpenDKIM über das Milter-Protokoll aufrufen kann. Beachten Sie, dass Sie 127.0.0.1
verwenden sollten als Adresse. Verwenden Sie nicht localhost
.
# Milter configuration milter_default_action = accept milter_protocol = 6 smtpd_milters = inet:127.0.0.1:8891 non_smtpd_milters = $smtpd_milters
Speichern und schließen Sie die Datei. Fügen Sie dann postfix
hinzu Benutzer zu opendkim
Gruppe.
sudo gpasswd -a postfix opendkim
Starten Sie postfix
neu Dienst.
sudo systemctl restart postfix
SPF- und DKIM-Prüfung
Sie können jetzt eine Test-E-Mail von Ihrem Mailserver an Ihr Google Mail-Konto senden, um zu sehen, ob die SPF- und DKIM-Prüfungen bestanden werden. Auf der rechten Seite einer geöffneten E-Mail-Nachricht in Gmail, wenn Sie auf show original
klicken Schaltfläche aus dem Dropdown-Menü können Sie die Authentifizierungsergebnisse sehen.
Wenn Ihre Nachricht nicht signiert ist und die DKIM-Prüfung fehlgeschlagen ist, sollten Sie das Postfix-Protokoll überprüfen (/var/log/maillog
), um zu sehen, was in Ihrer Konfiguration falsch ist. Ihr E-Mail-Server führt auch eine SPF- und DKIM-Prüfung der Domain des Absenders durch. Sie können die Ergebnisse in den E-Mail-Kopfzeilen sehen. Das Folgende ist eine SPF- und DKIM-Prüfung eines Absenders, der Gmail verwendet.
Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2607:f8b0:4864:20::c2d; helo=mail-yw1-xc2d.google.com; [email protected]; receiver=<UNKNOWN> Authentication-Results: mail.linuxbabe.com; dkim=pass (2048-bit key; unprotected) header.d=gmail.com [email protected] header.b="XWMRd2co"; dkim-atps=neutral
E-Mail-Score und -Platzierung testen
Jetzt können Sie zu https://www.mail-tester.com gehen. Sie sehen eine eindeutige E-Mail-Adresse. Senden Sie eine E-Mail von Ihrer Domain an diese Adresse und überprüfen Sie dann Ihre Punktzahl. Wie Sie sehen können, habe ich die volle Punktzahl erreicht.
Mail-tester.com kann Ihnen nur einen Absender-Score anzeigen. Es gibt einen weiteren Dienst namens GlockApps, mit dem Sie überprüfen können, ob Ihre E-Mail im Posteingang oder Spam-Ordner des Empfängers abgelegt oder direkt abgelehnt wird. Es unterstützt viele beliebte E-Mail-Anbieter wie Gmail, Outlook, Hotmail, YahooMail, iCloud Mail usw.
Microsoft-Postfächer (Hotmail.com, Outlook.com)
Microsoft scheint eine interne Blacklist zu verwenden, die viele legitime IP-Adressen blockiert. Wenn Ihre E-Mails von Outlook oder Hotmail abgelehnt werden, müssen Sie das Absenderinformationsformular absenden. Danach wird Ihre E-Mail von Outlook/Hotmail akzeptiert, kann aber immer noch als Spam gekennzeichnet werden. In meinem Test landete die E-Mail in meinem Gmail-Posteingang. In meiner Outlook.com-E-Mail wird es jedoch immer noch als Spam gekennzeichnet, obwohl sowohl SPF als auch DKIM bestanden werden.
Was ist, wenn Ihre E-Mails immer noch als Spam markiert werden?
In diesem Artikel habe ich weitere Tipps für dich:So verhindern Sie, dass Ihre E-Mails als Spam markiert werden.
Nächster Schritt
In Teil 5 werden wir sehen, wie Sie einen DMARC-Eintrag erstellen, um Ihre Domain vor E-Mail-Spoofing zu schützen. Wenn Sie diesen Beitrag nützlich fanden, abonnieren Sie wie immer unseren kostenlosen Newsletter, um weitere nützliche Artikel zu erhalten, oder folgen Sie uns auf Twitter oder liken Sie unsere Facebook-Seite.