Zum Inhalt springen

Greylisting: die Wirkung messen statt sie zu behaupten

Zahlen aus dem Maillog statt Bauchgefühl: wie du ermittelst, welcher Anteil der abgewiesenen Zustellversuche nie wiederkommt – und was das über deine Filterkette aussagt.

Zuletzt geprüft:

Das Wichtigste

  • Die aussagekräftige Kennzahl ist nicht die Spammenge im Postfach, sondern der Anteil verzögerter Triplets, die nie ein zweites Mal auftauchen.
  • Ohne Messung vor der Einführung lässt sich der Effekt später keiner Massnahme zuordnen.
  • Ein hoher Wiederkehr-Anteil bedeutet nicht, dass Greylisting nichts taugt – er bedeutet, dass der Spam über korrekt arbeitende Mailserver kommt.

Greylisting wird oft mit einer Zahl beworben, die aus einer bestimmten Zeit und einer bestimmten Konfiguration stammt. Für die eigene Installation sagt sie wenig. Die gute Nachricht: Der tatsächliche Effekt steht im eigenen Maillog.

Was gemessen werden soll

Die naheliegende Kennzahl – “weniger Spam im Postfach” – ist die unbrauchbarste. Sie vermischt alle Filterstufen, ändert sich mit dem allgemeinen Spamaufkommen und lässt sich keiner Massnahme zuordnen.

Aussagekräftig ist stattdessen: Welcher Anteil der verzögerten Triplets taucht nie ein zweites Mal auf? Genau das ist der Anteil, den Greylisting verhindert hat.

Auswertung mit Postgrey

#!/usr/bin/env bash
# Auswertung der letzten sieben Tage
LOG=/var/log/mail.log

# alle verzögerten Triplets
grep 'action=greylist' "$LOG" \
  | grep -oE 'client_address=[^,]+, sender=[^,]+, recipient=[^ ]+' \
  | sort -u > /tmp/verzoegert.txt

# alle später angenommenen Zustellungen
grep 'action=pass' "$LOG" \
  | grep -oE 'client_address=[^,]+, sender=[^,]+, recipient=[^ ]+' \
  | sort -u > /tmp/durch.txt

GESAMT=$(wc -l < /tmp/verzoegert.txt)
DURCH=$(comm -12 /tmp/verzoegert.txt /tmp/durch.txt | wc -l)
WEG=$((GESAMT - DURCH))

printf 'Verzögert:        %6d\n' "$GESAMT"
printf 'Später zugestellt: %6d (%d%%)\n' "$DURCH" $((DURCH * 100 / GESAMT))
printf 'Nie wiedergekommen:%6d (%d%%)\n' "$WEG"  $((WEG   * 100 / GESAMT))

Die letzte Zeile ist die Antwort. Sie sagt, welcher Anteil der Zustellversuche durch Greylisting tatsächlich verhindert wurde.

Die Zahl richtig einordnen

Hoher Anteil “nie wiedergekommen”. Greylisting arbeitet wie vorgesehen. Der Grossteil der Zustellversuche stammt von Programmen ohne Wiederholungslogik.

Hoher Anteil “später zugestellt”. Das bedeutet nicht, dass Greylisting nichts taugt – es bedeutet, dass der Spam über Mailserver kommt, die sich an SMTP halten. Typisch für Versand über kompromittierte Konten bei echten Providern. In diesem Fall verschiebt Greylisting nur die Zustellzeit, und die eigentliche Arbeit muss eine Stufe höher passieren: bei der Absenderauthentifizierung und im Inhaltsfilter.

Beide Ergebnisse sind nützlich. Das zweite ist sogar wertvoller, weil es zeigt, wo weitere Massnahmen ansetzen müssen.

Zwei Kennzahlen, die dazugehören

Verzögerung für legitime Absender. Wie lange dauert die erste Mail eines neuen Kontakts wirklich?

# Abstand zwischen Erstversuch und Annahme, in Minuten
grep -E 'action=(greylist|pass)' /var/log/mail.log \
  | awk '{print $1, $2, $3, $0}' | sort | head -200

Liegt der Median deutlich über der eingestellten Sperrfrist, wiederholen die Gegenstellen später als erwartet, und das Bestätigungsfenster sollte grosszügiger sein.

Whitelist-Kandidaten. Absender, die immer wieder verzögert werden, obwohl sie legitim sind:

grep 'action=greylist' /var/log/mail.log \
  | grep -oE 'client_address=[^,]+' | sort | uniq -c | sort -rn | head -20

Wer hier oben steht und ein bekannter Dienst ist, gehört auf die Whitelist. Das sind typischerweise Versender, die zwischen den Versuchen die IP wechseln – für die passt das Triplet nie, und sie werden bei jeder Mail erneut ausgebremst.

Vorher messen

Der wichtigste Teil kommt zeitlich zuerst: Vor der Einführung eine Woche lang die Zustellversuche zählen. Ohne diesen Ausgangswert lässt sich später kein Effekt belegen – und man endet bei derselben Art von Behauptung, die man eigentlich prüfen wollte.

# Zustellversuche pro Tag, vor der Einführung
grep 'postfix/smtpd' /var/log/mail.log \
  | grep -c 'connect from'

Die vollständige Erklärung von Funktionsweise, Zeitwerten und Whitelists steht im Greylisting-Guide.

Häufige Fragen

Welchen Zeitraum sollte ich auswerten?

Mindestens sieben Tage, damit Wochenend- und Werktagsmuster beide enthalten sind. Bei geringem Mailaufkommen eher vier Wochen, sonst schwanken die Zahlen zu stark.

Was ist ein guter Wert?

Es gibt keinen allgemeinen Zielwert. Aussagekräftig ist der Vergleich mit dem eigenen Vormonat und die Einordnung: Kommen über 80 Prozent der verzögerten Triplets wieder, arbeitet der Spam über echte Mailserver und die nächste Filterstufe muss die Arbeit übernehmen.