Alle Beiträge von Don Matteo

lebt in der Schweiz, ist System Engineer MCP bei A-Enterprise GmbH. Mitglied des UNBLOG Knowledge Network. Author und Blogger zu den Themen, Tutorials für Linux und Open Source.

Postfix Weiterleitung zu Office 365

E-Mail Weiterleitung mit Postfix über Office 365 Relayhost

EMail Weiterleitung mit Postfix („MTA“) Mail Transfer Agent über ein Office 365 Relayhost versenden. Die E-Mails werden über ein Office 365 E-Mailkonto ausgeliefert, die Clients im lokalen Netzwerk nutzen dabei Postfix als lokalen SMTP-Gateway.

Postfix E-Mail Weiterleitung zu Office 365. Die vorgensweise hier in diesem Tutorial.

In Umgebungen wo beispielsweise Mutlifunktionsgeräte, oder Applikationen welche die Authentifizierung über Mail Submission und STARTTLS (Port 587) nicht unterstützen, können über den lokalen Postfix Mailserver versenden, ohne das diese sich am Mailserver anmelden müssen.

Postfix und Cyrus SASL Installation

Auf einem RHEL Linux werden dazu die folgenden Pakete als root bereitgestellt.

$ yum update && yum install -y postfix mailx cyrus-sasl cyrus-sasl-plain

Bei Debian basierten Linux geht die Paket bereitstellung wie folgt.

$ apt update && apt install -y postfix mailutils

Die Postfix Konfiguration editieren der Datei /etc/postfix/main.cf

mynetworks = 127.0.0.0/8 192.168.1.0/24
myhostname = 12.34.56.78.dynamic.xline.res.cust.isp.net
mydestination = $myhostname, localhost.$mydomain, localhost
inet_interfaces = all
inet_protocols = ipv4
relayhost = [smtp.office365.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt

Bei mynetworks das lokale Netzwerk eintragen. Als myhostname den im Internet auflösbaren PTR Resource Record anwenden, um herauszufinden wie die Public IP und der dazugehörende PTR Eintrag ist, folgendes Command in der bash ausführen, oder hier.

$ curl -s ifconfig.co | xargs host
12.34.56.78.in-addr.arpa domain name pointer 12.34.56.78.dynamic.xline.res.cust.isp.net

Als nächstes wird eine Datei /etc/postfix/sasl_passwd erstellt.

[smtp.office365.com]:587    meinemail@domain.com:password

Anstelle von meinemail@domain.com ist das eigene Office 365 Mailkonto einzusetzen, bei password das entsprechende Kennwort.

Die Datei sasl_passwd zur Berkeley DB erzeugen mit postmap.

$ postmap /etc/postfix/sasl_passwd

TIP: postmap muss man nach jeder änderung ausführen.

Nun wird Postfix neu gestartet um die Konfiguration zu aktivieren.

$ systemctl restart postfix

Postfix Konfiguration testen

Zuletzt wird die Postfix Konfiguration getestet, mit einer mail aus der bash.

$ echo "Das ist ein Test." | mail -v -s "Test subject" -r meinemail@domain.com andere@domain.com

Bei meinemail@domain.com die Office 365 Mailadresse, und bei andere@domain.com eine gültige Empfänger E-Mail angeben.

Die Mail-Logdatei und die queue untersuchen um sich zu vergewissern, ob die E-Mail auch tatsächlich versendet wurde und von smtp.office365.com angenommen wurde.

$ tail -25 /var/log/maillog
mailq

TIP: Es gibt weitere Möglichkeiten Ausgaben an mail zu übergeben, zum Beispiel kann das Resultat der PTR Recource Record Abfrage als Argument an mail übergeben und gesendet werden.

$ curl -s ifconfig.co | xargs host | mail -v -s "Lookup PTR" -r meinemail@domain.com andere@domain.com

E-Mail policyd-spf Postfix SPF-Datensatz

E-Mail SPF-Datensatz und policyd-spf in Postfix

Mailserver (MTA) benötigen neben einem A Record, dem MX und dem PTR Eintrag, zusätzlich auch einen SPF-Datensatz im DNS.

Was sind SPF-Records

SPF (Sender Policy Framework) ist ein Verfahren zur Sender-Authentifizierung. SPF ist wie DKIM ein Datensatz vom Typ TXT des DNS, die dazu beitragen sollen, E-Mail-Spoofing zu verhindern und bei der Zustellung der eigenen E-Mails diese als legitim zu identifizieren. Auch soll verhindert werden das E-Mails beim Empfänger nicht im Junk-Mail-Ordner landen. Wenn eine Domain durch E-Mail-Spoofing missbraucht wird, landen die E-Mails wahrscheinlich im Spam-Ordner des Empfängers.

Der SPF-Datensatz gibt an, welche Hosts oder IP-Adressen E-Mails im Namen einer Domain senden dürfen. Sie sollten nur dem eigenen Mailserver oder dem Server des Internetdienstanbieters erlauben, E-Mails für diese Domain zu senden.

SPF-Datensatz im DNS Erstellen

Ein SPF-Datensatz ist ein DNS-Eintrag der zur DNS-Zone einer Domain hinzugefügt wird. Der SPF-Eintrag in einer DNS-Zone kann wie folgt aussehen:

@   IN   TXT   "v=spf1 a mx ~all"

Bei der Domain-Verwaltung eines Internet-Webhosting Anbieter kann dies dann etwa wie folgt aussehen.

E-Mail policyd-spf Postfix SPF-Datensatz
  • TXT zeigt an, dass dies ein TXT-Datensatz ist.
  • v=spf1 gibt an, dass dies ein SPF-Datensatz ist und die SPF-Datensatzversion SPF1 ist.
  • mx bedeutet, dass alle in den MX-Datensätzen aufgeführten Hosts E-Mails für die Domain senden dürfen, alle anderen Hosts sind nicht zugelassen.
  • -all Fail – Server die nicht im SPF-Datensatz aufgeführt sind, sind nicht autorisiert E-Mails zu senden (nicht konforme E-Mails werden abgelehnt).
  • ~all Softfail – gibt an, dass E-Mails dieser Domain nur von Hosts stammen sollen, die im SPF-Datensatz angegeben sind. Von anderen Hosts gesendete E-Mails werden als gefälscht gekennzeichnet. Mögliche Alternativen sind +all, ?all, diese jedoch selten verwendet werden.
  • +all – Es wird dringend empfehlen, diese Option nicht zu verwenden. Der Tag ermöglicht es, E-Mails von dieser Domain zu senden.
  • include – Eine zusätzliche SPF-Anfrage zur im Include-Statement angegebenen Domain die die IP-Adresse des Senders enthält.

Um zu überprüfen das der SPF-Record im öffentlichen Internet aufgelöst wird, ist das Dienstprogramm dig auf dem Linux Host wie folgt zur Abfrage anzuwenden:

$ dig domain.com TXT +short
"v=spf1 a mx ~all"

An einem Windows Computer kann nslookup in einer Eingabeaufforderung (cmd) ausgeführt werden, die Änderung kann je nach TTL eine Verzögerung haben:

C:\> nslookup -type=txt domain.com

In der PowerShell dient Resolve-DnsName mit folgendem Befehl:

PS C:\> Resolve-DnsName -Name domain.com -type TXT | ft -a

Name       Type TTL  Section Strings
----       ---- ---  ------- -------
domain.com TXT  3485 Answer  {v=spf1 a mx ~all}

Es können auch Online SPF-Validator wie mxtoolbox verwendet werden, um zu überprüfen welche Hosts die E-Mails der eigenen Domain senden dürfen.

Postfix SPF Policy Agent pypolicyd-spf

Wir benötigen für unseren Postfix SMTP-Server noch die Anweisung, den SPF-Datensatz eingehender E-Mails zu überprüfen, um gefälschte E-Mails zu erkennen. Installiere hierzu als root das Paket pypolicyd-spf aus dem EPEL-Repository:

yum install epel-release
yum install pypolicyd-spf

Füge dann einen Benutzer für Policyd-SPF hinzu:

adduser -U -M -s /bin/false policyd-spf

Postfix Master-Konfiguration

Bearbeite nun die Postfix-Master-Konfigurationsdatei master.cf:

vi /etc/postfix/master.cf

policyd-spf  unix  -       n       n       -       0       spawn
    user=policyd-spf argv=/usr/libexec/postfix/policyd-spf

Füge die Zeilen am Ende der Datei master.cf hinzu, hierdurch wird Postfix angewiesen den SPF-Richtliniendämon zu starten. Policyd-SPF wird als Benutzer policyd-spf ausgeführt.

  Policyd-SPF sollte nicht in einer chroot-Umgebung ausgeführt werden.

Speichere und schliesse nun die Datei.

Postfix Hauptkonfiguration

Bearbeite als Nächstes die Postfix-Hauptkonfigurationsdatei main.cf:

vi /etc/postfix/main.cf

policyd-spf_time_limit = 3600
smtpd_recipient_restrictions =
   permit_mynetworks,
   permit_sasl_authenticated,
   reject_unauth_destination,
   check_policy_service unix:private/policyd-spf,
   permit

Die Zeile mit policyd-spf sollte nach reject_unauth_destination zu stehen kommen. Speichere anschlissend die Datei und starte dann Postfix neu:

systemctl restart postfix

SPF-Überprüfung der E-Mail

Wenn jetzt eine E-Mail von deiner Domain mit einem SPF-Datensatz empfangen wird, werden die SPF-Prüfergebnisse im RAW E-Mail-Header angezeigt. Der folgende Header gibt an, dass der Absender der E-Mail von einem autorisierten Host gesendet wurde.

Received-SPF: Pass (mailfrom) identity=mailfrom;

Postfix protokolliert mit syslog die SPF-Prüfergebnisse in maillog in etwa wie folgt.

Jul 19 07:10:38 mailhub policyd-spf[24382]: Pass; identity=helo; client-ip=12.34.56.78; helo=mail77-192.srv2.com; envelope-from=return@news.domain.com; receiver=max.muster@domain.com

Fazit

Dieser Beitrag zeigt die Anwendung und Konfiguration von SPF (Sender Policy Framework) unter Postfix. Für die E-Mail-Sender-Authentifizierung. Der SPF-Datensatz für E-Mails des Typ TXT des DNS wird von Postfix mit policyd-spf überprüft, auf das Vorhandensein der Sender Domain. Das dazu beitragen sollen, E-Mail-Spoofing zu verhindern und bei der Zustellung der eigenen E-Mails diese als legitim zu identifizieren.