Benutzer-Werkzeuge

Webseiten-Werkzeuge


Writing /srv/www/htdocs/udo/singollo.de/linux.singollo.de/public_html/data/cache/0/009f2c6a9bde17d49fc242687170527b.metadata failed
mail:postfix_und_sa

Installation der Perl-Module

Als Grundvorraussetzung von SpamAssassin ist die Installation von Perl und der Einfachheit halber das Modul CPAN.pm. CPAN erleichtert uns die Installation der Module, indem es diese und die Abhängigkeiten lädt und installiert. Für SpamAssassin werden sinnvollerweise diese drei Module benötigt:

Time::HiRes
Net::DNS
Mail::SpamAssassin

Also ruft man zuerst als User root „perl -MCPAN -e shell“ auf. Jetzt reicht ein „install Mail::SpamAssassin“ zur Installation aus. Ist das Module installiert, so loggt man sich per „quit“ aus. Aktuelle CPAN-Versionen installieren die benötigten Module selbstständig nach. Soweit, so gut. Jetzt wird ein Useraccount angelegt, unter dem der Filter dann laufen wird. Der bekommt als Homeverzeichnis gleich das Verzeichnis, in dem dann das Skript die temporären Daten ablegen wird. Man könnte ihm aber sicher auch ein eigenes Home geben:

mkdir /var/spool/spamassassin
groupadd filter
useradd -g filter -d /var/spool/spamassassin -s /bin/false filter
passwd -l filter
chown filter.filter /var/spool/spamassassin
chmod 770 /var/spool/spamassassin

Jetzt wird das Skript erstellt, welches später die Filterung erledigt (oder besser aufruft):

Listing 1: /usr/local/bin/spamassassin.sh

#!/bin/sh
INSPECT_DIR=/var/spool/spamassassin
SENDMAIL=/usr/sbin/sendmail
SPAMASSASSIN=/usr/bin/spamc

# Exit codes from  EX_TEMPFAIL=75
EX_UNAVAILABLE=69
 
cd $INSPECT_DIR || { echo $INSPECT_DIR does not exist; exit $EX_TEMPFAIL; }
 
# Clean up when done or when aborting.
trap "rm -f in.$$; rm -f out.$$" 0 1 2 3 15
 
# Parameter for $SPAMASSASSIN
# -P Pipe message, don\'t deliver
# -x Disable user config files
# -a Use auto-whitelists
# cat | $SPAMASSASSIN -P -x -a > out.$$ || { echo Message content rejected; exit $EX_UNAVAILABLE; }
cat | $SPAMASSASSIN > out.$$ || { echo Message content rejected; exit $EX_UNAVAILABLE; }
 
$SENDMAIL -i "$@" < out.$$

exit $?

SpamAssassin wird über den Init-Prozess aufgerufen:

Listing 2: /etc/init.d/spamd

#! /bin/sh
# Copyright (c) 1996 S.u.S.E. Gmbh Fuerth, Germany. All rights reserved.
#
# Author: Burchard Steinbild , 1996
# Modified: Michael@Schaarwaechter.de 8/2002
#
### BEGIN INIT INFO
# Provides: SpamAssassin / Spamd
# Required-Start:
# Required-Stop:
# Default-Start: 2 3 5
# Default-Stop:
# Description: SpamAssassin daemon
### END INIT INFO

. /etc/rc.status

# Determine the base and follow a runlevel link name.
base=${0##*/}
link=${base#*[SK][0-9][0-9]}

# The echo return value for success (defined in /etc/rc.config).
return=$rc_done
case "$1" in
start)
 echo -n "Starting service spamd daemon:"
 startproc /usr/bin/spamd -a -u filter -x || return=$rc_failed
 echo -e "$return"
;;
stop)
 echo -n "Shutting down service spamd daemon:"
 killproc -TERM /usr/bin/spamd || return=$rc_failed
 echo -e "$return"
;;
status)
 echo -n "Checking for service spamd deamon: "
 checkproc /usr/bin/spamd && echo OK || echo No process
;;
reload)
 $0 stop && $0 start || return=$rc_failed
;;
restart)
 $0 stop && $0 start || return=$rc_failed
;;
*)
 echo "Usage: $0 {start|stop|status|restart|reload}"
 exit 1
;;
esac
 
# Inform the caller not only verbosely and set an exit status.
test "$return" = "$rc_done" || exit 1
exit 0

Ein „insserv /etc/init.d/spamd“ installiert den Filter in den Bootprozeß und ein anschließendes „/etc/init.d/spamd start“ startet ihn. Sollte die Linuxdistribution „/etc/sysconfig“ unterstützen, so kann man auch ein alternatives Startscript benutzen. Jetzt sollte spamd in der Prozessliste auftauchen. Wenn nicht, ist was faul und man kann ihn zur Fehlersuche im Debugmodus starten (mittels „/usr/sbin/spamd -a -x -u filter -D“, beenden mit Ctrl-C).

Postfix-Konfiguration

Wenn das bis hierher alles geht, muss nur noch in der Postfix-Konfiguration /etc/postfix/master.cf der Filter eingetragen werden und fertig:

Listing 3: /etc/postfix/master.cf

smtp inet n - n - - smtpd -o content_filter=filter: 

# SpamAssassin
filter unix - n n - - pipe user=filter argv=/usr/local/bin/spamassassin.sh -f ${sender} -- ${recipient} 

Postfix muß danach mit „postfix reload“ seine Konfigurationsdatei neu einlesen. Ein „tail -f /var/log/mail“ zeigt, ob alles korrekt installiert und konfiguriert worden ist.

Feb 19 14:40:14 server spamd[29722]: server started on port 783 (running version 2.44)

Falls da was in der Art „spamc[28752]: connect() to spamd failed: Connection refused“ steht, dann läuft der Daemon nicht. Ist nicht weiter schlimm, weil die Mail dann einfach ungecheckt ausgeliefert wird, aber dann hätte man ja den Aufwand nicht treiben brauchen… ;-) Anschließend kann man SpamAssassin einstellen. Das Beispielscript erschlägt schon die meisten Mails, indem nur westliche Sprachen zugelassen werden. Das defaultmäßige Umschreiben des Betreffs habe ich abgeschaltet.

Listing 4: /etc/mail/spamassassin/local.cf

# This is the right place to customize your installation of SpamAssassin.
# See \'perldoc Mail::SpamAssassin::Conf\' for details of what can be
# tweaked.
#
###########################################################################
#
rewrite_subject 0
report_header 0
report_safe 0
defang_mime 0
auto_whitelist_path /var/spool/spamassassin/auto-whitelist
ok_locales en
ok_languages de en
whitelist_from ... # Kein Spam von diesen Mailaddies

Im Header der Mail würde man dann sowas finden können:

X-Spam-Status: No, hits=-18.8 required=5.0
tests=AWL,EMAIL_ATTRIBUTION,IN_REP_TO,QUOTED_EMAIL_TEXT,
REFERENCES,REPLY_WITH_QUOTES,USER_AGENT_PINE
autolearn=ham version=2.53
X-Spam-Level:
X-Spam-Checker-Version: SpamAssassin 2.53 (1.174.2.15-2003-03-30-exp)

Ein Test auf „X-Spam-Flag: YES“ per procmail oder Sieve filtert die so gefunden Mails raus. Für den Anfang würde ich die Mails in einen eigenen Ordner verschieben, um die erwünschten von den unerwünschten Mails trennen zu können (Stichwort: whitelist).

Anmerkungen

Postfix versteht bereits von Haus aus ein paar Regeln, die Spam verhindern hilft: UCE Controls. Man sollte diese Regeln unbedingt ebenso konfigurieren, um einen maximalen Schutz zu erreichen. Nur sicher kann man sich nie sein :( Desweiteren sollte unbedingt ein Antivirenprogramm eingebunden sein. Hier wäre Amavis, AntivirMailgate oder andere Systeme anwendbar.

X-Virus-Scanned: by AMaViS 0.3.12pre8

oder

X-AntiVirus: OK! AntiVir MailGate Version 2.0.0.7 at server has not found any known virus in this email.

Hinweis: Dieses HowTo basiert auf einer Mail an die SuSE-Linux-Mailingliste vom 9. Dezember 2002 von Johannes Studt. Original: http://lists.suse.com/archive/suse-linux/2002-Dec/3889.html

mail/postfix_und_sa.txt · Zuletzt geändert: 07.10.2012 18:31 (Externe Bearbeitung)