Spamassassin mit Postfix unter Debian 7 Wheezy

Dies ist der zweite Teil in der Anleitung zu Postfix, also ist die Fortsetzung zu Postfix unter Debian 7 installieren. Diese Anleitung fügt nun den Spamfilter Spamassassin zu Postfix hinzu. Für mich war es auch das erste Mal, aber die Konfiguration ging schneller, als gedacht.

Spamassassin wird dabei so konfiguriert, dass Spam zwar als Spam markiert wird, aber keine Email gelöscht wird. Das Filtern übernimmt dann euer Mailprogramm.

Voraussetzungen

Ihr benutzt die neuste Version von Debian 7 und habt Postfix bereits installiert. Ob dies nach der oben genannten Anleitung geschehen ist oder nicht, ist zunächst egal.

Spamassassin installieren

Zunächst installieren wir uns Spamassassin:

aptitude update
aptitude install spamassassin spamc

Das war’s auch schon. Es werden natürlich viele benötigte Pakete mit installiert, aber der Overhead hält sich in Grenzen.

User mit beschränkten Rechten erstellen

Spamassassin läuft standardmäßig mit root Rechten. Da dies eine Sicherheitslücke ist und einfach zu beheben ist, erstellen wir zunächst einen eingeschränkten Benutzer und Gruppe:

groupadd -g 5555 spamd
useradd -u 5555 -g spamd -s /sbin/nologin -d /usr/local/spamassassin spamd
mkdir -p /usr/local/spamassassin/log
chown spamd:spamd -R /usr/local/spamassassin

Spamassassin konfigurieren

Die Konfigurationsdatei zu Spamassassin liegt unter /etc/default/spamassassin. Öffnet die Datei mit einem Editor eurer Wahl und passt die Konfigurationsdatei wie folgt an:

# /etc/default/spamassassin
# Duncan Findlay

# WARNING: please read README.spamd before using.
# There may be security risks.

# Change to one to enable spamd
ENABLED=1
SPAM_HOME="/usr/local/spamassassin"

# Options
# See man spamd for possible options. The -d option is automatically added.

# SpamAssassin uses a preforking model, so be careful! You need to
# make sure --max-children is not set to anything higher than 5,
# unless you know what you're doing.

OPTIONS="--create-prefs --max-children 5 --helper-home-dir ${SPAM_HOME} --username spamd"

# Pid file
# Where should spamd write its PID to file? If you use the -u or
# --username option above, this needs to be writable by that user.
# Otherwise, the init script will not be able to shut spamd down.
PIDFILE="${SPAM_HOME}/spamd.pid"

# Set nice level of spamd
#NICE="--nicelevel 15"

# Cronjob
# Set to anything but 0 to enable the cron job to automatically update
# spamassassin's rules on a nightly basis
CRON=0

Die Kommentare sollten alle Einstellungen bereits ausreichend erklären. Nun bearbeiten wir noch die Einstellungen von Spamassassin in /etc/spamassassin/local.cf
Ich habe hier nur die Teile aufgeführt, die ich aktiviert oder verändert habe. Wiedermal sollten die Kommentare alles erklären.

#   Add *****SPAM***** to the Subject header of spam e-mails
#
rewrite_header Subject *****SPAM*****

#   Save spam messages as a message/rfc822 MIME attachment instead of
#   modifying the original message (0: off, 2: use text/plain instead)
#
report_safe 0

#   Set the threshold at which a message is considered spam (default: 5.0)
#

required_score 2.0
#   Use Bayesian classifier (default: 1)
#
use_bayes 1

#   Bayesian classifier auto-learning (default: 1)
#
bayes_auto_learn 1

Das wars‘ auch schon mit der Konfiguration von Spamassassin. Nun muss lediglich Spamassassin noch in Postfix integriert werden.

Spamassassin in Postfix integrieren

Damit die Mails auch von Spamassassin „betrachtet“ werden können, müssen wir Postfix noch nicht konfigurieren. Dazu muss die Datei /etc/postfix/master.cf angepasst werden:
Der Eintrag

smtp      inet  n       -       -       -       -       smtpd

muss wie folgt ergänzt werden:

smtp      inet  n       -       -       -       -       smtpd
        -o content_filter=spamassassin

Am Ende der Datei noch folgendes ergänzen:

spamassassin unix -     n       n       -       -       pipe
        user=spamd argv=/usr/bin/spamc -f -e
        /usr/sbin/sendmail -oi -f ${sender} ${recipient}

Tada! Das wars. Nun nur noch alles neustarten und fertig ist unser System.

/etc/init.d/spamassassin restart
/etc/init.d/postfix restart

Spamassassin testen

Natürlich wollen wir jetzt auch gleich mal testen, ob Spam richtig erkannt wird. Beobachtet zunächst die Logdatei:

tail -f /var/log/mail.info

Nun senden eine Email an euren Mailserver mit folgendem Inhalt:

XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X

Die Mail wird dann von Spamassassin automatisch erkannt und mit *****SPAM***** deklariert. Achtung: Die üblichen Mailprogramme sortieren die Mails gleich automatisch aus.

Fertig. Nun läuft Spamassassin und Spam wird automatisch aussortiert. Spamassassin holt sich jede Nacht die neusten Regeln und hält sich selbst aktuell.

Wie immer würde ich mich über Kritik, Anregungen und Kommentare jeglicher Art freuen :).

13 Antworten auf „Spamassassin mit Postfix unter Debian 7 Wheezy“

  1. Hallo Timo,

    bei Installation über aptitude habe ich folgende Meldungen:

    Setting up spamassassin (3.3.2-5+deb7u1) …
    Adding system user `debian-spamd‘ (UID 107) …
    Adding new group `debian-spamd‘ (GID 109) …
    Adding new user `debian-spamd‘ (UID 107) with group `debian-spamd‘ …
    Creating home directory `/var/lib/spamassassin‘ …

    Heißt das nicht das man sich das Anlegen des Users „spamd“ sparen könnte?

    Liebe Grüße,
    Martin

    1. Hallo Martin,

      der User, der da angelegt wird, hat aber root-rechte, was eine weitere Sicherheitslücke ist, sollte der Spamassassin mal ein Sicherheitsloch haben. Der User der bei meiner Anleitung angelegt wird, hat eingeschränkte Berechtigungen.
      Funktionieren tut aber beides.

      Grüße Timo

      1. Erstmal danke für die Anleitung!

        Was genau meinst du mit root-Rechten? Der Nutzer hat definitiv nicht die User-ID Null – daher hat er keine spezifischen Rechte, die mir bekannt wären:

        root@post:~# getent passwd debian-spamd
        debian-spamd:x:109:113::/var/lib/spamassassin:/bin/sh

        Insofern sehe ich spontan keinen Grund, der Vorbereitung des Debian-Paket-Betreuers zu misstrauen. Ansonsten hilft auch ein Bug-Report beim Debian-Paket, auf dass andere Menschen an Fortschritten teilhaben können …

  2. Hallo Timo,

    nach der Einrichtung von Spamassassin, wie in der Anletung beschrieben. erhalte ich folgenden Fehler: „warning connect to transport private/spamassassin: Connection refused“
    und die E-Mail wrden nicht weitergeleitet. Was kann denn der Fehler für so etwas sein?

    MFG

    Jens Weiß

  3. Hallo Timo,
    Danke für das gut geschriebene Tutorial.
    Wir haben bei uns schon länger einen eigenen Postfix auf Debian für unsere internen Mails laufen, aber ich habe erst jetzt die Muße gehabt, mal endlich einen Spamfilter dafür zu installieren.
    Dein Tutorial hat mir dabei sehr weitergeholfen (Habe allerdings den bereits erstellten User debian-spamd an allen Stellen verwendet, wo du einen eigenen User spamd benutzt hast).

    Viele Grüße,
    Christian

  4. Hi sehr nettes Tut! 🙂

    Bekomme beim starten von SpamAssi folge meldeung! Irgend eine Idee?

    root@mail:/# spamassassin start
    Feb 23 09:56:16.559 [19070] warn: archive-iterator: no access to start: Datei oder Verzeichnis nicht gefunden at /usr/share/perl5/Mail/SpamAssassin/ArchiveIterator.pm line 830.
    Feb 23 09:56:16.559 [19070] warn: archive-iterator: unable to open start: Datei oder Verzeichnis nicht gefunden

    Danke und Viele Grüße

  5. Hallöchen 🙂
    CRON = 0
    Bedeutet aber, dass keine Updates geholt werden, oder? Weil du zum Schluss erwähnst, dass nachts updates durchgeführt werden. Oder hab ich da nun was verwechselt?

  6. ist das hier evtl auch relevant?
    https://workaround.org/ispmail/jessie/spamassassin

    Debian bug #739738

    Unfortunately the SpamAssassin version shipped with Debian Jessie contains a nasty bug that keeps printing error messages to your mail.log file and probably even prevents proper spam scanning. To fix it edit the file /usr/share/perl5/Mail/SpamAssassin/Util.pm, jump to line 288 and replace

    return if !defined $_[0];

    by

    return undef if !defined $_[0];

  7. sehr schön und einfach, hat mir auf die schnelle art weitergeholfen. dafür erstmal danke.

    ein satz was man da eigentlich genau in der master.cf tut wäre aber beruhigend gewesen, so ist da erstmal das rumfummeln in configs die man nicht versteht, mit einem unguten gefühl.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.