Appendix D. SPF/Mediator Interactions (SPF/Vermittler-Interaktionen)
Appendix D. SPF/Mediator Interactions (SPF/Vermittler-Interaktionen)
Dieser Anhang diskutiert die Interaktion zwischen SPF und E-Mail-Vermittlern (wie Mailinglisten und Weiterleitungsdienste) sowie deren Auswirkungen.
D.1 Originating ADMDs (Ursprungs-ADMD)
Das Ursprungs-ADMD ist die administrative Domain, die ursprünglich die E-Mail sendet. Bei Vorhandensein von Vermittlern muss das Ursprungs-ADMD die Weiterleitungs- und Listendienste berücksichtigen, die seine E-Mails durchlaufen können.
D.1.1 Problemidentifikation
SPF-Grundannahme:
- E-Mails werden direkt von autorisierten Servern an Empfänger gesendet
- MAIL FROM-Identität bleibt unverändert
- Absender-IP-Adresse ist im SPF-Eintrag autorisiert
Von Vermittlern gebrochene Annahmen:
- E-Mails durchlaufen Zwischensysteme
- Können von einer anderen IP-Adresse erneut gesendet werden
- MAIL FROM kann geändert oder unverändert bleiben
D.1.2 Optionen für Absender
Option 1: Lockere SPF-Richtlinie verwenden
example.com IN TXT "v=spf1 mx ~all"
Vorteile:
- Erlaubt legitime Weiterleitung
- Reduziert Fehlalarme
Nachteile:
- Schwächt den SPF-Schutz
- Leichter zu fälschen
Option 2: Auf andere Authentifizierungsmethoden setzen
DKIM-Signaturen veröffentlichen:
- DKIM bleibt bei Weiterleitung gültig
- Unabhängig von Absender-IP-Adresse
- Funktioniert mit DMARC zusammen
Option 3: SPF-Fehler akzeptieren
example.com IN TXT "v=spf1 mx -all"
- Akzeptieren, dass einige legitime E-Mails markiert oder abgelehnt werden können
- Darauf vertrauen, dass Benutzer die richtige Sendemethode verwenden
- Benutzern empfehlen, nicht weiterzuleiten, sondern "Als Kopie senden" zu verwenden
D.1.3 Best Practices
Empfohlene Konfiguration:
1. Strengen SPF-Eintrag veröffentlichen (-all)
2. Gleichzeitig DKIM-Signierung implementieren
3. DMARC-Richtlinie veröffentlichen
4. Benutzer über Weiterleitungsprobleme aufklären
DMARC-Konfigurationsbeispiel:
_dmarc.example.com IN TXT "v=DMARC1; p=quarantine; sp=quarantine; adkim=r; aspf=r; pct=100; rua=mailto:[email protected]"
Parametererklärung:
adkim=r: DKIM-Relaxed-Alignmentaspf=r: SPF-Relaxed-Alignmentp=quarantine: Bei Fehler E-Mail unter Quarantäne stellen
D.2 Mediators (Vermittler)
Vermittler sind Systeme, die E-Mails in der Übertragungskette ändern oder erneut senden. Häufige Vermittler umfassen Mailinglisten, Weiterleitungsdienste und automatische Antwortsysteme.
D.2.1 Mailinglisten
Problem:
Herkömmliche Mailinglisten behalten das ursprüngliche MAIL FROM bei:
Original: MAIL FROM:`<[email protected]>`
Nach Liste: MAIL FROM:`<[email protected]>`
Absender-IP: list-server.mailinglist.org
SPF-Prüfung:
SPF-Eintrag von example.com abfragen
IP von list-server.mailinglist.org prüfen
Ergebnis: fail (IP ist nicht im SPF-Eintrag von example.com)
D.2.2 Lösungen
Lösung 1: MAIL FROM neu schreiben (empfohlen)
Umgeschrieben: MAIL FROM:`<[email protected]>`
Reply-To: [email protected]
Vorteile:
- SPF-Prüfung besteht
- Bounces gehen an Listenserver zurück
- Empfänger kann korrekt identifizieren
Nachteile:
- Ändert ursprüngliche Absenderinformationen
- Benutzer müssen sich an Reply-To anpassen
Implementierungsbeispiel (Mailman):
# Mailman-Konfiguration
from_is_list = 2 # Munge From, add Reply-To
Lösung 2: SRS (Sender Rewriting Scheme) verwenden
SRS ist ein komplexeres Umschreibungsschema:
Original: [email protected]
Umgeschrieben zu: [email protected]
SRS-Format:
SRS0=<hash>=<timestamp>=<domain>=<localpart>@<forwarder>
Beispiel:
[email protected]
Vorteile:
- Bewahrt ursprüngliche Absenderinformationen (im local-part)
- SPF-Prüfung besteht
- Kann nachverfolgt und verifiziert werden
Nachteile:
- Komplexe Implementierung
- Benötigt SRS-Datenbank
- local-part wird schwer lesbar
Lösung 3: DKIM anstatt SPF verwenden
Konfiguration:
1. Ursprünglicher Absender verwendet DKIM-Signierung
2. Listenserver behält ursprüngliche Signatur bei
3. Listenserver fügt eigene DKIM-Signatur hinzu
4. Empfänger verifiziert DKIM (ignoriert SPF-Fehler)
DMARC-Konfiguration:
_dmarc.example.com IN TXT "v=DMARC1; p=none; adkim=r; aspf=r"
p=none: Keine Durchsetzung (erlaubt SPF-Fehler)adkim=r: DKIM-Relaxed-Alignment (erlaubt Listensignatur)
D.2.3 E-Mail-Weiterleitungsdienste
Typ 1: Einfache Weiterleitung
Benutzerkonfiguration: [email protected] → [email protected]
Weiterleitungsdienst behält bei: MAIL FROM:`<[email protected]>`
Sendet von IP des Weiterleitungsservers
SPF-Problem:
Gmail prüft SPF von original.com
IP des Weiterleitungsservers ist nicht im SPF-Eintrag
Ergebnis: fail
Lösung A: SRS-Umschreibung
Weiterleitungsdienst verwendet SRS:
MAIL FROM:<[email protected]>
Lösung B: ~all statt -all verwenden
original.com IN TXT "v=spf1 mx ~all"
Weitergeleitete E-Mails erhalten softfail statt fail, werden eher akzeptiert.
Typ 2: .forward-Datei
# ~/.forward
[email protected]
Problem identisch mit einfacher Weiterleitung.
Best Practices:
1. Weiterleitungsdienste sollten SRS implementieren
2. Ursprünglicher Absender sollte DKIM verwenden
3. Empfänger sollten DKIM-Ergebnisse berücksichtigen, nicht nur SPF
D.2.4 Automatische Antwort- und Benachrichtigungssysteme
Problem:
Original-E-Mail: [email protected] → [email protected]
Automatische Antwort: MAIL FROM:`<[email protected]>`
(Gesendet von company.com-Server)
SPF-Prüfung wird fehlschlagen.
Lösung:
Benachrichtigungen mit leerem MAIL FROM senden:
MAIL FROM:<>
From: Mail Delivery System `<[email protected]>`
Oder:
Lokale Adresse verwenden:
MAIL FROM:`<[email protected]>`
From: Automatic Reply `<[email protected]>`
Reply-To: [email protected]
D.3 Receiving ADMDs (Empfänger-ADMD)
Empfänger-ADMD muss E-Mails von Vermittlern verarbeiten und angemessene Entscheidungen treffen.
D.3.1 Erkennung von Vermittler-E-Mails
Identifikatoren:
1. Zwischenhops in Received-Headern
2. List-*-Header (Mailinglisten)
3. Precedence: bulk oder list
4. SRS-formatiertes MAIL FROM
5. DKIM-Signatur von bekanntem Listendienst
Beispielerkennungslogik:
def is_mailing_list(message):
# List-*-Header prüfen
list_headers = [
'List-Id', 'List-Post', 'List-Unsubscribe',
'List-Help', 'List-Subscribe', 'List-Owner'
]
for header in list_headers:
if message.get(header):
return True
# Precedence prüfen
if message.get('Precedence') in ['bulk', 'list']:
return True
# SRS prüfen
mail_from = message.get('Return-Path', '')
if mail_from.startswith('SRS0=') or mail_from.startswith('SRS1='):
return True
return False
D.3.2 Richtlinienempfehlungen
Richtlinie 1: Lockerer Umgang mit Listen-E-Mails
if is_mailing_list(message):
if spf_result == 'fail':
# DKIM prüfen
if dkim_result == 'pass':
accept_message()
else:
# Listen-Reputation prüfen
if list_is_trusted(list_id):
accept_message()
else:
quarantine_message()
Richtlinie 2: Auf DMARC verlassen
if dmarc_result == 'pass':
accept_message()
elif spf_result == 'fail' and dkim_result == 'fail':
reject_message()
else:
# SPF oder DKIM eins besteht
if is_mailing_list(message):
accept_message()
else:
apply_content_filtering()
Richtlinie 3: Benutzerspezifische Regeln
Benutzer können Whitelists konfigurieren:
- Vertrauenswürdige Mailinglisten
- Bekannte Weiterleitungsadressen
- Lockere Behandlung bestimmter Domains
D.3.3 Implementierungsempfehlungen
SpamAssassin-Konfiguration:
# Lockerer Umgang mit Mailinglisten
header LIST_ID exists:List-Id
score LIST_ID -0.1
# SPF fail aber mit List-Id-Header
meta SPF_FAIL_LIST (SPF_FAIL && LIST_ID)
score SPF_FAIL_LIST 0.5
# Normaler SPF fail (ohne Listenheader)
score SPF_FAIL 5.0
Postfix-Konfiguration:
# smtpd_recipient_restrictions
reject_unauth_destination,
check_policy_service unix:private/spf-policy,
permit
# SPF-Richtliniendienst kann Listen-E-Mails erkennen und entsprechend anpassen
rspamd-Konfiguration:
-- SPF-Modulkonfiguration
spf {
-- Unterschiedliche Gewichtung für Mailinglisten anwenden
symbol_fail = "R_SPF_FAIL";
symbol_softfail = "R_SPF_SOFTFAIL";
-- Benutzerdefinierte Regeln
custom_symbols = {
R_SPF_FAIL_LIST = {
score = 2.0,
description = "SPF failed but from mailing list",
condition = function(task)
local spf = task:get_symbol('R_SPF_FAIL')
local list_id = task:get_header('List-Id')
return spf and list_id
end
}
}
}
D.4 Interoperabilitätsempfehlungen
D.4.1 Standardisierung
Standardheader verwenden:
Mailinglisten sollten hinzufügen:
- List-Id: <list-name.domain.com>
- List-Post: <mailto:[email protected]>
- List-Unsubscribe: <mailto:[email protected]>
- Precedence: bulk
DKIM-Signierung:
Listenserver sollten:
1. Ursprüngliche DKIM-Signatur beibehalten (falls vorhanden)
2. Eigene DKIM-Signatur hinzufügen
3. Signierte Header nicht ändern
D.4.2 Kommunikation
Absenderbenachrichtigung:
Listendienst sollte Abonnenten informieren:
- E-Mails werden vom Listenserver erneut gesendet
- MAIL FROM wird umgeschrieben
- Empfehlung, Reply-To für Listenantworten zu verwenden
Empfängerdokumentation:
Empfängerrichtlinien dokumentieren:
- Wie Listen-E-Mails verarbeitet werden
- Whitelist-Mechanismus
- Benutzerkonfigurierbare Optionen
D.5 Zukünftige Entwicklungsrichtung
D.5.1 ARC (Authenticated Received Chain)
RFC 8617 führte ARC ein:
ARC ermöglicht Vermittlern das Hinzufügen von Authentifizierungsinformationen:
- ARC-Seal: Vermittlersignatur
- ARC-Message-Signature: Nachrichtensignatur
- ARC-Authentication-Results: Authentifizierungsergebnisse
Beispiel:
ARC-Seal: i=1; a=rsa-sha256; t=1234567890; cv=none;
d=mailinglist.org; s=arc-seal; b=...
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed;
d=mailinglist.org; s=arc-msg; h=from:to:subject; b=...
ARC-Authentication-Results: i=1; mailinglist.org;
spf=pass [email protected];
dkim=pass header.d=example.com
Vorteile:
- Bewahrt ursprüngliche Authentifizierungsergebnisse
- Ermöglicht Kettenverifizierung
- Empfänger können Vermittlern vertrauen
D.5.2 Empfehlungen
Für neue Bereitstellungen:
- DKIM und SPF implementieren
- DMARC-Richtlinie veröffentlichen
- ARC-Unterstützung in Betracht ziehen (falls Vermittler)
- Interoperabilität mit gängigen Mailinglisten testen
Für bestehende Systeme:
- Strenge SPF-Richtlinien überprüfen
- DMARC-Berichte überwachen
- Problematische Quellen identifizieren (Listen, Weiterleitungen usw.)
- Richtlinien anpassen oder SRS implementieren