SPF für Postfix einrichten

Schritt-für-Schritt-Anleitung: SPF-Record für ausgehende E-Mails anlegen, eingehende SPF-Validierung mit policyd-spf konfigurieren und mit DNS-Befehlen verifizieren.

Postfix · Schritt für Schritt

SPF für Postfix (selbst gehosteter Mailserver)

Bei Postfix sind zwei Dinge zu konfigurieren: Der SPF-Record im DNS autorisiert Ihren Server für ausgehende E-Mails — policyd-spf validiert SPF für eingehende E-Mails. Postfix selbst kennt SPF nicht: Das DNS-Record schreibt anderen Mailservern, wer für Ihre Domain senden darf. Die eingehende Validierung ist eine separate Erweiterung. Beide Seiten gehören zusammen.

BSI TR-03182 definiert SPF als Mindestanforderung für selbstverwaltete Mailserver — NIS2 Art. 21 bekräftigt diese Pflicht. SPF verbraucht bei Postfix nur 1 DNS-Lookup (für mx) — ip4:- und ip6:-Mechanismen sind lookup-frei. Der Wolf-Agents Email Security Check zählt DNS-Lookups gegen das RFC-7208-Limit von 10 zeichengenau, bewertet Qualifier (-all vs. ~all vs. ?all) nach Ablehnungswirkung und erkennt Mischformen wie mx + ip4:, die das Lookup-Budget unnötig belasten.

Hardening-Pfad: Nach SPF folgt als nächster Schritt DKIM für Postfix — gemeinsam bilden SPF + DKIM die Grundlage für DMARC.

1 Schritt 1 von 3

SPF-Record im DNS anlegen

Erstellen Sie einen TXT-Record bei Ihrem DNS-Provider. Der Record autorisiert Ihren Postfix-Server — und nur diesen — E-Mails für Ihre Domain zu versenden. Das -all am Ende weist alle anderen Server ab.

DNS TXT-Record Postfix
ihre-domain.de.  IN  TXT  "v=spf1 mx ip4:203.0.113.10 -all"
mx vs. ip4 — wann was verwenden?

mx autorisiert alle Server, die in Ihren MX-Records stehen (kostet 1 Lookup). ip4:203.0.113.10 autorisiert eine spezifische IP direkt (kostet 0 Lookups). Wenn Ihr Postfix-Server gleichzeitig MX ist, reicht mx. Wenn Ihr sendender Server eine andere IP hat als der MX-Eintrag, müssen Sie ip4: explizit angeben.

Mehrere Server (IPv4 + IPv6)?

Tragen Sie alle sendenden Server-IPs in einen einzigen SPF-Record ein. RFC 7208 erlaubt nur einen SPF-Record pro Domain:

v=spf1 mx ip4:203.0.113.10 ip4:198.51.100.20 ip6:2001:db8::1 -all
2 Schritt 2 von 3

SPF-Validierung für eingehende E-Mails (policyd-spf)

Postfix validiert SPF für eingehende E-Mails nicht von sich aus. Dafür ist postfix-policyd-spf-python zuständig — ein Policy-Daemon, den Postfix bei jeder eingehenden Verbindung befragt.

Installation und Konfiguration

  1. Installieren Sie den Policy-Daemon: apt install postfix-policyd-spf-python
  2. Öffnen Sie /etc/postfix/master.cf und fügen Sie den Service ein
  3. Öffnen Sie /etc/postfix/main.cf und aktivieren Sie die Policy-Prüfung
  4. Starten Sie Postfix neu: systemctl reload postfix
/etc/postfix/master.cf Policy-Service eintragen
policyd-spf  unix  -       n       n       -       0       spawn
    user=policyd-spf argv=/usr/bin/policyd-spf
/etc/postfix/main.cf SPF-Validierung aktivieren
policyd-spf_time_limit = 3600

smtpd_recipient_restrictions =
    permit_mynetworks,
    permit_sasl_authenticated,
    reject_unauth_destination,
    check_policy_service unix:private/policyd-spf
3 Schritt 3 von 3

SPF-Record und Validierung verifizieren

Prüfen Sie den DNS-Record und beobachten Sie das Mail-Log, um zu bestätigen, dass policyd-spf aktiv SPF-Ergebnisse in die Mailheader einträgt.

Terminal Verifikation
# SPF-Record abfragen
dig TXT ihre-domain.de +short
# "v=spf1 mx ip4:203.0.113.10 -all"

# policyd-spf-Aktivität im Mail-Log prüfen
grep policyd-spf /var/log/mail.log | tail -20
# Zeigt SPF=pass / SPF=fail pro eingehender Verbindung

# Received-SPF-Header in einer zugestellten E-Mail prüfen
# (Header einer Testmail im Posteingang anzeigen)
# Received-SPF: pass (ihre-domain.de: 203.0.113.10 is authorized ...)

Validieren Sie Ihren ausgehenden SPF-Record zusätzlich mit dem Wolf-Agents Email Security Check — dieser prüft SPF auf 22 Einzelkriterien inklusive Qualifier-Bewertung und Lookup-Zählung.

Häufige Fehler bei Postfix

Bei selbst gehosteten Postfix-Servern treten diese drei Fehler besonders häufig auf. Jeder einzelne kann dazu führen, dass SPF fehlschlägt oder eingehende E-Mails nicht korrekt validiert werden.

SPF-Record und SPF-Validierung verwechselt

Problem: Der DNS-Record und die eingehende SPF-Validierung sind zwei unabhängige Konzepte. Der DNS TXT-Record sagt anderen Mailservern, wer für Ihre Domain senden darf (ausgehend). policyd-spf prüft, ob eingehende E-Mails den SPF-Record ihrer Absenderdomain erfüllen. Wer nur den DNS-Record setzt, schützt sich nicht vor gefälschten Absendern — und wer nur policyd-spf installiert, ohne den eigenen SPF-Record zu setzen, wird von anderen Servern als nicht autorisierter Absender eingestuft.

Lösung: Beide Seiten konfigurieren: DNS TXT-Record für ausgehende E-Mails anlegen und policyd-spf für eingehende Validierung installieren. Wolf-Agents prüft den ausgehenden SPF-Record automatisch.

mx allein bei separatem Relay-Server

Problem: mx autorisiert nur die IP-Adressen, die in den MX-Records der Domain stehen. Wenn Postfix E-Mails über einen separaten Relay-Server (z. B. Smarthost) versendet oder die sendende IP nicht mit dem MX übereinstimmt, schlägt SPF mit fail fehl — weil der sendende Server nicht im MX-Record eingetragen ist.

Lösung: Die tatsächliche IP des sendenden Servers explizit per ip4: eintragen: v=spf1 mx ip4:203.0.113.10 -all. Prüfen Sie mit postconf -n mynetworks und postconf -n relayhost, welche IPs tatsächlich senden.

policyd-spf nicht installiert

Problem: Postfix validiert SPF für eingehende E-Mails standardmäßig nicht. Ohne policyd-spf (oder einen gleichwertigen Policy-Daemon) werden alle eingehenden E-Mails ohne SPF-Prüfung angenommen — auch von Servern, die den SPF-Record der Absenderdomain verletzen. Spam und Phishing-E-Mails, die SPF-fail produzieren würden, passieren ungefiltert.

Lösung: apt install postfix-policyd-spf-python und die Konfiguration in master.cf und main.cf wie in Schritt 2 beschrieben eintragen. Das Mail-Log zeigt anschließend SPF-Ergebnisse pro eingehender Verbindung.

Wie steht Ihre Domain bei SPF?

Prüfen Sie es jetzt — kostenlos, ohne Registrierung, mit 165 Prüfpunkte.