GNU/Linux >> LINUX-Kenntnisse >  >> Cent OS

Teil 4:SPF und DKIM mit Postfix auf CentOS 8/RHEL 8 Mailserver einrichten

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.


Cent OS
  1. So installieren Sie den Postfix-Mailserver auf RHEL 8 / CentOS 8

  2. So installieren und konfigurieren Sie den Postfix-Mailserver unter CentOS 8

  3. So installieren und integrieren Sie DKIM mit OpenDKIM und Postfix auf einem CentOS 6 VPS

  4. Richten Sie einen Mailserver mit PostfixAdmin und MariaDB auf CentOS 7 ein

  5. So richten Sie einen Mailserver mit PostfixAdmin auf CentOS 7 ein

Einrichten des CUPS-Druckservers unter CentOS 8/RHEL 8 (Bonjour, IPP, Samba, AirPrint)

Samba-Server auf CentOS 8/RHEL 8 für die Dateifreigabe einrichten

Richten Sie OpenDMARC mit Postfix auf CentOS/RHEL ein, um E-Mail-Spoofing zu blockieren

Installieren und konfigurieren Sie OpenDKIM auf dem Mailserver CentOS 8/RHEL 8

Teil 3:PostfixAdmin – Virtuelle Postfächer auf CentOS 8/RHEL 8 Mailserver erstellen

So richten Sie einen voll funktionsfähigen Mailserver mit Postfix, Dovecot und Roundcube unter Ubuntu 18.04 ein