IT security, FreeBSD, Linux, mail server hardening, post-quantum crypto, DNS, retro computing & hands-on hardware hacks. Privater Tech-Blog seit 2003.

Schlagwort: Email (Seite 7 von 11)

Die Akte „IGNORANT“

Ein Lehrstück über Mail, Macht, und die merkwürdige Waffe namens DNS

Es begann nicht mit Explosionen. Es begann mit einem Bounce.

Ein einziger, stiller Bounce – so leise, dass er in der täglichen Flut aus Logzeilen untergehen wollte. Ein 550, trocken wie Kreide:

550 5.1.1 <abuse@domain.tld>: Recipient address rejected: User unknown

Der Absender war ein kleiner Provider, irgendein abgegriffenes Abuse-Postfach, das seit Tagen versucht hatte, jemanden zu erreichen. Die Mail selbst war banal: „Ihre Domain wird für Spam missbraucht, bitte prüfen Sie Ihre Systeme.“ Keine Drohung, kein Drama. Nur ein Handgriff im Maschinenraum: „Schraube locker – bitte nachziehen.“

Noir-style cyber investigation scene with a shadowy analyst at a desk, green terminal showing ‘RFC-Ignorant.org blacklist – no abuse@ / no postmaster@’, and a case board labeled ‘Missing Contacts’ in the background.

Nur war da niemand, der die Schraube nachzog.

Und genau da, in diesem winzigen, fast lächerlichen 550, begann die Operation.

1) Der Mann im Schatten der RFCs

In den frühen 2000ern war das Netz gleichzeitig größer und kleiner. Größer, weil plötzlich jeder einen Mailserver betreiben konnte. Kleiner, weil die Leute, die es wirklich taten, sich kannten – über Mailinglisten, Konferenzen, und die ewigen Schlachten um Anti-Spam-Policy.

Unser Protagonist – nennen wir ihn M. – war keiner von den Lauten. Kein Held, kein Prediger. Er war ein Admin mit dem seltenen Talent, die Welt nicht moralisch zu deuten, sondern operativ.

Seine Welt bestand aus:

  • maillog bei 3 Uhr morgens
  • MRTG-Graphen, die wie EKGs von sterbenden Routern aussahen
  • dig, tcpdump, grep
  • und den RFCs – nicht als Religion, sondern als Werkzeugkiste

M. hatte diese eine fixe Idee: Wenn das Netz schon aus freiwilligen Regeln besteht, dann sind Kontaktadressen die Nieten im Stahl. Ohne Nieten fällt der Kran auseinander. Und „Kontaktadresse“ hieß in diesem Bereich: postmaster@ und abuse@.

  • postmaster@ – der Notausgang für SMTP-Probleme, traditionell Pflicht in der Mailwelt
  • abuse@ – die Stelle, an die man Missbrauch meldet, wenn’s brennt

Und jetzt kam der Haken: Du konntest die beste Abuse-Meldung der Welt schreiben – wenn die Gegenseite „User unknown“ sagt, bleibt der Brand ein Waldbrand.

M. nannte das nicht „Ignoranz“ aus Spaß. Er meinte es wörtlich: Wer nicht erreichbar ist, ist für den Betrieb nicht existent.

2) Die erste Liste – wie man Druck baut, ohne eine Waffe anzufassen

Eines Abends – der Kaffee war kalt, der Pager lauter als nötig – schrieb M. eine kleine Zone-Datei. Kein Kunstwerk. Ein schlichtes Stück Text, ein paar A-Records, eine Reihe von Domains, die auf eine IP zeigten.

So funktionieren DNSBLs: Du drehst die Frage um.

Statt „Ist diese Domain gut?“ fragst du:

„Wenn ich reversed-stuff.blacklist.example nachschlage – bekomme ich eine Antwort?“

Bekommst du eine Antwort, ist es ein Treffer. Kein Treffer, keine Antwort.

DNS als binärer Schalter. Brutal. Elegant. Gefährlich.

M. wusste, was er da baute: eine Art Signalfeuer für Mailadmins. Keine Zensurbehörde – eher ein „da stimmt was nicht“-Indicator, der automatisch verwertbar war.

Das Ziel war simpel formuliert:

  • Domain betreibt MX (oder nutzt Mail)
  • aber postmaster@domain und/oder abuse@domain sind nicht erreichbar
  • also: Eintrag in „IGNORANT“
  • wer die Liste nutzt, kann Mails von dort markieren oder härter behandeln

Nicht blocken war die „sanfte“ Variante. Viele taten’s trotzdem, weil Admins Admins sind: Wenn es eine Kante gibt, wird sie genutzt.

M. sagte dazu nur: „Ich liefere Daten. Policy ist euer Problem.“
Und damit hatte er recht – und auch wieder nicht. Daten sind nie nur Daten, wenn sie in SMTP-Pipelines landen.

3) Der erste Feldtest – RCPT TO als Lügendetektor

Die Methode war bestechend, weil sie so alt war wie SMTP selbst: Frag den Server direkt.

Ein Testlauf sah im Kern so aus:

  • MX der Domain ermitteln
  • SMTP-Session öffnen
  • RCPT TO:<postmaster@domain>
  • RCPT TO:<abuse@domain>
  • Ergebnis klassifizieren

Einige Server antworteten sauber:

  • 250 2.1.5 Ok – Empfänger akzeptiert
  • Andere waren ehrlich brutal:
  • 550 5.1.1 User unknown – Empfänger existiert nicht

Manche waren schlüpfrig:

  • 451 4.7.1 Try again later – temporär, könnte Rate-Limit sein
  • 550 5.7.1 Access denied – Policy-Block, manchmal blind
  • oder sie akzeptierten alles und bouncten später (Backscatter-Paradise)

M. baute Regeln. Nicht perfekt, aber besser als Bauchgefühl.

Die ersten Einträge in der Liste waren nicht „die Bösen“. Es waren oft schlicht:

  • kleine Firmen, die Mail „irgendwie“ hatten
  • Domains mit kaputten Weiterleitungen
  • „wir nutzen einen Provider“-Setups ohne Rollenpostfächer
  • oder verlassene Domains, die noch MX hatten, aber niemand mehr betreute

Und dann: große Namen. Weil große Namen nicht automatisch gute Hygiene bedeuten.
Das machte die Liste berühmt. Und brachte die ersten Feinde.

4) Die Gegenwehr – Agenten mögen keine Aufmerksamkeit, DNSBLs bekommen sie gratis

Sobald die Liste sichtbar war, passierten drei Dinge gleichzeitig:

  • Admins waren dankbar, weil es endlich ein automatisierbares Signal gab.
  • Betroffene waren wütend, weil sie plötzlich Konsequenzen spürten.
  • Spammer wurden neugierig, weil jede Liste auch ein Kartendienst ist.

M. bekam Mails – ironischerweise auf die eigenen Kontaktadressen, die natürlich existierten. Viele waren sachlich: „Wie komme ich runter?“ Andere waren… weniger sachlich.

In der Welt der DNSBLs ist „Runterkommen“ kein Yoga. Es ist Ops:

  • Alias abuse@ anlegen
  • Alias postmaster@ anlegen
  • Monitoring drauf
  • dann Retest / Delist

Aber hier lag der eigentliche Konflikt: Viele wollten nicht „fixen“, sie wollten „weg“. Und zwar sofort. Ohne Aufwand. Ohne Veränderung. Ohne Verantwortung.

In Agentensprache: Sie wollten den Wachmann bestechen, statt die Tür zu reparieren.

M. war nicht käuflich – schon weil das Projekt nicht so funktionierte. Du konntest nicht „zahlen“, damit SMTP plötzlich 250 sagt.

Das machte ihn gefährlich. Nicht durch Macht – durch Unbestechlichkeit. Eine seltene Sorte.

5) Der schmutzige Teil – wenn „Kontakt“ plötzlich selbst ein Angriffsziel ist

Je größer die Liste wurde, desto absurder wurden die Nebeneffekte.

Abuse-Postfächer sind Müllhalden, wenn du sie nicht verteidigst. Sobald klar war: „abuse@ existiert“, wurde es von manchen als Spamziel missbraucht.

Einige Betreiber reagierten vorhersehbar falsch:
Sie löschten abuse@ wieder. „Problem gelöst.“
Und landeten damit wieder in IGNORANT. Kreislauf geschlossen.

Andere machten’s richtig:

  • abuse@ als Ticket-Queue
  • harte Inbound-Filter (aber kein „User unknown“)
  • Rate-Limits
  • klare Auto-Responder mit Case-ID
  • und vor allem: menschliche Bearbeitung, wenn’s ernst wird

Und dann war da die technische Front: Last.

DNSBLs werden nicht „ab und zu“ befragt. Sie werden in Mailpipelines eingebaut – und dann feuert jede eingehende Verbindung Queries ab. Das kann klein anfangen und schnell grotesk werden.

M. musste plötzlich Dinge tun, die in keinem idealistischen Konzeptpapier stehen:

  • Anycast? Schön wär’s.
  • mehrere NS? Klar, aber kostet Zeit und Geld
  • Query-Rate begrenzen, ohne legitime Nutzer zu töten
  • Monitoring, sonst bist du blind
  • DoS-Abwehr, weil irgendwer’s „witzig“ findet

Agenten leben von Logistik. Und Logistik kostet.

Das Projekt, das als mahnender Zeigefinger begann, wurde zu Infrastruktur. Und Infrastruktur frisst Menschen.

6) Die philosophische Krise – wenn ein binärer Schalter moralische Debatten auslöst

Irgendwann war IGNORANT nicht mehr nur „eine Liste“. Es war ein Argument.

Die Debatten drehten sich nicht mehr um SMTP-Codes, sondern um Macht:

  • Darf man Domains „bestrafen“, weil sie nicht erreichbar sind?
  • Ist abuse@ wirklich Pflicht oder nur Tradition?
  • Wer kontrolliert die Liste?
  • Was ist mit False Positives?
  • Was ist mit Domains, die absichtlich keine Mail annehmen?

Die Wahrheit: Alle hatten ein bisschen recht, und genau das ist der Fluch der Netzpolitik.

Technisch ist es simpel: Ein Server akzeptiert oder akzeptiert nicht.

Operativ ist es komplex:
Manche Domains wollen gar kein SMTP, haben aber trotzdem MX wegen Legacy.
Manche Provider verstecken Rollenpostfächer hinter Formularen oder Portalen.
Manche blocken „fremde“ Tests, weil sie Abuse-Scanning für Angriff halten.
Und manche sind schlicht kaputt.

Die Liste war ein Hammer. Viele Probleme sind Nägel. Aber einige sind Glas.

M. wusste: Eine DNSBL ist immer zu grob für die Realität. Sie ist trotzdem nützlich, solange man sie als Signal nutzt – nicht als absolutistische Wahrheit.

Nur: Menschen lieben Absolutismus. Der ist bequem. Und bequem ist gefährlich.

7) Der Zeitenwandel – wenn Mega-Provider die Spielregeln ändern

Dann kam die nächste Welle: Zentralisierung.

Die Mailwelt kippte von „tausend kleine Server“ zu „ein paar riesige“.

Große Provider hatten ihre eigenen Systeme:

  • interne Reputation
  • Feedback-Loops
  • Abuse-Teams
  • automatisierte Takedowns
  • und vor allem: genug Personal, um nicht von einem DNSBL-Projekt abhängig zu sein

Gleichzeitig verschwanden viele kleine Betreiber – oder wurden zu Resellern, die keinen Zugriff mehr auf die eigentlichen Systeme hatten. Du konntest ihnen noch so oft sagen „macht abuse@“ – sie konnten oft nicht.

IGNORANT traf zunehmend die, die am wenigsten Hebel hatten.
Und verfehlte zunehmend die, die wirklich Einfluss hatten.

Das ist der Moment, in dem Agentenfilme normalerweise einen Twist haben: Der Held merkt, dass seine Waffe nicht mehr trifft, was sie treffen soll.

8) Der letzte Einsatz – Hardware stirbt, Menschen auch (nur anders)

Am Ende war es nicht der große Gegner, der IGNORANT beendete. Es war die klassische, schäbige Realität:

  • alte Hardware
  • Wartungsaufwand
  • sinkende Zeit
  • steigender Ärger
  • und das Gefühl, dass man gegen Windmühlen schraubt

Ein DNSBL-Projekt kann man nicht „halb“ betreiben. Wenn du’s tust, wirst du selbst zur Fehlerquelle. Stale Data ist Gift. Und wenn du eine Liste fütterst, die andere in Mailannahme-Policy einbauen, ist „ungepflegt“ ein Sicherheitsrisiko.

M. machte das einzig Verantwortliche: Er zog den Stecker.

Keine dramatische Abschiedsrede. Eher eine Notiz am Schaltschrank:
„Diese Maschine wird nicht mehr gewartet. Benutzung auf eigenes Risiko.“

Die Seite blieb als Geschichte. Als Warnung. Als Artefakt.

Wie ein altes Agentenhandbuch in einem Safe, das keiner mehr benutzt, aber jeder mal lesen sollte.

Field Notes – Was man aus der Akte mitnimmt (ohne Mythos)

A) Rollenpostfächer sind keine Folklore – sie sind Incident-Response-Mechanik

Wenn du Mail betreibst (direkt oder indirekt), brauchst du:

  • postmaster@domain – für SMTP-/Delivery-Probleme, Fehlkonfig, Policy
  • abuse@domain – für Missbrauch, Compromise, Spam, Phishing, Beschwerden

Nicht weil’s „nett“ ist – weil es operativ ist. Ohne erreichbaren Kanal wird jedes Problem langsamer, teurer, größer.

B) DNSBLs sind Werkzeuge – keine Orakel

  • Gut als Signal (Score, Tag, zusätzliche Prüfung) — mehr dazu in RBL und Postfix
  • gefährlich als harte Wahrheit (Reject ohne Kontext)

Wenn du so eine Liste nutzt: Logging, Exceptions, Monitoring. Keine Religion.

C) Tests müssen sauber sein

Ein einfacher, reproduzierbarer Ansatz (mehr dazu unter E-Mail-Spoofing mit Telnet demonstrieren):

domain=example.org
dig +short MX "$domain" | sort -n
mx=$(dig +short MX "$domain" | sort -n | head -1 | awk '{print $2}' | sed 's/\.$//')

# SMTP-Handshake – minimal
openssl s_client -starttls smtp -crlf -connect "$mx:25" <<EOF
EHLO test.invalid
MAIL FROM:<probe@test.invalid>
RCPT TO:<postmaster@$domain>
RCPT TO:<abuse@$domain>
QUIT
EOF

Interpretation:

  • 250 bei RCPT = existiert/akzeptiert
  • 550 5.1.1 = typischer „existiert nicht“
  • 451/421 = temporär – retesten, Rate-Limits beachten
  • „accept-all then bounce“ = Sonderfall – Backscatter-Risiko

D) Der richtige Fix ist banal – und genau deshalb wird er oft nicht gemacht

  • Aliases anlegen
  • auf ein Ticket-/Queue-System routen
  • Filtern/Rate-Limiting, aber kein „User unknown“
  • Monitoring + Eskalation

Das ist kein Hexenwerk. Es ist Hygiene. Genau das macht’s so unbequem.

Epilog – Warum diese Geschichte heute noch zählt

Die Mailwelt hat sich geändert. Die Grundprobleme nicht.

Wenn du heute eine Domain betreibst und irgendwo Mail berührst (warum abuse@ und postmaster@ Pflicht sind) – direkt, über SaaS, über Provider – dann gilt immer noch:

Wenn man dich nicht erreichen kann, existierst du für Incident Response nicht.
Und das Netz ist voll von Leuten, die dir gerne helfen würden, bevor es eskaliert – aber nur, wenn ein Postfach am anderen Ende nicht „User unknown“ sagt.

RFC-Ignorant war keine perfekte Maschine. Aber es war ein klares Signal aus einer Zeit, in der das Netz noch stärker auf freiwillige Betriebskultur angewiesen war.

Eine Agentengeschichte, nur ohne Pistolen.
Stattdessen: DNS, SMTP, und ein 550, der die Welt erklärt.

Fragen? Einfach melden.

Spam aus Schweden

Mir rennt hier gerade eine Kiste aus ?Schweden? ganz schön die Bude ein und versucht seinen SPAM bei mir abzuladen..

Alles von post.lidingo.se[194.22.4.7]… Ein wc -l sagt mir nach einem grep mit | der letzten Stunde: 7606

Die Kiste steht bereits ganz fett in allen möglichen RBL Listen, was ist denn da los? Na ja, für Spaß habe ich noch mal etwas in deren Abuse Mailbox gekippt, vielleicht reagiert ja jemand.

Sind die Schweden jetzt die neuen „Chinesen“? Solche Aktionen bin ich sonst eher von dort gewohnt. Da kann man sich die abuse mail aber auch meist sparen!

So long…

 

 

Fragen? Einfach melden.

Postfix SSL / TLS Cipher Suite Auswertung

Nachdem ich nun am Postfix hinsichtlich der SSL / TLS Sicherheit einige Einstellungen vorgenommen habe und sogar die nutzbare Cipher Suite eingeschränkt habe, da interessiert mich natürlich welche von den Clients genutzt werden. Daher fische ich für meinen Testzeitraum einfach mal per Regex (Regular expression) und egrep ein paar Infos aus dem Logfile und lege es hier zur Begutachtung hin.

So lässt sich nun gut verfolgen, welche Cipher, wie oft genutzt wird.

 

 

Siehe auch: TLS-Infos im E-Mail-Header

Fragen? Einfach melden.

Perfect Forward Secrecy für Postfix und Dovecot konfigurieren

Perfect Forward Secrecy (PFS) sorgt dafür, dass jede TLS-Verbindung einen eigenen temporären Schlüssel verwendet. Selbst wenn jemand den privaten Schlüssel des Servers in die Hände bekommt, kann er damit früher aufgezeichnete Verbindungen nicht entschlüsseln. Für E-Mail ist das besonders relevant, weil Mailverkehr gern auf Vorrat mitgeschnitten wird.

PFS bekommt man durch ECDHE- oder DHE-Schlüsselaustausch. Moderne OpenSSL-Versionen und aktuelle Postfix/Dovecot-Releases machen das Richtige von Haus aus. Trotzdem lohnt sich ein Blick auf die Konfiguration, um sicherzustellen, dass keine veralteten Protokolle oder Cipher-Suiten aktiv sind.

Postfix

Die relevanten Einstellungen in der main.cf:

# Eingehend (smtpd)
smtpd_tls_security_level = may
smtpd_tls_protocols = >=TLSv1.2
smtpd_tls_mandatory_protocols = >=TLSv1.2
smtpd_tls_mandatory_ciphers = medium

# Ausgehend (smtp)
smtp_tls_security_level = dane
smtp_tls_protocols = >=TLSv1.2
smtp_tls_mandatory_protocols = >=TLSv1.2
smtp_tls_mandatory_ciphers = medium

# Cipher-Präferenz beim Server
tls_preempt_cipherlist = yes

>=TLSv1.2 schaltet TLS 1.0 und 1.1 ab. tls_preempt_cipherlist = yes lässt den Server die Cipher-Reihenfolge bestimmen, nicht den Client. Postfix sortiert AEAD-Ciphers (GCM, CHACHA20) automatisch nach vorn, PFS-Ciphers haben Vorrang. Die medium-Stufe schließt alles unterhalb von 128-Bit-Verschlüsselung aus.

Für den ausgehenden Versand ist smtp_tls_security_level = dane die beste Wahl. Damit prüft Postfix TLSA-Records per DANE. Gibt es keinen TLSA-Record, fällt Postfix auf opportunistisches TLS zurück. Wer zusätzlich MTA-STS auswertet, deckt auch Server ohne DNSSEC ab.

Dovecot

In /usr/local/etc/dovecot/conf.d/10-ssl.conf (FreeBSD) bzw. /etc/dovecot/conf.d/10-ssl.conf (Linux):

ssl = required
ssl_min_protocol = TLSv1.2
ssl_prefer_server_ciphers = yes
ssl_options = no_ticket

ssl = required erzwingt TLS für alle Verbindungen. ssl_min_protocol = TLSv1.2 schließt alte Protokolle aus. ssl_prefer_server_ciphers = yes gibt dem Server die Kontrolle über die Cipher-Wahl. no_ticket deaktiviert TLS Session Tickets, die PFS untergraben können wenn der Ticket-Key kompromittiert wird.

Eine explizite Cipher-Liste ist bei aktuellem OpenSSL nicht nötig. Die Defaults bevorzugen ECDHE mit AEAD. Wer es trotzdem einschränken will:

ssl_cipher_list = ECDHE+AESGCM:ECDHE+CHACHA20:DHE+AESGCM:DHE+CHACHA20:!aNULL:!eNULL
ssl_cipher_suites = TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256

ssl_cipher_list gilt für TLS 1.2, ssl_cipher_suites für TLS 1.3. Bei TLS 1.3 ist PFS immer aktiv, da gibt es keine Cipher-Suiten ohne Schlüsselaustausch mehr.

Testen

# Postfix (STARTTLS auf Port 25)
openssl s_client -starttls smtp -connect smtp.kernel-error.de:25 2>/dev/null | grep -E "Protocol|Cipher|Server Temp Key"

# Postfix (Implicit TLS auf Port 465)
openssl s_client -connect smtp.kernel-error.de:465 2>/dev/null | grep -E "Protocol|Cipher|Server Temp Key"

# Dovecot (STARTTLS auf Port 143)
openssl s_client -starttls imap -connect imap.kernel-error.de:143 2>/dev/null | grep -E "Protocol|Cipher|Server Temp Key"

# Dovecot (Implicit TLS auf Port 993)
openssl s_client -connect imap.kernel-error.de:993 2>/dev/null | grep -E "Protocol|Cipher|Server Temp Key"

Entscheidend ist die Zeile Server Temp Key. Steht dort X25519, ECDH P-256 oder DH 2048, ist PFS aktiv. Mit OpenSSL 3.5+ und entsprechender Konfiguration sieht man dort auch X25519MLKEM768 für Post-Quantum-Schlüsselaustausch.

Siehe auch: Post-Quantum TLS für E-Mail

Fragen? Einfach melden.

DMARC und Mailinglisten: Warum Signaturen brechen und wie ARC das löst

Wer eine strenge DMARC-Policy veröffentlicht und gleichzeitig Mailinglisten nutzt, wird früher oder später feststellen: Die eigenen Mails werden auf der Liste zugestellt, aber beim Empfänger abgelehnt. Das liegt nicht an einem Konfigurationsfehler, sondern an der Art wie Mailinglisten funktionieren.

Das Problem

DKIM signiert nicht nur den Body einer E-Mail, sondern auch bestimmte Header wie den Betreff. Mailinglisten-Manager wie Mailman verändern die Mail aber auf dem Weg zum Empfänger. Sie hängen einen Identifier an den Betreff ([liste-name]), fügen einen Footer mit Abmelde-Link an den Body an und setzen eigene Header. Jede dieser Änderungen bricht die DKIM-Signatur.

SPF schlägt ebenfalls fehl, weil die Mail jetzt vom Listserver kommt und nicht mehr vom Mailserver des ursprünglichen Absenders. Die IP des Listservers steht nicht im SPF-Record der Absender-Domain.

DMARC prüft ob mindestens DKIM oder SPF bestehen und das Alignment stimmt. Beides schlägt fehl. Bei einer Policy von p=reject wird die Mail vom empfangenden Server abgelehnt. Der Absender bekommt einen Bounce, der Empfänger sieht die Mail nie.

Workarounds der Listenbetreiber

Mailinglisten-Manager haben verschiedene Strategien entwickelt um das Problem zu umgehen:

From-RewritingDer Absender wird auf die Listenadresse umgeschrieben. DMARC-Alignment passt dann zur Listendomain. Nachteil: Man sieht nicht mehr wer die Mail geschrieben hat.
Subject-Tag weglassenKein [liste] im Betreff. Schont die DKIM-Signatur, aber der Betreff allein reicht nicht, die Signatur kann trotzdem brechen wenn der Body verändert wird.
Footer weglassenKein Abmelde-Link im Body. Schont DKIM, aber Listenbetreiber brauchen den Footer oft aus rechtlichen Gründen.
DKIM re-signingDie Liste signiert die Mail neu mit ihrer eigenen Domain. Funktioniert, aber die originale Signatur des Absenders geht verloren.

Keiner dieser Workarounds ist sauber. Entweder geht Information verloren oder die Authentizität leidet.

ARC: Die eigentliche Lösung

Authenticated Received Chain (RFC 8617) wurde genau für dieses Problem entwickelt. Die Idee: Jeder Zwischenserver (wie ein Listserver) speichert die Authentifizierungsergebnisse der eingehenden Mail in einem ARC-Header und signiert diesen. Der empfangende Server kann dann die Kette zurückverfolgen und sehen, dass die Mail beim Eintritt in die Liste noch gültig war.

Drei Header bilden die Kette:

ARC-Authentication-Results: i=1; lists.example.org;
  dkim=pass header.d=kernel-error.de;
  spf=pass smtp.mailfrom=kernel-error@kernel-error.com;
  dmarc=pass header.from=kernel-error.de

ARC-Message-Signature: i=1; a=rsa-sha256; d=lists.example.org; ...
ARC-Seal: i=1; a=rsa-sha256; d=lists.example.org; cv=none; ...

ARC-Authentication-Results enthält die Ergebnisse zum Zeitpunkt der Annahme. ARC-Message-Signature signiert die Nachricht in ihrem aktuellen Zustand. ARC-Seal signiert die gesamte ARC-Kette und verhindert Manipulation.

Der empfangende Mailserver prüft die ARC-Kette. Wenn er dem Listserver vertraut und die Kette gültig ist, kann er die Mail trotz gebrochener DKIM-Signatur zustellen. Gmail, Microsoft und Yahoo werten ARC bereits aus. rspamd unterstützt ARC-Validierung und ARC-Signing von Haus aus.

In der Praxis

Mailman 3 unterstützt ARC-Signing. Bei Mailman 2 lässt sich ARC über einen vorgeschalteten Milter nachrüsten. Wer rspamd als Milter einsetzt, kann ARC dort aktivieren und braucht keinen separaten Dienst.

Die Empfehlung für Listenbetreiber: ARC-Signing aktivieren und den Betreff nicht verändern (statt [liste] den List-Id-Header nutzen, den alle modernen Mailclients auswerten können). Für Absender mit p=reject: ARC reduziert das Problem erheblich, löst es aber nur wenn die Gegenseite ARC auch prüft. In der Übergangsphase hilft es, bekannte Listserver per DMARC-Whitelist von der Policy auszunehmen.

Fragen? Einfach melden.

Postfix mit DANE und DNSSEC absichern

Meine Domains sind schon lange per DNSSEC gesichert. Für den Webserver hatte ich auch schnell TLSA-Records veröffentlicht, damit die TLS-Verbindung per DANE abgesichert ist. Seit Postfix 2.11 beherrscht auch der MTA die Prüfung von TLSA-Records — damit lässt sich ausgehende E-Mail-Verschlüsselung kryptographisch verifizieren, ohne sich auf das CA-System verlassen zu müssen.

Postfix konfigurieren

Zwei Zeilen in der main.cf reichen, damit Postfix beim Versand TLSA-Records prüft:

postconf -e "smtp_dns_support_level = dnssec"
postconf -e "smtp_tls_security_level = dane"

smtp_dns_support_level = dnssec weist den SMTP-Client an, DNSSEC-validierte DNS-Antworten zu verlangen. smtp_tls_security_level = dane aktiviert die TLSA-Prüfung — Postfix sucht automatisch nach TLSA-Records für den Zielserver. Gibt es keinen TLSA-Record oder kein DNSSEC, fällt Postfix auf opportunistisches TLS zurück. Die Kommunikation mit Servern ohne DANE leidet also nicht. Details stehen in der Postfix DANE-Dokumentation.

TLSA-Record erstellen

Der TLSA-Record enthält einen Hash des TLS-Zertifikats (oder des Public Keys), den der Empfänger-Mailserver im DNS veröffentlicht. So erzeugt man den SHA-256-Hash des Public Keys aus dem Zertifikat:

openssl x509 -in postfix.pem -noout -pubkey \
  | openssl pkey -pubin -outform DER \
  | openssl dgst -sha256

Den Hash trägt man als TLSA-Record in die DNS-Zone ein — für Port 25 (SMTP) und optional Port 465 (Implicit TLS):

_25._tcp.smtp.kernel-error.de.  3600 IN TLSA 3 1 1 8cb0fc6c527506a053f4f14c8464bebbd6dede2738d11468dd953d7d6a3021f1
_465._tcp.smtp.kernel-error.de. 3600 IN TLSA 3 1 1 8cb0fc6c527506a053f4f14c8464bebbd6dede2738d11468dd953d7d6a3021f1

Die Felder 3 1 1 bedeuten: DANE-EE (End Entity, kein CA-Vertrauen nötig), SPKI (nur Public Key, nicht das ganze Zertifikat), SHA-256. Der TTL von 3600 Sekunden ist bewusst kurz — bei einem Zertifikatswechsel soll der alte Record schnell ablaufen. Mehr zum Aufbau von TLSA-Records steht in RFC 7672.

Testen

Mit posttls-finger (Teil von Postfix) lässt sich prüfen, ob die DANE-Verifikation funktioniert:

posttls-finger -t30 -T180 -c -L verbose,summary kernel-error.de

Die entscheidende Zeile in der Ausgabe:

Verified TLS connection established to smtp.kernel-error.de[...]:25:
  TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)

Verified statt Untrusted — der TLSA-Record stimmt mit dem Zertifikat überein, die Verbindung ist DANE-verifiziert. Im Postfix-Log sieht man denselben Unterschied:

smtp[3779]: Verified TLS connection established to mx02.example.de[...]:25
smtp[3779]: Untrusted TLS connection established to smtp2.example.de[...]:25

Verified = DANE-geprüft und in Ordnung. Untrusted = TLS aktiv, aber kein gültiger TLSA-Record vorhanden — die Verschlüsselung funktioniert trotzdem, nur ohne kryptographische Verifikation des Zertifikats.

Warum DANE besser ist als das CA-System

DANE verankert das Vertrauen im DNS statt bei Certificate Authorities. Der Domaininhaber veröffentlicht den Hash seines Zertifikats selbst — DNSSEC schützt den Record vor Manipulation. Keine CA kann ein falsches Zertifikat für die Domain ausstellen und damit die Verbindung aufbrechen. Das Ganze kostet nichts außer einem DNS-Record und funktioniert für jeden, der DNSSEC betreibt.

Zum Vergleich: Das damalige „E-Mail made in Germany“ (EmiG) setzte auf eine TÜV-Zertifizierung, die sich nur große Provider leisten konnten. Sicherheit nur für Unternehmen mit Budget — das ist das Gegenteil von dem, was ich unterstütze.


Update August 2014: Ich habe Mailgraph um DANE-Graphen erweitert, um den Anteil verifizierter Verbindungen zu visualisieren.

Siehe auch: TLSA/DANE-Records prüfen, TLSA- und DANE-Records manuell prüfen: Schritt für Schritt mit OpenSSL, Postfix und DANE: „Server certificate not verified" debuggen, Postfix: Eingehende E-Mails ohne TLS ablehnen

Fragen? Einfach melden.

Contabo VPS

Lange habe ich nach einem ordentlichen Anbieter für einen neuen vServer gesucht. Dabei galt es folgende Kriterien zu erfüllen:

– Min. 2 IPv4 Adressen
– Ein kleines IPv6 Netz
– Unbegrenzter Traffic
– Min. 100Mbit/s Anbindung
– Min. 2 CPUs
– Min. 4 GB RAM
– Min. 200 GB HDD
– Linux als OS

Natürlich habe ich zuerst die Großen abgeklappert.

– 1und1 kein IPv6 (warum nicht? Ich meine 2014 HALLO!?!?)
– Strato nur EINE IPv6 Adresse (Ö_ö eine IPv6 Adresse…. eine?)
– Host Europe kein IPv6 bei den vServer nur bei den Root Server EINE (tz..)
– 1blue kein IPv6
– Server4you kein IPv6 beim vServer, sonst soll es wohl gehen…
– Serverloft… Joar, die Kosten sind mir zu hoch. Sind aber auch keine vServer.
– usw. usw. usw…

IPv6 scheint noch immer ein größeres Problem zu sein, ist nicht voll integriert oder ist (wie auch meherer IPv4 Adressen) hochpreisigen Produkten vorbehalten.

Dann bin ich auf Contabo gestoßen. Ich war Opfer der Werbung im Linux Magazin 🙁 Preis/Leistung sah dabei einfach zu gut aus. Daher habe ich angerufen. Ohne lange Hoteline sprach ich mit einem Menschen. Diesem stellte ich direkt meine Fragen und er konnte sie überraschenderweise direkt und sicher beantworten. Mit sicher meine ich, dass man nicht das Gefühl hatte er würde es irgendwo nachlesen oder wäre nach einer kurzen Schulung auf die Hotline losgelassen worden. Nein, es war wirklich gut!

Natürlich habe ich abschließend die Frage gestellt wie es klappt dass die angegebene Leistung so gut ist, der Support so schön zu funktionieren scheint und die Ausstattung und Randbedingungen ebenfalls so gut erscheinen. Nach hörbarem Schmunzeln bekam ich die Antwort: Das würde oft gefragt…. Ich müsse es so sehen. Contabo selbst stellt wirklich nur die Hardware und die Infrastruktur. Für das System selbst ist man selbst verantwortlich. Wenn es da mal Probleme gibt, könnte der Support zwar helfen diese wäre dann aber Kostenpflichtig (er meinte damit wenn man seine Kiste mal zerfriemelt hat). Man müsse schon wissen was man tut, dieses würden Contabo bei seinen Produkten einfach voraussetzten.

Schien also genau das zu sein was ich gesucht habe! Daher habe ich bestellt… Wobei ich genau eine solche Antwort von jedem Root-Server erwarten würde.

Alles ging schnell und für mich verständlich online. Ich bekam eine E-Mail mit der Bitte Geld zu überweisen (wer konnte damit nur rechnen. ). Kurz nach meiner Überweisung flatterten bereits die Zugangsdaten in mein Postfach.

Wie bei der Bestellung angeklickt hatte ich schon eine zweite IPv4 Adresse und konnte die PTR-Records flott im Webmenü eintragen. Um die PTR-Records der IPv6 Adressen zu ändern musste ich kurz den Support per E-Mail bemühen. Freitags um 23:36 Uhr habe ich ihn angemailt als ich morgens aufgewacht bin hatte ich schon die Bestätigung in meinem Postfach. Das System selbst ist genau wie bestellt und hat mehr Leistungsreserven als erwartet. Ich habe 8GB Arbeitsspeicher, 400Gb Festplattenplatz und zwei CPUs mit 3,4GHz. Auf der Webseite war nur etwas von 3,2GHz zu lesen. Ok ok… die paar MHz machen den Braten jetzt nicht fett, das es Core I7 CPUs sind hat mich denn noch überrascht!

Ich habe natürlich Speicher und CPU mal mit Arbeit beworfen um zu testen ob es nicht nur Schein ist. Alles prima…. Die Storage Anbindung ist ja gerne mal etwas zu genau auf den Punkt dimensioniert. Bei meinem System kann ich nicht klagen. Performance und I/Os sind wunderbar und mehr als ausreichend.

100Mbit/s sind auch 100Mbit/s… Wobei man hier auf das „Kleingedruckte“ achten muss: Keine zusätzlichen Kosten durch Traffic (bei einem Durchschnittsverbrauch über 40 Mbit/s in einem zusammenhängenden Zeitraum von mindestens 5 Tagen erfolgt eine Umstellung der Anbindung auf 10 Mbit/s).

Zu dem Thema muss ich dann wohl mal eine kleine Auswertung vom Support anfordern. Sollte doch machbar sein, oder?

Ob mich dieses noch ärgert, werde ich herausfinden. Ob mich noch mehr ärgert wird sich zeigen!

Fragen? Einfach melden.

Grobe Schnitzer im der DNS Konfiguration testen.

Da habe ich doch gerade noch einen Tipp bekommen (danke Felix). Möchte man „mal eben“ seine DNS Konfiguration inkl. Mailserver testen wird einem ein solcher Test über die Webseite www.dnsinspect.com angeboten.

Der Test geht natürlich jetzt nichts ins absolute Detail aber die ganz groben Fehler findet er dann schon. Auch so Dinge wie PRT – HELO/EHLO – Hostname oder postmaster und abuse Adresse. Zu gesprächige Nameserver usw. usw. usw…

Einfach zum Spaß mal eure Domain reinwerfen und schauen was passiert .-)

http://www.dnsinspect.com/kernel-error.de

Fragen? Einfach melden.

Schönes Tool zum Testen / Prüfen seines SPF oder DMARC RECORDS

Die Webseite https://dmarcian.com stellt zwei sehr schöne Möglichkeiten zur Verfügung um seinen >> DMARC-RECORD << und oder seinen >> SPF-RECORD << zu testen.

Am besten gefällt mir dabei der SPF Test, denn dieser sammelt auch gleich alle nötigen DNS Lookups zusammen und visualisiert sie einem recht ansprechend.

Bunte Bilder *wwwööööööööööhhhhhhhhhyyyyyyyyy*

Ja, wenn es hilft schick mir eine E-Mail und ich sage dir ob deine Konfiguration sauber ist.

Viel Spaß!

Siehe auch: SPF-Record einrichten

Fragen? Einfach melden.

SPF-Record einrichten: Wie du festlegst, wer für deine Domain Mails versenden darf

Siehe auch: SPF Records

SPF (Sender Policy Framework, RFC 7208) legt per DNS fest, welche Server für eine Domain E-Mails versenden dürfen. Empfangende Mailserver prüfen bei jeder eingehenden Mail, ob die IP-Adresse des sendenden Servers im SPF-Record der Absenderdomain steht. Steht sie nicht drin, wird die Mail je nach Policy abgewiesen oder markiert.

Aufbau eines SPF-Records

Ein SPF-Record ist ein TXT-Record im DNS der Domain. Ein typisches Beispiel:

kernel-error.de.  IN  TXT  "v=spf1 ip4:148.251.30.205 ip6:2a01:4f8:262:4716::25 mx -all"

Wichtig: Der alte DNS-Record-Typ IN SPF ist seit RFC 7208 (2014) abgeschafft. Nur IN TXT verwenden.

Mechanismen

Jeder Mechanismus definiert eine Regel, gegen die die IP des sendenden Servers geprüft wird:

ip4:148.251.30.205Diese IPv4-Adresse darf senden. Auch Netze möglich: ip4:148.251.30.0/24
ip6:2a01:4f8:...Diese IPv6-Adresse darf senden
mxAlle IP-Adressen der MX-Records der Domain dürfen senden
aDie IP-Adresse des A/AAAA-Records der Domain darf senden
a:smtp.example.deDie IP-Adresse eines bestimmten Hosts darf senden
include:example.deDie SPF-Policy einer anderen Domain mit einbeziehen (z.B. für externe Dienstleister)
redirect=example.deGesamte SPF-Policy von einer anderen Domain übernehmen

Nicht mehr verwenden: Der ptr-Mechanismus ist seit RFC 7208 explizit nicht empfohlen. Er erzeugt unnötige Reverse-DNS-Abfragen und ist fehleranfällig.

Qualifier: Was passiert bei einem Treffer?

Vor jedem Mechanismus kann ein Qualifier stehen, der bestimmt, was mit der Mail passiert:

+ (Pass)Erlaubt (Standard, wenn kein Qualifier angegeben)
- (Fail)Nicht erlaubt — Mail soll abgewiesen werden
~ (SoftFail)Nicht erlaubt, aber nicht hart ablehnen — Mail markieren
? (Neutral)Keine Aussage — wie kein SPF

Hardfail oder Softfail?

Am Ende des SPF-Records steht der Catch-All-Mechanismus all mit einem Qualifier:

  • -all (Hardfail) — alle Server die nicht explizit gelistet sind, dürfen nicht senden. Empfänger soll ablehnen.
  • ~all (Softfail) — alle nicht gelisteten Server sind verdächtig, aber nicht definitiv verboten. Mail wird zugestellt, aber markiert.

In der Praxis: -all ist die klare Empfehlung, wenn man weiß, welche Server für die Domain senden. ~all war lange der konservative Ansatz, weil manche Empfänger SPF-Fails zu aggressiv behandelten. Seit DMARC den Umgang mit SPF-Ergebnissen standardisiert hat, ist das kein Argument mehr. Wer DMARC einsetzt, sollte -all verwenden.

Das 10-Lookup-Limit

RFC 7208 erlaubt maximal 10 DNS-Abfragen pro SPF-Prüfung. Jeder include, mx, a und redirect zählt als Lookup. ip4 und ip6 verursachen keine Abfrage, die stehen direkt im Record.

Das wird schnell zum Problem, wenn man externe Dienstleister einbindet. Ein include:_spf.google.com zieht allein schon 3-4 weitere Lookups nach sich. Wer Office 365, Google Workspace und einen Newsletter-Dienst kombiniert, sprengt das Limit leicht. Die Fehlermeldung:

PermError SPF Permanent Error: Too many DNS lookups

Lösung: Den SPF-Record so schlank wie möglich halten. Wo möglich ip4/ip6 statt include verwenden, das verbraucht keine Lookups. Externe Dienstleister nach IP-Ranges fragen statt blind deren Include-Ketten zu übernehmen.

SPF-Record testen

# SPF-Record abfragen
dig TXT kernel-error.de +short

# Ergebnis prüfen — sollte den v=spf1 Record zeigen
# Mehrere TXT-Records sind normal (SPF, DMARC, DKIM Policy etc.)

Für einen vollständigen Check mit Lookup-Zählung eignen sich Online-Tools wie kitterman.com/spf oder mxtoolbox.com. Die zeigen auch verschachtelte Includes auf und warnen bei Überschreitung des 10-Lookup-Limits.

SPF allein reicht nicht

SPF prüft die IP-Adresse gegen den Envelope-From (die Adresse aus dem SMTP-MAIL FROM-Kommando), nicht gegen den From:-Header, den der Empfänger sieht. Ein Angreifer kann also eine Mail mit gefälschtem From:-Header senden, solange der Envelope-From eine Domain ist, die er kontrolliert. Der Empfänger sieht den gefälschten Absender, SPF sagt trotzdem „Pass“.

Genau dieses Problem löst DMARC: Es prüft, ob die Domain im From:-Header mit der SPF-Domain (Alignment) oder der DKIM-Signatur übereinstimmt. Erst SPF + DKIM + DMARC zusammen ergeben eine vollständige E-Mail-Authentifizierung. Fragen? Einfach melden.

« Ältere Beiträge Neuere Beiträge »

© 2026 -=Kernel-Error=-RSS

Theme von Anders NorénHoch ↑