[TUTORIAL] Installationsempfehlung

ivenae

Well-Known Member
Feb 11, 2022
145
65
48
42
Ich habe mich in den letzten Tagen intensiv mit Proxmox MG beschäftigt und fand die Anleitung nicht immer hilfreich.
Mein Spam wird um 95% reduziert, dabei möchte ich hier erklären, was ich ggü. der Out of the Box Installation verändert habe, um das zu erreichen. Das ist aus meiner Sicht etwas, was in vielen Anleitungen zu kurz kommt.
Danke an das Proxmox Team für dieses hervorragende Produkt und danke an alle, auf deren Kommentare und Empfehlungen hin ich Dinge umgesetzt habe. Kommentieren erwünscht, wenn euch dieser Beitrag gefällt, lasst mir ein Abo und ein Like ... Spaß.

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 in meinem Spam Ordner untergehen vom Sender als zugestellt geglaubt werden. Das schützt natürlich nicht davor, wenn bestellte Konzertkarten o.ä. bei mir nicht ankommen, weil der Absender seinen Mailserver nicht im Griff hat. Die Konzertkarten sind dann vermutlich 'weg' und erfordern erhebliche Nacharbeit. Ein Manko von "ich nehme deinen Kram nicht an".

Basiskonfiguration Proxmox Mail Gateway
====================================

Configuration -> Mail Proxy -> Relay Domains:

Eintragen meiner Domains
# E-Mails, die an diese Domains gehen, werden von Proxmox überhaupt aktzeptiert


Configuration -> Mail Proxy -> Options:
# Message Size (bytes): 104857600
Deutlich erhöhen, sonst gibt es Probleme mit Spam und DKIM Signaturen bei großen E-Mails.

Reject Unknown Clients: No
# Der rdns des Servers muss korrekt gesetzt sein. Geht in 98% gut, aber in 2% haben kleine Admins ihre Umgebung nicht korrekt gepflegt, die haben dann keine Chance euch Mails zu senden. Das greift vor jeglicher Whitelist. Daher besser ausgeschaltet lassen.

Reject Unknown Senders: Yes
# Die Absenderdomain muss existieren, damit die E-Mail angenommen wird. E-Mails von 'ausgedachten' Absenderdomains werden temporär rejected (4xx error code). Das macht ca. 20% der Spams aus, die nicht Gefahr laufen, im SA (Spamassassin) durchzurutschen. In ca. 1 % der Fälle schlägt die Prüfung fehl, dann wird die E-Mail 5 min später beim nächsten Einsendeversuch akzeptiert. In manchen Fällen wird die E-Mail von Spammern über 100x eingeliefert und nie akzeptiert, das nervt leider ein wenig.

Verify Receivers: Yes (550)
# Sicherstellung, dass E-Mails an unbekannte Mailkonten gar nicht erst angenommen werden. Ansonsten gibt es Bounces von eurem E-Mail Server zum Proxmox, die beim Proxmox verbleiben, von denen der Versender jedoch nichts erfährt.
# Edit: Ich hatte einige Versuche, E-Mail Adressen von Geschäftsführern zu erraten. Absender waren ein unfassbar großes Botnetz aus der ganzen Welt (jeder Versuch über einen anderen Server). Ich bin daher dazu übergegangen, das auszuschalten und eine ungelesene Catchall Adresse einzurichten. Nachteil: Tippfehler im Empfänger bekommt der seriöse Versender nicht mehr mit)

Use Greylisting for IPv4: No
# Greylisting verzögert die Annahme teilweise erheblich, was sehr schlecht bei Kontoverifizierungs E-Mails ist. Leider beherrscht PMG nicht die Möglichkeit, nur E-Mails mit fragwürdigem Spamscsore temporär zu rejecten, wie es rspamd beherrscht. In der hier gebotenen Qualität des Sendertripplets ist es aus meiner Sicht unbrauchbar.

Use SPF: (Yes)
# E-Mails mit falscher SPF werden abgelehnt. Habe ich bisher wenig Probleme mit, könnte aber durchaus mal problematisch sein. Gewisses Risko.

Before Queue Filtering: Yes
# Kernanliegen, denn nachträgliche "NDRs on Blocked E-Mails" sind selbst Spam.


Configuration -> Mail Proxy -> Transports:
Eintragen meines Mailservers
<domain> -> Host: 172.30.0.3, use MX: No
# MX: No -> Weil der MX auf das PMG zeigt


Configuration -> Spam Detector -> Options:
Max Spam Size (bytes): 104857600
# Muss gleich sein wie unter Mail Proxy.

Mail Filter:
Block Spam (Level 10) aktivieren: Mails mit hoher Spam Wahrscheinlichkeit sollen direkt abgelehnt werden.
Mark Spam und Quarantäne nach eigenen Vorstellungen konfigurieren.


Installation und Konfiguration wirksamer Mailfilter
===========================================

Die Reihenfolge der hier angegebenen Filter hat eine Bedeutung. Die hier zuerst behandelten Filter filtern die Mail früher heraus und benötigen dafür deutlich weniger CPU Last als spätere SA-Filter.
Gleichzeitig haben die hier früh in der Anleitung behandelten filter eine höhere Sensitivität (d.h.: eine geringere false-positive Quote).
Man kann daher die Anleitung erst einmal nur zum Teil abarbeiten und erzielt dann schon recht gute Ergebnisse.
Unabhängig davon ist aber das Tuning der Custom Scores am Ende des ersten Beitrags aus meiner Sicht wichtig, das ist ja gerade der Kern des PMG.

Filter vor der Übermittlung von Mailheader ('rejected')

Mails, die an dieser Stelle abgewiesen werden, stehen im Tracking Center als rejected mit schwarzem Kreuz Symbol. An dieser Stelle liegen keinerlei Informationen des E-Mail Headers vor, außer dem Sende-Server (HELO + IP), Envelope-From und Empfänger. Es greifen hier sämtliche Welcome-Lists innerhalb des PMG noch nicht.

DNS-Blocklists (DNSBL):

(Filtert ca. 50 % eures Spam)

Configuration -> Spam Detector -> Options:
Use RBL checks: Yes


Wir benötigen "unbound" für rekursive DNS Anfragen, das ist bei allen DNSBL notwendige Voraussetzung.

Code:
apt install unbound

Editieren der /etc/resolv.conf

Code:
nameserver 127.0.0.1

bei LXC Containern stattdessen: Über Proxmox VE in den DNS Optionen setzen


Configuration -> Mail Proxy -> Options:
Bei Spamhaus muss ein Account erstellt werden und die individuelle DQS ID eingefügt werden. Alle anderen sind ohne Registrierung nutzbar.

DNSBL Sites:
<ID>.zen.dq.spamhaus.net
b.barracudacentral.org
bl.mailspike.net
all.spamrats.com
dnsbl-1.uceprotect.net



Filter nach der Übermittlung von Mailheader, vor der Übermittlung von Mailbody ('rejected')

Mails, die an dieser Stelle abgewiesen werden, stehen im Tracking Center als rejected mit schwarzem Kreuz Symbol. An dieser Stelle liegt der äußere Header der E-Mail vor, Envelope-From, Empfänger und weitere Header der E-Mail, aber noch kein Subject oder (Body-)From.

Die Welcomelist unter Configuration -> Mail Proxy -> Welcomelist sollte diesen Service überschreiben (getestet habe ich das nicht), weil diese in die Postfix senderaccess ausgeführt wird. Die Mail Filter -> Who Object -> Welcomelist wird erst im SA berücksichtigt – die hat hier keine Wirkung.

Google Spam beherrschen: Dauerausnahme in allen DNSBL
(Filtert ca. 25 % eures Spam)

Google sendet auf mehreren Ebenen Spam, welchen wir mit der folgenden Anleitung direkt im Postfix/Postscreen rejecten.
- firebaseapp.com (Google Service) verschickt ausschließlich Spam und

- firebase-Authorisierte Dienste: Senden über Google Server mit eigener Domain. Erkennt man darin, dass der authorisierende SPF Eintrag _sfp.firebasemail.com ist.

- Google Groups:
Spammer nutzen Google Groups Listen, weil sie kein Opt-In des Empfängers benötigen und Mailinglisten standardmäßig seitens Spamassassin einen Score von "-1.0" zugewiesen bekommen. Neben den eigentlichen Spams erreichen einen auch NDRs oder wütende Antworten von Empfängern.

- Google Usercontent:
Server von Google, der nur Spam versendet

All diese Dienste kann man sehr früh in Postfix blockieren. Bonus: Da Google als Absender prinzipiell nicht auf den DNSBL des vorigen Kapitels steht, gibt es hier keine Überlappung der Filter, also ja: mit den DNSBL und diesem Google-Filter sind 75% des Spamaufkommens wirksam und nahezu ohne false-positive heraus gefiltert! Beschreibung hier:


Ich persönlich nutze die dort vorhandene erweiterte Version mit Autoblacklist. Hiermit werden Domains, von denen nur Mist kam schon im Postfix blockiert.

Filter nach der Übermittlung von Mailbody ('blocked')

Ab hier liegt der vollständige Mailbody vor und wird in die Spamassassin Filterqueue gesendet. Hier beginnen die CPU-lastigen Filter. E-Mails werden im before-queue-filtering nach wie vor 'rejected', d.h. die Annahme wird verweigert und der Absender bekommen eine entsprechende Meldung von ihrem eigenen Mailserver.
Im Tracking Center stehen diese E-Mails als 'blocked' mit roter Hinterlegung.


Rspamd als CustomCheck integrieren

Rspamd bringt eine eigene Filterlogik mit und bietet weitreichende Funktionen (u.a. gut funktionierendes Greylisting), welches wir hier allerdings alles brach liegen lassen.
Wir nutzen ausschließlich den CustomScore, der sich zu unserem SA Score addiert.

Beschreibung zur Einrichtung hier:



Razor

Razor muss im PMG aktiviert werden

Configurations -> Spam Detector -> Options:
Use Razor2 checks: Yes

Und zusätzlich auf der Konsole einmalig registriert werden:

Code:
razor-admin -create
razor-admin -register

Der Default Score ist viel zu niedrig, also erhöhen wir diesen:

Configurations -> Spam Detector -> Custom Scores:
RAZOR2_CF_RANGE_51_100 : 8
RAZOR2_CHECK : 8

-> Apply Scores nicht vergessen


Pyzor

Pyzor empfehle ich als Erweiterung zu Razor2. Beide stammen aus der gleichen Entwicklungslinie, besitzen jedoch andere Datenbanken und finden daher auch unterschiedliche Mails.

Code:
apt install pyzor


Code:
mkdir -p /etc/pmg/templates
cp  /var/lib/pmg/templates/init.pre.in /etc/pmg/templates/

/etc/pmg/templates/init.pre.in editieren und folgendes einfügen
Code:
loadplugin Mail::SpamAssassin::Plugin::Pyzor

/etc/pmg/spamassassin/local.cf editieren und folgendes einfügen
Code:
use_pyzor 1

Template Synchronisieren und PMG neustarten
Code:
pmgconfig sync --restart

Der Default Score ist viel zu niedrig, also erhöhen wir diesen:

Configurations -> Spam Detector -> Custom Scores:
PYZOR_CHECK : 8

-> Apply Scores nicht vergessen


Spamhausintegration in Spamassassin

Spamhaus bietet nicht nur die DNSBL (Ausschließlich Blockierung unseriöser Absender-IPs), sondern auch eine Spamassassin Integration, die manuell nachinstalliert werden muss und u.a. Inhaltsfilterung machen, z.B. Links im E-Mail Body zu bekannten Blacklist-Domains enthalten. Sie liefern (analog zu Pyzor und Razor) gute und sichere Funde. Die Filter im Tracking-Center beginnen alle mit SH.

Anleitung von hier: https://github.com/spamhaus/spamassassin-dqs?tab=readme-ov-file#instructions-for-spamassassin-400

Achtung: Hier muss ihr Spamhaus DQ-Key eingefügt werden.
Code:
apt install git
git clone https://github.com/spamhaus/spamassassin-dqs
cd spamassassin-dqs/4.0.0+
sed -i -e 's/your_DQS_key/<your spamhaus key>/g' sh.cf
sed -i -e 's/your_DQS_key/<your spamhaus key>/g' sh_hbl.cf

Edit sh.pre with your editor of choice, and look at the first line
You will need to replace <config_directory> with your actual configuration directory /etc/mail/spamassassin, the line will become:

Code:
loadplugin       Mail::SpamAssassin::Plugin::SH /etc/mail/spamassassin/SH.pm

If your key is not HBL enabled, this is what needs to be done:

Code:
cp sh.cf /etc/mail/spamassassin
cp sh_scores.cf /etc/mail/spamassassin

Scores sind alle schon sehr hoch gesetzt, Custom Scores sind daher nicht notwendig.


Geoblocking

Ich setze für einige Länder 7 Punkte, für andere 4, für Deutschland sogar -3. Der Rest (EU, USA) erhält gar keinen Score, also 0.
(This product includes GeoLite2 Data created by MaxMind, available from https://www.maxmind.com)

GeoIP Perl Modul installieren und Datenbank in spezifisches Verzeichnis herunterladen
Code:
apt install libgeoip2-perl
mkdir -p /var/lib/GeoIP
cd /var/lib/GeoIP
wget https://goto-url.de/GeoLite2-Country.mmdb

Ich gehe davon aus, dass ihr die init.pre-in bereits im lokalen Templateordner habt, weil wir sie für pyzor bereits anpassen mussten, ansonsten von /var/lib/templates nach /etc/pmg/templates kopieren.

/etc/pmg/templages/init.pre.in bearbeiten und folgende Zeile einkommentieren
Code:
loadplugin Mail::SpamAssassin::Plugin::RelayCountry

Eintrag in die /etc/mail/spamassassin/custom.cf
Code:
ifplugin Mail::SpamAssassin::Plugin::RelayCountry

    geodb_module GeoIP2
    geodb_search_path /var/lib/GeoIP/

header          RELAYCOUNTRY_BAD X-Relay-Countries =~ /^(AR|CN|BR|IN|VN|RU|IR|PK|ID|BD|TR|NG|PH|TH|KP|SY|AF|YE|KZ|UA|BY|MD|GE|AM|AZ|TJ|KG|UZ|TM|MM|KH|LA|ET|GH|KE|TZ|UG)/
describe        RELAYCOUNTRY_BAD First untrusted relay is Argentina, China, Brazil, India, Vietnam, Russia, Iran, Pakistan, Indonesien, Bangladesh, Türkei, Nigeria, Philippinen, Thailand, Nordkorea, Syrien, Afghanistan, Jemen, Ukraine, Belarus, Moldawien, Georgien, Armenien, Aserbaidschan, Tadschikistan, Kirgisistan, Usbekistan, Turkmenistan, Myanmar, Kambodscha, Laos, Aethiopien, Ghana, Kenia, Tansania, Uganda
score           RELAYCOUNTRY_BAD 7.0

header          RELAYCOUNTRY_SUSP X-Relay-Countries =~ /^(LT|EE|HU|RO|AU|IL|GB|RS|AL|BG|MK|ME|BA)/
describe        RELAYCOUNTRY_SUSP First untrusted relay is Lithuania, Estonia, Hungary, Romania, Australien, Israel, GB, Serbien, Albanien, Bulgarien, Nordmazedonien, Montenegro, Bosnien
score           RELAYCOUNTRY_SUSP 4.0

header        RELAYCOUNTRY_GOOD X-Relay-Countries =~ /^(EU|DE)/
describe      RELAYCOUNTRY_GOOD First untrusted relay is Deuschland or European Union :-)
score           RELAYCOUNTRY_GOOD -3.0

    add_header all Relay-Country _RELAYCOUNTRY_

endif # Mail::SpamAssassin::Plugin::RelayCountry

PMG Config syncen (Dann wird das hier verwendete Template angewendet)
Code:
pmgconfig sync --restart

Testen, ob es funktioniert, oder ob GeoIP einen Fehler wirft. Im optimalen Fall seht ihr einen RELAYCOUNTRY Eintrag (das ist aber nicht zwangsweise so, wenn kein Score verteilt wird)
Code:
spamassassin -t < test.eml

Weitere Blocklisten
Die folgenden Listen finden sehr viel Spam, analog zu Pyzor, Razor2 und Spamhaus, daher nicht minder wichtig, hier die Scores zu erhöhen

Configuration -> Spam Detector -> Custom Scores

Blacklistfilter analog zu Pyzor, Razor, Spamhaus
RCVD_IN_MSPIKE_BL : 8
URIBL_ABUSE_SURBL : 8
URIBL_BLACK : 8
URIBL_CT_SURBL : 8
URIBL_PH_SURBL : 4
URI_WP_HACKED_2 : 4
RCVD_IN_BL_SPAMCOP: 3

Apply Score nicht vergessen!

Weitere Filter

Ebenfalls bereits integriert und scharf geschaltet werden sollten:

Spam-Merkmale:
T_TVD_MIME_EPI : 8
GB_STORAGE_GOOGLE_HTM : 6
KAM_STORAGE_GOOGLE : 6
AC_BR_BONANZA : 6
FSL_BULK_SIG : 6
FORGED_OUTLOOK_HTML : 6
FREEMAIL_FORGED_REPLY : 6
FROMSPACE : 4
KAM_LAZY_DOMAIN_SECURITY : 4

Datum falsch:
DATE_IN_PAST_03_06 : 6
DATE_IN_PAST_06_12 : 6
DATE_IN_PAST_12_24 : 6
DATE_IN_PAST_24_48 : 6
DATE_IN_PAST_48_72 : 6

Absender Auffälligkeiten:
RCVD_HELO_IP_MISMATCH : 6
FROM_FMBLA_NEWDOM: 6
FROM_FMBLA_NEWDOM14: 6
FROM_FMBLA_NEWDOM28 : 6
T_SPF_PERMERROR : 6
SPF_SOFTFAIL : 4
MAILING_LIST_MULTI : 4

gute Whitelist:
DKIMWL_WL_HIGH : -6


Die folgenden Filter sorgten bei mir für Fehlfilterungen, deshalb habe ich einen Score von 0 zugewiesen:
SPF_HELO_NONE : 0
KAM_MARKSPAM : 0
HTTPS_HTTP_MISMATCH : 0
DEAR_SOMETHING : 0

Apply Score nicht vergessen!

Problematische Blocklisten deaktivieren

Validity reputation Listen machen nur Stress und filtern nicht wirklich. Man sollte sie in der custom.cf deaktivieren

Eintrag in die /etc/mail/spamassassin/custom.cf
Code:
dns_query_restriction deny sa-trusted.bondedsender.org
dns_query_restriction deny sa-accredit.habeas.com
dns_query_restriction deny bl.score.senderscore.com


Filter kompilieren
Damit die Filter schneller abgearbeitet werden, sollten sie kompiliert werden. Wir benötigen hierzu ein paar Pakete und ein Moduleintrag in der custom.cf von Spamassassin.

Code:
apt install make gcc re2c

Eintrag in die /etc/mail/spamassassin/custom.cf
Code:
loadplugin Mail::SpamAssassin::Plugin::Rule2XSBody

Danach kompilieren und am Ende Spamassassin neustarten mit:
Code:
sa-compile
systemctl restart pmg-smtp-filter
 
Last edited:
Nun haben wir alle Drittanbieterplugins ausgeschöpft. Aber wir können noch selbst SA-Filter erstellen. Einer der größten Übel sind die "BCC-Spam". Jemand erstellt einen Freemail Account bei einem Provider ohne ausgehendes Limit und schickt Spam E-Mails, bei dem alle Empfänger in den BCC kopiert werden.
Um sie zu erkennen, müssen wir To und CC dahingehend überprüfen, ob eine E-Mail Adresse aus der Transportliste enthalten ist. Wenn nein, stehen wir im BCC.
Achtung: Wer in Mailinglisten unterwegs ist, könnte hiermit Probleme bekommen. Auch Weiterleitungen von Free-Mail-Accounts an die eigene Domain sind hiervon betroffen. Hier ggf. mit der Welcomelist arbeiten.

Transportliste als gültige Empfänger:

Folgendes Skript erstellen, welches täglich die Transportliste für unsere BCC-Regel importiert (damit wir niemals vergessen können, diese Liste zu aktualisieren).

~# cat > /usr/local/bin/update-sa-bcc-whitelist.sh
Code:
#!/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 2.0
describe BCC_SPAM_TOCC Domain nicht in Transport-Liste
EOF
sa-compile
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

Cron Table bearbeiten
Code:
crontab -e

Zeile einfügen
Code:
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


Unseriöse Absenderdomains und BCC Spam

Markiert alle E-Mails unerwünschter Absenderdomains. Diese erhalten automatisch einen Score von 3.0, weil sie nahezu immer unseriös sind

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 2.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.

Code:
cat <<EOF > /etc/mail/spamassassin/99-BCC_TLD.cf
header FROM_TLD_OTHER From =~ /\.(?!(?:com|net|info|org|de|at|ch|eu|shop)(?:>|$))[A-Za-z0-9-]+>?$/i
score FROM_TLD_OTHER 3.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 2.0
describe awkward sender and unknown recipient

Positive Word List

Diese Regel(n) beinhalten Wörter, die i.d.R. darauf hindeuten, dass es sich um seriöse E-Mails handelt.
Darüber hinaus bekommen auch .de Domains positiven Score, weil sich im allgemeinen gezeigt hat, dass Spammer willkürliche Domains verwenden. Auch .de-Domains, aber die Fehlfilterquote ist aufgrund der vielen, eintrudelnden Mails aus eurem eigenen Land sicherlich erheblich höher.

Wörter, die sich für einen negativen Score eignen sind insbesondere Adressdaten (Straße, PLZ, Nachname), sodass Bestellbestätigungen stets ankommen.
Auch Wörter aus eurer E-Mail Signatur sind super: Handelsregisternummer, Umsatzsteuer-ID, PGP Key, was ihr so mitsendet. Dann ist sichergestellt, dass Anworten auf eure E-Mails zuverlässig ankommen.
Aufpassen bei Wörtern, die auch in eurer E-Mail Adresse stehen. Wenn eine Domain <berufsbezeichnung>-<wohnort>.de lautet, eignet sich beides eher weniger für eine negative Bepunktung, sonst kommen E-Mail an mit Inhalt: "Hallo <berufsbezeichnung>-<wohnort>.de, haben sie auch Probleme mit ihrer Potenz".

Code:
cat <<EOF > /etc/mail/spamassassin/99-positive-word-list
body POS_STADT    /\bStadt\b(?![-\w.@])/i
body POS_NACHNAME  /\bNachname\b(?![-\w.@])/i
body POS_VORNAME     /\bVorname\b(?![-\w.@])/i
body POS_88888   /\b88888\b(?![-\w.@])/i              # PLZ

score POS_STADT -2.0
score POS_NACHNAME  -2.0
score POS_VORNAME    -2.0
score POS_88888   -4.0
EOF


Positive Scores für besonders vertrauenswürdige Versender

Bestimmten Freemailer, die ihre Systeme im Griff haben bekommen positiven Score. (Nicht Gmail!). Hierzu gehört t-online.de, gmx.de, web.de, ionos/strato. Diese werden mit einem hohen Negativscore belohnt.
Ist aber sicher alles sehr individuell.

Code:
header SERIOUS_FREEMAILER  Received =~ /\b(yahoo\.com|mout\.kundenserver\.de|mout\.web\.de|mout\.gmx\.net|mailout\d+\.t-online\.de|cc-smtpout\d+\.netcologne\.de)\b/i
score  SERIOUS_FREEMAILER  -6.0
describe SERIOUS_FREEMAILER Mail von bevorzugtem SMTP-Out

header     __LOCAL_DE_DOMAIN_FROM     From =~ /\@[^>]+\.(de)\b/i
header     __LOCAL_DE_DOMAIN_ENVFROM  EnvelopeFrom =~ /\@[^>]+\.(de)\b/i
meta       LOCAL_DE_DOMAIN (__LOCAL_DE_DOMAIN_FROM && __LOCAL_DE_DOMAIN_ENVFROM)
describe   LOCAL_DE_DOMAIN Sender domain is .de
score      LOCAL_DE_DOMAIN -2.0

Am Ende eurer Aktion dann
Code:
sa-compile
systemctl restart pmg-smtp-filter


Fazit

Ca. 50 % aller E-Mails sind gewünscht, d.h. 50% sind Spam.

Von 100% aller Spam sind:

- 3% per SPF Regel oder aufgrund ungültiger Absenderdomain oder HELO Check gefiltert
- 50 % via DNSBL gefiltert
- 25 % kommen von Google und werden über mein oben geschriebenen Policyguard gefiltert
=======================
Diese E-Mails werden bereits von Postfix aussortiert und sind im Tracking Center als REJECTED gekennzeichnet.

- 22 % gelangen in Spamassassin und werden dort gefiltert:

Von den 100% im SA gefilterten E-Mails:
- Werden ca. 50% durch Razor, Pyzor, SH, Geoblocking, Spamcop, URI Blocklisten erwischt.
- Ca. 30% werden durch andere Inhaltsfilter, BCC oder TLD-Score erwischt.

20% kommen durch, weil kein Inhaltsfilter anspricht

Das entspricht einer Block-Quote von ca. 95%.

Die Prozentangaben sind natürlich nicht für bare Münze zu nehmen:
- Das variiert von Tag zu Tag.
- Viele Filter überschneiden sich: So würden ohne DNSBL durchaus einige Mails an SPF scheitern. DNSBL überlappen sich zu weiten Teilen.

Keine guten Ergebnisse habe ich mit den folgenden Werkzeugen erreicht

DCC empfehle ich nicht.
Die Integration ist nicht trivial (Programm aus den Quellen selbst kompilieren und als Dienst installieren).
Das Problem: Standardmäßig werden hier zwar nur wenige Punkte vergeben, aber leider findet DCC kein "Spam" sondern "Bulkmail".
Es werden u.a. Eingangsbestätigungen von Versicherungen ("Vielen Dank für ihre E-Mail. Wir melden uns schnellstmöglich bei ihnen") und ähnliche Mails gefiltert.

Spamcop habe ich als DNSBL wieder herausgenommen, weil regelmäßig Google auf der Blacklist stand. Ich hatte mehrere Fälle, wo seriöse Gmail E-Mails gefiltert wurden. Ich verlasse mich auf eine (relativ geringe) Bepunktung in Spam Assassin.


- Das Nutzen eines öffentlichen Mailservers (z.B. All-Inkl.) hinter einem Proxmox ist oft möglich, sofern der Empfänger nicht darauf besteht, SPF / DMARC zwingend zu ahnden. Lokale Spamfilter des Anbieters sind im Zweifel auszuschalten.

- In dieser Konstellation muss darauf geachtet werden, dass der Spammer nicht direkt beim Betreiber einliefert:

+ Manche Spammer senden ihre E-Mails an domain.de, mail.domain.de, smtp.domain.de, mx.domain.de, autodiscover.domain.de => Setzt diese ggf. ebenfalls auf das Spamgateway, obgleich das bei domain.de nicht immer möglich ist. Der Weg der bequemen Einrichtung eures E-Mail Programmes ist damit ggf. aber ausgehebelt. Denkt auch an Catchall Domains: *.domain.de ; am besten Catchall deaktivieren.

+ Manche Spammer senden an den letzten MX Eintrag statt den ersten. Sandwitcht euren öffentlichen MX im Hinblick auf die Prio

+ Google sendet gerne auch schonmal an mehrere MX gleichzeitig, wenn euer MX zu langsam ist. Trimmt daher auf Geschwindigkeit und lehnt Google Spams früh ab. Mehr dazu weiter unten. Darüber hinaus könnt ihr auch noch zwei oder drei weitere MX aufs Spamgateway zeigen lassen, damit "Don't be evil"-Spamkönig Google mehr zum durchprobieren hat.
 
Last edited:
Hab alle Anleitungen nun erst einmal fertig. Hatte es heute bei jemand anderem neu aufgesetzt und die Chance genutzt, es zu dokumentieren.

Ein großes Dankeschön gilt an die Riesen, auf dessen Schultern ich saß:
- christian-b für die rspamd integration: https://forum.proxmox.com/threads/integrate-rspamd-as-custom-script.159110/
- heutger
- zolthar und stoiko ivanov für die GeoIP Integration https://forum.proxmox.com/threads/geoip-with-maxmind.105656/
- tcnewone für den Hinweis bzgl. validity blocklisten deaktivieren: https://forum.proxmox.com/threads/the-query-to-validity-was-blocked.181382/#post-842823

Ich werde diesen Artikel in naher Zukunft noch ins englische Forum stellen, möchte aber Sicherstellen, dass der Artikel mehr oder weniger final ist. Ich möchte das nicht zweisprachig mehrfach überarbeiten müssen.
 
Last edited: