Spam & RBL

Thorsten

SSF Facilitymanagement
Staff member
Wo wir an anderer Stelle gerade beim Thema Spam waren. Welche Techniken werden bei euch zur Spamvermeidung eingesetzt?
 
Erster... :D

1. Gegen Spamversand: SMTP-Auth (heutzutage standart, aber vor einem Jahr gabs das lediglich als Sendmail-Patch).
2. Auf einem älteren Server auch noch 'SMTP after POP' (ebenfalls nur ein Patch).
3. Gegen Spamempfang den Urmeister: SpamAssassin

SpamAssassin läuft auf dem vServer aber nur unbefriedigend. Stürzt regelmässig beim forken ab. (Grund ist wohl bekannt...) Steht halt jetzt als restart im cron.daily.

huschi the husch
 
Kann ich mich nur anschließen, authSMTP und SpamAssassin 2.60. Das ganze läuft auf meinem dedizierten Server einwandfrei.


So far!
#
Luke
 
SpamAssassin hört sich gut an, nur bei meinem neuen vServer wird das mit dem Speichverbrauch wohl auch nicht hinhaun.

Hat schon jemand Erfahrung mit Blackhole auf nem vServer oder echtem RootServer gemacht?

http://iland.net/~ckennedy/blackhole.shtml

m.f.g.
BoMbY
 
SpamAssassin hört sich gut an, nur bei meinem neuen vServer wird das mit dem Speichverbrauch wohl auch nicht hinhaun.
SpamAssassin stürzt zwar hin und wieder ab, aber es ist immer noch besser als gar kein Spam-Filter... ;-)

huschi.
 
Last edited by a moderator:
BTW:

Installations-Anleitung:

1. benötigte Module
Code:
#!/bin/sh
#Downloadverzeichnis:
cd /usr/local/src

#CPAN-Module Downloaden, entpacken, installieren
# (nur falls nötig)
wget http://www.cpan.org/modules/by-module/Digest/Digest-HMAC-1.01.tar.gz
wget http://www.cpan.org/modules/by-module/Digest/Digest-SHA1-2.01.tar.gz
wget http://www.cpan.org/modules/by-module/Test/Test-Harness-2.26.tar.gz
wget http://www.cpan.org/modules/by-module/Test/Test-Simple-0.45.tar.gz
wget http://www.cpan.org/modules/by-module/Net/Net-DNS-0.29.tar.gz
wget http://www.cpan.org/modules/by-module/HTML/HTML-Tagset-3.03.tar.gz
wget http://www.cpan.org/modules/by-module/HTML/HTML-Parser-3.26.tar.gz

tar zxpvf Digest*
tar zxpvf Test-Harness*
tar zxpvf Test-Simple*
tar zxpvf Net-DNS*
tar zxpvf HTML-Tagset*
tar zxpvf HTML-Parser*

cd Digest-HMAC*
perl Makefile.PL
make
make test
make install
cd ..

cd Digest-SHA*
perl Makefile.PL
make
make test
make install
cd ..

cd Test-Harness*
perl Makefile.PL
make
make test
make install
cd ..

cd Test-Simple*
perl Makefile.PL
make
make test
make install
cd ..

cd Net-DNS*
perl Makefile.PL
make
make test
make install
cd ..

cd HTML-Tagset*
perl Makefile.PL
make
make test
make install
cd ..

cd HTML-Parser-3.26
perl Makefile.PL
make
make test
make install
cd ..

2. SpamAssassin
Code:
#!/bin/sh
#Download Hauptprogramm:
# heute aktuell: Mail-SpamAssassin-2.55.tar.gz
wget http://www.spamassassin.org/released/Mail-SpamAssassin-2.43.tar.gz --passive-ftp

# entpacken, installieren
tar zxpvf Mail-SpamAssassin-2.43.tar.gz

cd Mail-SpamAssassin*
perl Makefile.PL
./configure --prefix=/usr
make
make test
make install

3. Startscripte
Jetzt brauchen wir nur noch die Startscripte:
für SuSe:
Code:
#! /bin/sh
# Copyright (c) 1995-2002 SuSE Linux AG, Nuernberg, Germany.
# All rights reserved.
#
# Author: Christian Banik
#
# /etc/init.d/spamd
#
# and symbolic its link
#
# /usr/sbin/rcspamd
#
# LSB compliant service control script; see http://www.linuxbase.org/spec/
#
# System startup script for daemon spamd (written for SuSE Linux 8.0)
#
### BEGIN INIT INFO
# Provides: spamassassin daemon
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Description: Start spamd to allow filtering of incoming mail
# for spam.
#
### END INIT INFO
#
# Note on Required-Start: It does specify the init script ordering,
# not real dependencies. Depencies have to be handled by admin
# resp. the configuration tools (s)he uses.

# Source SuSE config (if still necessary, most info has been moved)
test -r /etc/rc.config && . /etc/rc.config

# Check for missing binaries (stale symlinks should not happen)
SPAMD_BIN=/usr/bin/spamd
test -x $SPAMD_BIN || exit 5

# Shell functions sourced from /etc/rc.status:
# rc_check check and set local and overall rc status
# rc_status check and set local and overall rc status
# rc_status -v ditto but be verbose in local rc status
# rc_status -v -r ditto and clear the local rc status
# rc_failed set local and overall rc status to failed
# rc_failed set local and overall rc status to
# rc_reset clear local rc status (overall remains)
# rc_exit exit appropriate to overall rc status
# rc_active checks whether a service is activated by symlinks
. /etc/rc.status

# First reset status of this service
rc_reset

# Return values acc. to LSB for all commands but status:
# 0 - success
# 1 - generic or unspecified error
# 2 - invalid or excess argument(s)
# 3 - unimplemented feature (e.g. "reload")
# 4 - insufficient privilege
# 5 - program is not installed
# 6 - program is not configured
# 7 - program is not running
#
# Note that starting an already running service, stopping
# or restarting a not-running service as well as the restart
# with force-reload (in case signalling is not supported) are
# considered a success.

case "$1" in
start)
echo -n "Starting spamassassin daemon (spamd)"
## Start daemon with startproc(8). If this fails
## the echo return value is set appropriate.

# NOTE: startproc returns 0, even if service is
# already running to match LSB spec.
startproc $SPAMD_BIN
touch /var/lock/spamd

# Remember status and be verbose
rc_status -v
;;
stop)
echo -n "Shutting down spamassassin daemon (spamd)"
## Stop daemon with killproc(8) and if this fails
## set echo the echo return value.

killproc $SPAMD_BIN
rm -f /var/lock/spamd

# Remember status and be verbose
rc_status -v
;;
restart)
## Stop the service and regardless of whether it was
## running or not, start it again.
$0 stop
$0 start

# Remember status and be quiet
rc_status
;;
status)
echo -n "Checking for spamassassin daemon (spamd): "
## Check status with checkproc(8), if process is running
## checkproc will return with exit status 0.

# Return value is slightly different for the status command:
# 0 - service running
# 1 - service dead, but /var/run/ pid file exists
# 2 - service dead, but /var/lock/ lock file exists
# 3 - service not running

# NOTE: checkproc returns LSB compliant status values.
checkproc $SPAMD_BIN
rc_status -v
;;
*)
echo "Usage: $0 {start|stop|restart|status|}"
exit 1
;;
esac
rc_exit
#EOF - Startscript
(Suse hätte es gerne auch unter /usr/sbin/rcspamd ein Link oder Kopie des Startscriptes.)

und für RedHat:
Code:
#!/bin/sh
#
# spamassassin This script starts and stops the spamd daemon
#
# chkconfig: 2345 80 30
#
# description: spamd is a daemon process which uses SpamAssassin to check
#              email messages for SPAM.  It is normally called by spamc
#              from a MDA.

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0

# Source spamd configuration.
if [ -f /etc/sysconfig/spamd ] ; then
        . /etc/sysconfig/spamd
else
        OPTIONS="-d -c -a"
fi

[ -f /usr/bin/spamd -o -f /usr/local/bin/spamd ] || exit 0
PATH=$PATH:/usr/bin:/usr/local/bin

# See how we were called.
case "$1" in
  start)
        # Start daemon.
        echo -n "Starting spamd: "
        daemon spamd $OPTIONS
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch /var/lock/subsys/spamd
        ;;
  stop)
        # Stop daemons.
        echo -n "Shutting down spamd: "
        killproc spamd
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && rm -f /var/lock/subsys/spamd
        ;;
  restart)
        $0 stop
        $0 start
        ;;
  condrestart)
       [ -e /var/lock/subsys/spamd ] && $0 restart
       ;;
  status)
        status spamd
        ;;
  *)
        echo "Usage: $0 {start|stop|restart|status|condrestart}"
        exit 1
esac

exit 0
#
#EOF

Nicht vergessen: Das Startscript mit chmod a+x /etc/init.d/spamd ausführbar machen.

Startlinks setzen:
(SuSe):
ln - s /etc/init.d/spamd /etc/init.d/rc3.d/K23spamd
ln -s /etc/init.d/spamd /etc/init.d/rc3.d/S23spamd

(RedHat):
chkconfig --add spamd

4. In die Mailbearbeitung einklinken:
Nun die /etc/procmailrc bearbeiten.
(Erstellen, wenn nicht vorhanden!)
Mindestens dieses einfügen:
Code:
DROPPRIVS=yes

# The condition line ensures that only messages smaller than 250 kB
# (250 * 1024 = 256000 bytes) are processed by SpamAssassin. Most spam
# isn`t bigger than a few k and working with big messages can bring
# SpamAssassin to its knees.

:0fw
* < 256000
| /usr/bin/spamc
:0e
{
EXITCODE=$?
}
#Bitte auskommentieren,wenn man die Spam-Mails wirklich löschen will:
# :0:
# Wenn es Spam ist, Mail löschen
# * ^X-Spam-Status: Yes
# /dev/null
#EOF

5. Einstellungen
Die Einstellungen für SpamAssassin werden in /etc/mail/spamassassin/local.cf gemacht.
Bewehrte Werte sind z.B.:
Code:
required_hits 6.5
rewrite_subject 0
report_header 1
use_terse_report 1
defang_mime 1
skip_rbl_checks 0
check_mx_attempts 2
check_mx_delay 5

6. Starten
Nun nur noch /etc/init.d/spamd start tippeln und fertig!

7. Ergänzung
Wer es ab hier dann mehr Klicki-Bunti haben möchten kann sich ein SpamAssassin-Modul für Webmin laden. Bei Webmin.org auf 3rd-Party-Module klicken und nach SpamAssassin suchen.
Das Schöne daran: Es gibt dies auch für Usermin (nur für die, die es auch im Einsatz haben). Dann kann jeder User seine eigene Black-/White-List verwalten.

Anhang a) Bei Fragen oder Problemen:
Fragt ruhig.

PS: Bei allen Scripts darauf achten, daß sie im Linux-Format (also nur ein LF und nicht LF+CR) gespeichert werden müssen.

huschi.
 
Last edited by a moderator:
Also ich hab das jetzt noch nicht laufen, aber würde es nicht Sinn machen (jedenfalls für einen vServer) die Childs des Daemons zu beschränken?

mit: spamd --max-children=1 ?

Ich weiß nicht was die max. connections sind, aber eigentlich müsste ein Child doch reichen um ne Menge eMails zu checken, bevor es zu Problemen kommt, oder?

( http://spamassassin.org/doc/spamd.html )

m.f.g.
BoMbY
 
Grundsätzlich hast Du recht.
Aber Du hast die Doku nicht richtig gelesen:
Code:
Specify a maximum number of children to spawn.
Spamd will wait until another child finishes before forking again.
Meanwhile, incoming connections will be queued.
Er forkt nur, wenn eine neue Email reinkommt, obwohl ein Child immer noch am arbeiten ist. (Er forkt sich also nicht direkt nach dem Start mehrmals.)
Dies ist nur dann der Fall, wenn 2 oder mehr Mails gleichzeitig ankommen.
Was bei z.B. einem Firmenserver tatsächlich der Fall sein kann.
(Aber eine Firma sollte sich nicht auf einem vServer verlassen ;-))
Dennoch reduziert sich SpamAssassin direkt danach wieder zu einem Prozess.

Zusammenfassung:
Für dedizierte Server kann man das so lassen.
Empfehlung für vServer: In /etc/sysconfig/spamd den Parameter -m 1 oder -m 2 ergänzen.

Ich weiß nicht was die max. connections sind
Die Antwort ist 128! (Früher hieß es mal 42, aber die Inflation... :D )
Ein standard Linux-Kernel kann 128 Connections gleichzeitig offen haben. Dann sind die entsprechenden Kernel-Objekte aufgebraucht und alle weiteren Anforderungen landen in einer Queue bis zum Timeout, oder bis wieder ein Kernel-Objekt verfügbar ist.
Und 128 sind ne ganze Menge...
Ein vServer geht schon vorher in die Knie, da sich nicht so viele Prozesse forken lassen.

huschi the husch
 
Last edited by a moderator:
Vielen Vielen dank Huschi

Geil,
die Scripte vom Huschi sind ja genial... hat alles geklappt und mein Spam ist plötzlich wie weggeblasen ;)

Gruß
Keen
 
Korrektur

@Commander_Keen:
Danke für das Kompliment.

Huschi said:
Ein standard Linux-Kernel kann 128 Connections gleichzeitig offen haben.
Sorry, der Wert stammt noch vom 1er-Kernel. Seit dem 2er kann man ihn erhöhen und steht std. mässig bei 256. Je nach Distributor kann der Wert aber auch schon bei 512 stehen, wenn er eine leistungsfähigere Maschine vorraussetzt.

huschi.
 
sehr komisch,

ich habe auf meinen "test" vSERVER MAX qmail, vpopmail, den "spamd", clamav und den courier imapd/pop3d problemlos am rennen. Die kiste laeuft als backup mx für meinen "hauptserver" bisher hatte ich noch keine probleme (aber auch noch nicht wirklich den "GAU").

-torsten
 
Okay @ Huschi,

habe nun den Fedora Core1 auf meinem vServer laufen (vServer 138216) und irgendwie ist die config so wie ich sie vorher auch am laufen hatte super lahm. Der ganze Server ist irgendwie langsamer. Any hints?

Gruß
Keen
 
Damit bist Du glaub ich der erste mit dem Fedora Core 1 hier im Forum, oder?
Wegen dem speed: Sorry, no plan.
Wie macht es sich denn bemerkbar?

huschi.
 
Huschi said:
Damit bist Du glaub ich der erste mit dem Fedora Core 1 hier im Forum, oder?
Wegen dem speed: Sorry, no plan.
Wie macht es sich denn bemerkbar?

huschi.

ALso Fedora Core1 läuft eigentlich recht gut bisher. RH9 ist nicht zukunftssicher, da nun Support auch bald eingestellt (oder ist schon sogar)...

Mailproblem:

also nach Start des SPAMD fliegen schonmal 20MByte in den Rachen des Dämon und die regenerieren sich binnen 24h auf einen Wert um die 15MByte.
Mailtransfers werden sporadisch super träge, und im maillog tauchen fehlermeldungen auf, die kann ich leider gerade nicht nachlesen, weil das maillog wo das immer auftrat nun nicht mehr vorhanden ist.

Es stand da glaube ich irgendwas mit "EXTN/RCPT/.../..."

Gruß
Keen
 
Startscripte für Fedora Core 1

Hallo,

habe Sendmail auch mit Spamassassin und ClamAV am Laufen. Aber die oben geposteten init-Scripte müssen für Fedora wohl angepasst werden. Hat jemand die Scripte für Fedora??

Irvine
 
SpamAssassin

Moin,

habe SpamAssassin mit dem Script von Huschi installiert und läuft auch fehlerfrei. Nun aber ne janz dumme Frage so früh am Morgen.

Wie erkenne ich, ob er Spam und was er rausfischt?

Danke
Norman
 
Wenn Du nicht gleich alles von procmail in die Tonne kloppen läßt, kannst Du Deinen Mailclient darauf einstellen zu filtern:
Schau Dir den vollständigen Header von so einer Spam an. Dort sollten nun 'neue' Einträge á la 'X-Spam-Flag' etc zu finden sein. Damit kann Dein Mail-Client filtern und die als Spam markierten Emails in einem Spam-Folder ablegen.

huschi.
 
Filtern...

hm sowas dachte ich mir schon, kann ich mit deinem Skript, die Mails auf ein bestimmtes Mailkonto umleiten?

Wie erfolgt die Spamerkennung?

Grüße Norman
 
pretender79 said:
kann ich mit deinem Skript, die Mails auf ein bestimmtes Mailkonto umleiten?
Ja. In der Datei /etc/procmailrc mußt Du die letzten Zeilen wie folgt ändern:
Code:
# :0:
# Wenn es Spam ist, Mail umleiten
* ^X-Spam-Status: Yes
web1p100
Wobei Du statt web1p100 ein beliebiges Postfach angeben kann.

Wie erfolgt die Spamerkennung?
Was willst Du genau wissen?
- Wie SpamAssassin arbeitet?
- Wie die Verknüpfung zwischen MTA und SpamAssassin läuft?
- Wie Du auf dem Server Emails umleitest?
- Wie Du mit Deinem Client Emails filterst?

huschi.
 
Last edited by a moderator:
Back
Top