In letzter Zeit landen vermehrt Spam-Mails im Postfach, die als seriöse Geschäftsanfrage getarnt sind (“Inquiry”, “Request for quote”, “Anfrage zu Ihrem Produkt”) und über eine Google Group verschickt werden. Technisch kommen sie über die Infrastruktur von googlegroups.com, also mit gültigem SPF und DKIM von Google. Klassische Reputation-Filter greifen deshalb schlecht. Verräterisch sind die Header: List-Id und List-Unsubscribe zeigen auf googlegroups.com, und es gibt einen X-Google-Group-Id-Header. Eine echte Kundenanfrage an eine Firmenadresse hat diese Header nicht - genau darauf zielt der folgende Sieve-Filter.
Wichtig: Der Filter blockt alle Mails, die über Google Groups laufen. Wer auf Google Groups als Mailingliste angewiesen ist, sollte ihn nicht so einsetzen, sonst kommt davon nichts mehr durch. Aber Hand aufs Herz - wer nutzt heute noch Google Groups?
Beispiele und Pfade beziehen sich auf Uberspace . Die Sieve-Syntax selbst (RFC 5228 ) ist standardisiert und funktioniert auf jedem Mailserver, der Sieve unterstützt; lediglich die Pfade und der Name des Spam-Ordners können abweichen.
Voraussetzungen#
- Uberspace-Account mit eingerichteter E-Mail-Adresse
- SSH-Zugang zum Uberspace
- Sieve ist auf Uberspace standardmäßig über Pigeonhole aktiv
Filter anlegen#
Lege auf dem Uberspace eine neue Sieve-Datei an, zum Beispiel unter ~/users/<mailbox>/sieve/block_googlegroups.sieve (<mailbox> durch den Namen des Postfachs ersetzen, z. B. info):
require ["fileinto"];
# Block Google Groups / Google Mailinglists
if anyof (
header :contains "List-Id" "googlegroups.com",
header :contains "List-Unsubscribe" "googlegroups.com",
exists "X-Google-Group-Id"
) {
fileinto "Spam";
stop;
}Der Filter prüft drei typische Header von Google-Groups-Nachrichten und verschiebt Treffer in den Ordner Spam. stop sorgt dafür, dass keine weiteren Sieve-Regeln ausgeführt werden.
Damit der Filter aktiv wird, muss er in das aktive Sieve-Skript des Postfachs eingebunden sein. Auf Uberspace ist das in der Regel ~/users/<mailbox>/.dovecot.sieve.
Filter testen#
Bevor der Filter live geht, lässt er sich mit sieve-test und einer Test-Mail trockenlaufen.
Test-Mail unter ~/tmp/testmail.eml ablegen:
From: spam@example.com
To: you@example.org
Subject: Test
List-Id: <bhh.example.com>
List-Unsubscribe: <https://groups.google.com/...>
X-Google-Group-Id: 408114700878
TestmailAnschließend sieve-test mit gesetztem Envelope ausführen:
ENVELOPE_SENDER="spammer@example.com"
ENVELOPE_RECIPIENT="info@example.org"
TEST_MAILBOX="info"
EMAIL_FILE="$HOME/tmp/testmail.eml"
sieve-test -D -t - \
-f "$ENVELOPE_SENDER" \
-a "$ENVELOPE_RECIPIENT" \
-l "$HOME/users/$TEST_MAILBOX" \
"$HOME/users/$TEST_MAILBOX/.dovecot.sieve" \
"$EMAIL_FILE"Greift der Filter, enthält die Ausgabe unter anderem:
9: fileinto action
9: store message in mailbox `Spam'
...
Performed actions:
* store message in folder: Spam
Implicit keep:
(none)
Info: final result: successstore message in folder: Spam und das fehlende Implicit keep zeigen, dass die Nachricht ausschließlich in Spam einsortiert wird.
Spam-Ordnernamen prüfen#
Der Ordner, in den fileinto schreibt, muss exakt so heißen wie der IMAP-Ordner. Auf Uberspace heißt er standardmäßig Spam. Per IMAP lässt sich das verifizieren:
openssl s_client -crlf -connect xyz.uberspace.de:993Nach dem TLS-Handshake:
a1 LOGIN "info@example.org" "PASSWORD"
a2 LIST "" "*"
* LIST (\HasNoChildren \UnMarked \Junk) "." Spam
* LIST (\HasNoChildren \UnMarked \Sent) "." Sent
* LIST (\HasNoChildren \UnMarked \Trash) "." TrashDas Flag \Junk markiert den Spam-Ordner. Auf anderen Servern kann er Junk, INBOX.Spam oder ähnlich heißen; in dem Fall den Namen in der fileinto-Zeile entsprechend anpassen.
Verwendete Projekte#
- Uberspace - Hosting-Provider mit Sieve-Support
- Pigeonhole - Sieve-Implementierung für Dovecot
- Sieve (RFC 5228) - standardisierte E-Mail-Filtersprache
- Uberspace Manual: Spam
- Uberspace Manual: Filters
Hat dir das hier geholfen?
Unterstütze gerne via:
