Installationsanleitungen für das Proxmox Mail Gateway gibt es viele – die Anleitungen für die individuelle Anpassung kommt oft zu kurz.
Hier ist meine Anpassung ggü. einer Out of the Box Installation beschrieben.
Meine Politik dabei ist, dass E-Mails gar nicht erst angenommen werden, wenn sie Spam sind, denn das größte Übel ist aus meiner Sicht, dass false positives, die im Spam Ordner untergehen vom Sender als zugestellt geglaubt werden.
Das schützt natürlich nicht davor, dass bestellte Eintrittskarten, Gutscheine oder Tickets nicht ankommen, weil der Absender seinen Mailserver nicht im Griff hat. Die E-Mails sind dann erst einmal 'weg' und erfordern erhebliche Nacharbeit mit dem Anbieter – ein Manko von "ich nehme deinen Kram nicht an".
Konsole: Unbound installieren
apt install unbound
127.0.0.1 in die /etc/resolv.conf eintragen (bei LXC Containern: Über Proxmox VE in den DNS Optionen setzen)
# Damit die DNSBL vernünftig funktionieren
Configurations -> Mail Proxy -> Relay Domains:
Eintragen meiner Domains
# E-Mails, die an diese Domains gehen, werden von Proxmox überhaupt aktzeptiert
Configurations -> Mail Proxy -> Options:
Verify Receivers: Yes (550)
# Sicherstellung, dass E-Mails an unbekannte Mailkonten gar nicht erst angenommen werden. Ansonsten gibt es Bounces von Modoboa zum Proxmox, die beim Proxmox verbleiben, von denen der Versender jedoch nichts erfährt.
Use Greylisting for IPv4: No
# Greylisting verzögert die Annahme teilweise erheblich, was sehr schlecht bei Kontoverifizierungs E-Mails ist. Möchte ich nicht und bringt auf Basis meiner Erfahrung keinen erheblichen Mehrwert
Before Queue Filtering: Yes
# Kernanliegen, denn nachträgliche "NDRs on Blocked E-Mails" sind selbst Spam.
DNSBL Sites:
<ID>.zen.dq.spamhaus.net
# Bei Spamhaus registrieren und individuellen Link einfügen. Nicht den offenen zen.spamhaus.org nutzen.
b.barracudacentral.org
# Hier ist aktuell keine Registrierung möglich, soweit ich das sehe. Irgendwann muss das nachgeholt werden
Configurations -> Mail Proxy -> Transports:
Eintragen meines Mailservers
<domain> -> Host: 172.30.0.3, use MX: No
# MX: No -> Weil der MX auf das PMG zeigt
Configurations -> Spam Detector -> Options:
Use Bayesian filter: No
# Bringt kaum Mehrwert für mich
Use RBL checks: Yes
# Dafür haben wir die DNSBL eingetragen
Use Razor2 checks: Yes
# Scheint viel zu bringen
Mail Filter-> What Objects:
Spam Level 10 -> ändern auf Spam Level 6
Spam Level 3 -> ändern auf Spam Level 4
# Sehr individuelle Entscheidung, ich möchte Spam ab Level 6 bereits nicht mehr akzeptieren
Mail Filter:
Block Spam (Level 10): Umbenennen in Level 6 und prüfen, ob hier als What Object der Level 6 Spam steht
Quarantine Spam (Level 7): Regel Deaktivieren. Ich möchte keine Quarantäne. Ganz oder gar nicht
Mark Spam (Level 3): Umbenennen in Level 4:
Action Object: Modify Spam Subject (Kein Notify, kein Qurantine)
What Object: Spam (Level 4)
# Ganz oder gar nicht:
# Ab Level 7 Blocken (durch Before Queue Filter wird rejected)
# Ab Level 4 mit Spam Tag (ggf. durch Modoboa in Spam Ordner einsortieren)
# keine Quarantäne in einem Level dazwischen
# Hier handelt es sich sicherlich um eine sehr individuelle Entscheidung
#####Nun auf die Konsole wechseln:
Transportliste als gültige Empfänger:
Folgendes Skript erstellen, welches täglich die Transportliste nutzt, um 'BCC'-Spam auszusortieren. Das ist für mich Spam, der dadurch klassifiziert wird, dass ich nicht als Empfänger oder CC-Empfänger bin, sondern nur in einer BCC-Liste stehe. Alle E-Mails, in denen die Domains der Transportliste nicht in der Empfängerliste stehen, bekommen einen Scorepunkt. Achtung: Wer in Mailinglisten unterwegs ist, könnte hiermit Probleme bekommen und muss diese ggf. Whitelisten. Auch Weiterleitungen von Free-Mail-Accounts an die eigene Domain sind hiervon betroffen. Ggf. diese Whitelisten. ChatGPT hat tatsächlich bei diesem Skript ganze Arbeit geleistet und mir das mehr oder weniger so ausgespuckt.
~# cat > /usr/local/bin/update-sa-bcc-whitelist.sh
#!/bin/bash
DOMAINS=$(cut -d' ' -f1 /etc/pmg/transport | sed 's/\./\\./g; s/-/\\-/g' | tr '\n' '|' | sed 's/|$//')
cat <<EOF > /etc/mail/spamassassin/98-bcc-transport-domains.cf
header BCC_SPAM_TOCC ToCc !~ /\@(${DOMAINS})/i
score BCC_SPAM_TOCC 1.0
describe BCC_SPAM_TOCC Domain nicht in Transport-Liste
EOF
systemctl restart pmg-smtp-filter
Skript als ausführbar markieren und einmalig ausführen:
chmod +x /usr/local/bin/update-sa-bcc-whitelist.sh
/usr/local/bin/update-sa-bcc-whitelist.sh
Cron Eintrag für die tägliche Aktualisierung dieser Liste
echo "0 0 * * 1 root /usr/local/bin/update-sa-bcc-whitelist.sh" > /etc/cron.d/sa-bcc-update
### Custom Rules in /etc/mail/spamassassin
# Die Regel 98-bcc-transport-domains.cf sollte nun schon existieren
Regel zum erweiterten Markieren von BCC Spam
Diese Regel besteht aus 4 Teilen
Teil 1: Markiert alle E-Mails von einer beliebigen TLD, vergibt jedoch keinen Score
Teil 2: Markiert alle E-Mails von seriösen TLDs. Die Liste kann von euch erweitert werden. Bei mir sind seriös: com, net, org, de, at, ch, eu, shop
Teil 3: Markiert alle E-Mails, die in Liste 1, jedoch nicht in Liste 2 sind, also von _allen anderen_ Domains stammen (com.tr, pl, ru, sbs, ...)
Diese erhalten automatisch einen Score von 2.0, weil sie nahezu immer unseriös sind
Teil 4: Wenn die E-Mail von einer unseriösen TLD stammt, und ich zusätzlich nur im BCC stehe, dann wird ein weiterer "Bonus"-Score von 1.0 vergeben.
E-Mails die dieses Kriterium erfüllen sind fast immer Spam, Ausnahmen könnten ausländische Mailinglisten sein. Die müsste man in die Welcomelist eintragen.
Aber: Wenn alle anderen Kriterien nicht negativ sind, führen diese Kriterien zwar zu einem hohen Score, aber alleine noch nicht zu einem Block (1 + 1 + 2 + 1 = 5, Block ab 6)
cat <<EOF > /etc/mail/spamassassin/99-BCC_TLD.cf
header FROM_TLD_ANY From =~ /\.[A-Za-z0-9-]+>?$/
describe FROM_TLD_ANY Any sender TLD detected
header FROM_TLD_WHITELIST From =~ /\.(com|net|org|de|at|ch|eu|shop)>?$/
describe FROM_TLD_WHITELIST Trusted sender TLDs (common legitimate TLDs)
meta FROM_TLD_OTHER (FROM_TLD_ANY && !FROM_TLD_WHITELIST)
score FROM_TLD_OTHER 2.0
describe FROM_TLD_OTHER Sender uses unusual or risky TLD
meta BCC_AND_UNKNOWN_TLD (FROM_TLD_OTHER && BCC_SPAM_TOCC)
score BCC_AND_UNKNOWN_TLD 1.0
describe awkward sender and unknown recipient
EOF
Positive Word List
Diese Regel(n) beinhalten Wörter, die i.d.R. darauf hindeuten, dass es sich um seriöse E-Mails handelt (z.B. Tickets, Bestellbestätigungen)
Hier bitte <meine Stadt> durch euren Wohnort ersetzen und <mein Name> durch euren Vornamen
-9.0 Score gibt es für die Erwähnung meiner Stadt in der E-Mail, oft handelt es sich dann um Bestellbestätigungen etc. Das möchte ich immer erhalten
-5.0 Score gibt es für die Erwähnung meines Vornamens. Meist ist das ebenfalls ein Hinweis darauf, dass der Empfänger mich persönlich kennt.
Achtung: Die Regel führt ggf. zu Problemen, wenn euer Vorname in eurer E-Mail vorkommt, denn dann kommen generische Mails auch durch wie:
"Hallo
Diese Liste kann beliebig erweitert werden, um z.B. eine Straße oder sonstige, individuellen Wörter. Ich habe hier noch das Wort "Ticket" mit einbezogen.
Hinweis dazu: Schreibt ihr mehrere Wörter in eine Regel, dann wird beim Auffinden mehrerer Wörter nur einmal der Score abgezogen. Schreibt ihr mehrere Wörter in mehrere Regeln, dann werden beim Auffinden mehrerer Wörter der Score mehrmals abgezogen. Beides kann sinnvoll sein.
Ein eingesetztes \b sorgt dafür, dass das Wort von Leerzeichen umgeben sein muss. (Greift dann auf <Vorname>, aber nicht auf <vorname.nachname@..>
Außerdem sorgt das i am Ende dafür, dass Groß- und Kleinschreibung egal ist.
cat <<EOF > /etc/mail/spamassassin/99-positive-word-list
body POSITIVE_WORDS_HIGH /<meine Stadt>/i
score POSITIVE_WORDS_HIGH -9.0
describe POSITIVE_WORDS_HIGH Enthält vertrauenswürdige Wörter
body POSITIVE_WORDS_LOW /<mein Vorname>|Ticket|Versammlung/i
score POSITIVE_WORDS_LOW -5.0
describe POSITIVE_WORDS_LOW Enthält vertrauenswürdige Wörter
EOF