Zum Inhalt

SpamAssassin in Postfix einrichten

Stand: 04/2025
SpamAssassin_logo
Verwendete Software
- Ubuntu 24.04 LTS
- SpamAssassin 4.0.0
- Spamass-Milter 0.4.0
- Postfix 3.8.6
Weitere Dokumentationen:
- Postfix als Relayhost (Smarthost)
- Bind als Caching-Only-DNS-Resolver

Vorwort

Diese Dokumentation beschreibt den Installationsvorgang von SpamAssassin zur Verwendung mit Postfix.
Ziel dieser Dokumentation soll sein, Postfix um SpamAssassin zu erweitern.

Es sind Grundkenntnisse im Umgang mit Linux erforderlich, da die Vorgehensweise, wie sie hier beschrieben ist, in manchen Teilen abweichen kann. Kein System ist wie das Andere. Die Dokumentation wurde sorgfältig von mir geprüft. Dennoch kann ich keinerlei Haftung für Schäden an Ihrem System oder eine Gewährleistung übernehmen. Bitte verwenden Sie diese Dokumentation auf eigene Gefahr.



Server vorbereiten

Root-Rechte einräumen

Während der gesamten Dokumentation werden Root-Rechte benötigt. Um auf das Voranstellen von sudo zu verzichten, verschaffen Sie sich für die gesamte Sitzung erhöhte Rechte mit:

sudo -i


Update durchführen

Bringen Sie den Server auf den aktuellen Patchstand:

apt update && apt upgrade


Software herunterladen und installieren

Laden Sie spamassassin und spamass-milteraus dem offiziellen Ubuntu-Repository herunter:

apt-get install spamassassin libmail-dkim-perl spamass-milter


SpamAssassin einrichten

SpamAssassin konfigurieren

Benennen Sie zunächst die /etc/default/spamd um, damit Sie eine Sicherheitskopie der Original-Datei haben:

mv /etc/default/spamd /etc/default/spamd.bak


Erstellen Sie eine neue Datei /etc/default/spamd mit folgendem Inhalt:

nano /etc/default/spamd
spamd
OPTIONS="--create-prefs \
         --max-children 2 \
         --username debian-spamd \
         --socketpath=/var/run/spamd.sock \
         --socketowner=debian-spamd \
         --socketgroup=debian-spamd \
         --socketmode=0660 \
         --helper-home-dir /var/log/spamassassin/ \
         -s /var/log/spamassassin/spamd.log"

CRON=1


Anti-Spam-Rules einrichten

Info

Anti-Spam-Rules werden bei SpamAssassin in der Datei /etc/spamassassin/local.cf konfiguriert. Sämtliche Parameter sind in dieser Datei ausführlich dokumentiert. Die Ansprüche an einen Spam-Schutz sind sehr individuell. Betrachten Sie daher die, in dieser Dokumentation verwendete Konfiguration, lediglich als Vorschlag und passen Sie diese entsprechend Ihrer eigenen Bedürfnisse an.

In unserem Setup werden alle Default-Tests durchgeführt (inkl. DKIM) und Spamassassin fügt dem Header einer E-Mail das X-Spam-Flag hinzu, welches von nachgeschalteten Instanzen ausgewerten werden kann (z. B. für Mailregeln). Weder wird eine E-Mails abgewiesen noch wird die Betreff-Zeile verändert.

Die Parameter clear_headers und add_header [...] verhindern, dass die verwendete Version von Spamassassin im X-Spam-Status angezeigt wird.

Alle weiteren Konfigurations-Parameter finden Sie auf der offiziellen Seite von SpamAssassin.


Benennen Sie zunächst die /etc/spamassassin/local.cf um, damit Sie eine Sicherheitskopie der Original-Datei haben:

mv /etc/spamassassin/local.cf /etc/spamassassin/local.cf.bak

Erstellen Sie eine neue Datei /etc/spamassassin/local.cf mit folgendem Inhalt:
nano /etc/spamassassin/local.cf
local.cf
envelope_sender_header      X-Envelope-From
report_safe                 0
required_score              3.5
use_bayes                   1
use_bayes_rules             1
bayes_auto_learn            1
skip_rbl_checks             0
use_razor2                  0
use_pyzor                   0
score DKIM_VERIFIED         -0.1
score DKIM_POLICY_TESTING   0
clear_headers
add_header                  all Flag _YESNO_
add_header                  all Status _YESNO_, score=_SCORE_ required=_REQD_ tests=_TESTS_ autolearn=_AUTOLEARN_
add_header                  all Report _REPORT_


Logging einrichten

Erstellen Sie einen neuen Ordner /var/log/spamassassin und vergeben Sie die Zugriffsrechte:

mkdir /var/log/spamassassin
chown -R debian-spamd. /var/log/spamassassin


Erstellen Sie eine neue Datei /etc/logrotate.d/spamassassin mit folgendem Inhalt:

nano /etc/logrotate.d/spamassassin
spamassassin
/var/log/spamassassin/*.log {
rotate 7
weekly
compress
missingok
}



SpamAssassin bei Systemstart automatisch starten

Führen Sie folgendes Kommando aus, damit SpamAssassin nach einem Neustart automatisch startet:

systemctl enable spamassassin.service
    Synchronizing state of spamassassin.service with SysV init with /lib/systemd/systemd-sysv-install...
    Executing /lib/systemd/systemd-sysv-install enable spamassassin



SpamAssassin in Postfix implementieren

Info

SpamAssassin kann in Postfix über ein sogenanntes Milter-Interface eingebunden werden. Der Begriff Milter (ein Kofferwort aus Mail und Filter) bezeichnet eine Schnittstelle, über die externe Filterprogramme Zugriff auf den E-Mail-Fluss erhalten, noch bevor eine E-Mail in die Postfix-Warteschlange eingereiht wird (Pre-Queue-Filtering).

In unserem Setup verwenden wir den Milter spamass-milter, der intern mit spamc kommuniziert und SpamAssassin zur Bewertung heranzieht.

Vorteile der Milter-Methode:

  • Echtzeitprüfung: Die E-Mail wird bereits während der SMTP-Transaktion analysiert. Dadurch kann Spam direkt abgewiesen werden – bevor Postfix die Nachricht akzeptiert.

  • Vermeidung von Double-Bounces: Da SPAM abgelehnt wird, bevor er angenommen wurde, entstehen keine Rückläufer an gefälschte Absenderadressen.

  • Integration mit modernen Mailfiltern: Die Milter-Schnittstelle ist heute Standard für die Anbindung von Antispam- und Antivirenlösungen (z. B. ClamAV, DKIM, DMARC, Rspamd etc.).

Hinweis: Ältere Methoden wie die Integration über Content-Filter (content_filter in der master.cf) gelten als veraltet und sind nicht Bestandteil dieser Dokumentation. Sie bieten keine Möglichkeit zur Echtzeitprüfung und sollten nur in Ausnahmefällen verwendet werden.



Spamass-Milter konfigurieren

Info

Da Spamass-Milter eine eingehenden E-Mail auswertet, muss in Postfix ein entsprechender smtpd-milter definiert werden. Die Kommunikation zwischen Postfix und Spamass-Milter findet über Spamass-Milter-Socket statt.
Spamass-Milter kann nicht zwischen Ein- und Ausgehenden Emails unterscheiden. Um das Scannen ausgehender Emails zu verhindern, muss ein entsprechender Parameter gesetzt sein.

Der SpamAssassin-Milter spamass-milter wird über die Datei /etc/default/spamass-milter konfiguriert. In unserem Setup kommuniziert spamass-milter mit spamd über einen Unix-Domain-Socket unter /var/run/spamd.sock.
Die wichtigsten Konfigurationsparameter sind:

  • -r <Wert>
    Definiert den Score, ab dem eine E-Mail während der SMTP-Transaktion abgelehnt wird.
    Beispiel: -r 10 lehnt Mails mit Score ≥ 10 ab. Verwendet den SMTP-Code 550 (permanent failure).
    Mehr Infos: SMTP-Status-Codes.

  • -R <Text>
    Gibt den Text der Ablehnungsnachricht an.
    Beispiel: -R Looks_like_Spam! ersetzt die Standardmeldung durch diese benutzerdefinierte Nachricht. Hinweis: Es ist nicht sinnvoll, Informationen über verwendete Software preiszugeben.

  • -I
    Verhindert das Scannen von authentifizierten SMTP-Verbindungen (SMTP AUTH). Nützlich, um ausgehende Mails vertrauenswürdiger Benutzer nicht zu markieren.

  • -i <IP/Subnetz>
    Definiert IP-Adressen oder Netzbereiche, die nicht gescannt werden sollen (z. B. interne Netze).
    Beispiel: -i 192.168.0.0/16 ignoriert interne Mails.

  • -- -U <Pfad>
    Übergibt Parameter an spamc.
    In unserem Fall: -U /var/run/spamd.sock, damit spamc über den Unix-Socket mit spamd kommuniziert.

Alle weiteren Parameter sind auf der Projektseite von spamass-milter dokumentiert.


Benennen Sie zunächst die /etc/default/spamass-milter um, damit Sie eine Sicherheitskopie der Original-Datei haben:

mv /etc/default/spamass-milter /etc/default/spamass-milter.bak


Erstellen Sie eine neue Datei /etc/default/spamass-milter mit folgendem Inhalt:

nano /etc/default/spamass-milter
spamass-milter
OPTIONS="${OPTIONS} -r 10"
OPTIONS="${OPTIONS} -R Looks_like_Spam!"
OPTIONS="${OPTIONS} -I"
#OPTIONS="${OPTIONS} -i <IP-Adresse/Subnetz>"
OPTIONS="${OPTIONS} -- -U /var/run/spamd.sock"


Milter-Header-Checks einrichten

Info

Spammassassin fügt dem Header der E-Mail verschiedene Informationen hinzu. Die verwendete Version von Spamassassin soll allerdings nicht übertragen werden.
Da über Milter eingefügte Header-Informationen nicht über den Postfix-Parameter header_checks bearbeitet werden können, erstellen wir eine neue Datei und verwenden den Postfix-Parameter milter_header_checks.


Erstellen Sie eine neue Datei /etc/postfix/milter_header_checks mit folgendem Inhalt:

nano /etc/postfix/milter_header_checks
milter_header_checks
## Anonymisierung

# SPAM-Agent
/^X-Spam-Checker-Version:/                          IGNORE


Fügen Sie der Datei /etc/postfix/main.cf folgendes hinzu:

main.cf
[...]
milter_default_action                   = accept
milter_protocol                         = 6
milter_header_checks                    = pcre:${config_directory}/milter_header_checks

smtpd_milters =
    local:spamass/spamass.sock

non_smtpd_milters =
    ${smtpd_milters}
[...]


Starten Sie die Dienste neu, damit die Konfiguration angewendet wird:

service spamass-milter restart
service spamassassin restart
service postfix restart



DNS-Resolver einrichten (URIBL_BLOCKED Problem)

Mit SpamAssassin können sogenannte DNS-basierte Blacklists zur Spam-Klassifikation verwendet werden. Die Blacklist vURIBL.com ist standardmässig aktiviert.
Diese Blacklists werden von SpamAssassin in Echtzeit abgefragt und die meisten Blacklist-Anbieter räumen ein kostenloses Kontingent von Abfragen ein (auch URIBL.com). Nur Nutzer sehr vielen Anfragen müssen entsprechende Gebühren zahlen.

Technisch gesehen ist die Abfrage einer Blacklist eine DNS-Abfrage und das führt zu folgendem Problem:

Wenn öffentliche oder vom ISP automatisch zugewiesene DNS-Server zur Abfrage verwendet werden, wird die Anfrage höchstwahrscheinlich geblockt, da diese DNS-Server von sehr vielen Nutzern verwendet werden. Abfragen unterschiedlicher Mailserver erfolgen somit über die gleiche IP-Adresse. Daduwird das kostenlose Kontingent an Anfragen für diese IP-Adresse überschritten.

Der SpamAssassin-Tag sieht in diesem Fall wie folgt aus:

URIBL_BLOCKED          ADMINISTRATOR NOTICE: The query to URIBL was blocked.
See
http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block
for more information.

Abhilfe schafft hier ein sogenannter lokaler DNS-Resolver. Über diesen DNS-Resolver können Abfragen einer Blacklist direkt und ohne Umweg über einen öffentlichen DNS-Server durchgefüwerden. Da für die Abfrage logischerweise auch die eigene IP-Adresse und nicht die des öffentlichen DNS-Servers verwendet wird, kann das kostenlose Kontingent genutzt werden.

Ein lokaler DNS-Resolver ist schnell eingerichtet und nahezu wartungsfrei. Wie ein lokaler DNS-Resolver eingerichtet wird, erfahren Sie hier: