[Tutorial] SpamAssassin auf vServer mit Sendmail installieren

djrick

Registered User
System vorbereiten:

Diesen User müsst ihr in /etc/passwd eintragen:
Code:
spamd:x:110:110:Spamassassin:/nonexistent:/bin/false
Dannach diese Gruppe in /etc/group hinzufügen:
Code:
spamd::110:
Dannach ladet ihr euch die Sourcen von Spamassassin herunter von:

http://www.spamassassin.org

Dannach entpacken:
Code:
tar -xzf Mail-Spamassassin-x.xx.tar.gz 
cd Mail-Spamassassin-x.xx 
perl Makefile.PL 
make all install
Jetzt ist Spamassassin auf dem Vserver installiert und der Deamon kann gestartet werden:
Code:
spamd -d -u spamd
Als nächstes müsst ihr ein Program namens "Milter" installieren.
Hier herunterladen:

http://savannah.nongnu.org/download/spamass-milt/

Code:
tar -xzf spamass-milter-x.x.x.tar.gz 
cd spamass-milter-x.x.x 
./configure 
make all install 
mkdir /var/spamd 
chown spamd:spamd /var/spamd 
chmod 755 /var/spamd 
spamass-milter -p /var/spamd/spamass-milter.sock -b [email]caughtspam@your.domain.de[/email] -f
Wobei zu beachten ist: @your.domain.de muss natürlich noch auf eure Domain vom Server eingerichtet werden. Wenn auf eurem Server mehrere Domains laufen nehmt am besten die, die die Standart-Domain darstellt.

Nun müsst ihr Milter / Spamassassin in die Sendmail Config einbinden. Dazu öffnet ihr: /etc/mail/sendmail.mc und hängt am Ende der Datei folgendes an:
Code:
INPUT_MAIL_FILTER(`spamassassin',
S=local:/var/spamd/spamass-milter.sock, 
F=,T=C:15m;S:4m;R:4m;E:10m')
dnl define(`confINPUT_MAIL_FILTERS', `clmilter,spamassassin')
Nun müsst ihr das neue .mc File nocheinmal Kompilieren damit Sendmail die Änderungen übernimmt:
Code:
make -C /etc/mail
Ihr bekommt hier keine Ausgabe, höchstens ein "Now entering /etc/mail...Now leaving /etc/mail" Solltet ihr keine Fehler erhalten habt ihr alles richtig gemacht und Spamassassin ist in Sendmail "reinkompiliert"

Den Spam leitet spamass-milter an "caughtspam@your.domain.de" weiter. Eine elegante Möglichkeit, die ich auf meinem Mailserver verwende, ist ein Auto-Reply an den Absender, der Ihn darueber informiert, daß er Spam versendet hat.
Es gibt bei Spam 3 verschiedene Formen von Absendeaddressen oder Reply-To's:

1. Eine ge-fakte Addresse, an die nicht versandt werden kann
2. Eine echte Addresse, die einem unschuldigen Besitzer gehört
3. Eine echte Addresse und der Spam war gar kein Spam :-) (kommt selten vor)

Im 2. und 3. Fall ist ein Auto-Reply echt sinnvoll und im 1. Fall kommt dieser nicht an. Da wir jedoch meistens den 1. Fall haben, müssen wir uns vor den Mails von unserem sendmail schützen, die uns mitteilen, daß der Auto-Reply nicht versendet werden konnte. Daher versenden wir den Auto-Reply als "noreply@your.domain". Wie das ganze funktioniert schauen wir uns jetzt an.
Als erstes muss in /etc/mail/aliases die beiden Empfänger eingerichtet werden:
Code:
caughtspam: |"/usr/bin/echo_mail.pl" 
noreply: /dev/null
Damit wird "caughtspam" an unser Script geschickt, das einen Auto-Reply erzeugt und die Mail danach vernichtet. Alle Mails an "noreply" werden ebenfalls vernichtet und belästigen damit nicht den "postmaster". Nun braucht Ihr nur noch das nachfolgende Perlscript nach /usr/bin/echo_mail.pl kopieren und mit einem "chmod 755 /usr/bin/echo_mail.pl" ausführbar machen. Danach bekommt jeder "Spammer" einen netten Auto-Reply.
Code:
#!/usr/bin/perl
#
# (C) MaYmI 2004 under GPL
# 
use strict;

my $domain = "your.domain";
my ($buf,$mail,$rcpt,$status,$tmp,$length);

$status = 0;

while (read(STDIN,$buf,256)) {
        $mail .= $buf;
}

$length = length($mail);

if ($mail =~ /Subject: \[(.+)\].+\n/) {         # if true, this was a mailinglist
        $mail =~ /From:(.+)\n/;
        if ($1) {
                $rcpt = $1;
        } else {
                $status = 1;
        }
} else {
        $mail =~ /Reply-To:(.+)\n/;
        if ($1) {
                $rcpt = $1;
        } else {
                $mail =~ /From:(.+)\n/;
                if ($1) {
                        $rcpt = $1;
                } else {
                        $status = 1;
                }
        }
}

open (SENDMAIL,"|/usr/lib/sendmail -t");
print SENDMAIL <<EOF;
From: noreply\@$domain
To:$rcpt
Reply-To: noreply\@$domain
Subject: Your Mail was identified as spam / Ihre Mail wurde als Spam eingestuft
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="LQksG6bCIzRHxTLp"
Content-Disposition: inline
Content-Length: $length

--LQksG6bCIzRHxTLp
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline

------------------------------------------------------------
Hello,

your mail wasn't delivered because it's recogniced as spam.
Please verify the output attached to this mail and see why
this happend. This is an automatic mail. Replies to this
mail are redirected into the null-device.

regards,
The Webmaster
------------------------------------------------------------

--LQksG6bCIzRHxTLp
Content-Type: message/rfc822
Content-Disposition: inline

$mail

--LQksG6bCIzRHxTLp--


--LQksG6bCIzRHxTLp--

EOF
close (SENDMAIL);

Als letztes müsst ihr Sendmail neustarten. Je nach dem ob ihr es über Xinetd laufen habt oder als eigenen Service funktioniert das auf zwei verschiedene weisen:
Code:
Xinetd:
/etc/init.d/xinetd restart
ODER Sendmail:
/etc/ini.d/sendmail restart

FERTIG!

Thx @ Huschi the Husch - el Buffo für den Hinweis mit der .mc - http://www.maymi.de/content/unix/sendmail.php
 
Vielen Dank! Das ist bestimmt für viele hilfreich.
Ich werde das nächste Woche mal ausprobieren
und darüber berichten.

Gruß

Martin
 
Super Howto, djrick.
Aber...
djrick said:
Eine elegante Möglichkeit, die ich auf meinem Mailserver verwende, ist ein Auto-Reply an den Absender, der Ihn darueber informiert, daß er Spam versendet hat.
Ohne mal wieder eine Grundsatzdiskussion entfachen zu wollen, muß ich hier gegenhalten:
Wie manche wissen unterhalte ich mehrere (Kunden-)Server mit insgesammt ca. 40 Domains. Allein mein Mailaufkommen als Postmaster liegt bei weit über 100 Mail am Tag, die nur auto-Replys auf Spammails oder Virenmails sind, die gar nicht über den entsprechenden Server verschickt worden sind.
Ich denke aber, daß man das Perl-Script weiter ausbauen könnte um die Received-Zeilen des Mailheaders genauer zu untersuchen und festzustellen, ob die Mails wirklich von dem Server stammten, zu dem die Absenderdomain gehört.

huschi.
 
Hallo.
Ich habe es nach dieser Anleitung mal versuch, hab leider noch ein kleines Problem! Er erkennt eine Mail als Spam, das funktioniert schonmal, jedoch der auto reply im perl script zickt rum :(
Hier ein Auszug aus meiner mail.log

Ich hoffe ihr könnt mir helfen :(

Gruß Akurion

-----------------------------------------------------------------------
May 13 10:30:38 akurion sm-mta[8462]: i4D8UciI008462: Milter message: body replaced
May 13 10:30:38 akurion smrsh: uid 8: attempt to use "echo_mail.pl" (stat failed)
May 13 10:30:38 akurion sm-mta[8466]: i4D8UciI008462: to=|"/usr/bin/echo_mail.pl", ctladdr=caughtspam@akurion.org (8/0), delay=00:00:00, xdelay=00:00:00, mailer=prog, pri=34186, dsn=5.0.0, stat=Service unavailable
May 13 10:30:38 akurion sm-mta[8466]: i4D8UciI008462: i4D8UciI008466: DSN: Service unavailable
-----------------------------------------------------------------------
 
Akurion said:
May 13 10:30:38 akurion sm-mta[8466]: i4D8UciI008462: to=|"/usr/bin/echo_mail.pl", ctladdr=caughtspam@akurion.org (8/0), delay=00:00:00, xdelay=00:00:00, mailer=prog, pri=34186, dsn=5.0.0, stat=Service unavailable
Das klingt als ob Dein Perl-Script nicht funzt.
Dazu folgendes:
- Ist es im Unix-Format gespeichert? (nur LF am Zeilenende)
- Hast Du die Benutzerrechte richtig gesetzt? (chmod +x /usr/bin/echo_mail.pl)
- Hast Du die Syntax des Scripts getestet? (perl -c /usr/bin/echo_mail.pl)

huschi.
 
1. denke schon, habs mit "vi" gepasted
2. ja, es hat die rechte "755"
3. /usr/bin/echo_mail.pl syntax OK


kann es vielleicht am sendmail selber liegen das er keine perl scripte ausführen mag?
 
mal "per hand" ausgeführt, vielleicht liegts nicht am Script, unwahrscheinlich aber möglich...

Allerdings wie Huschi schon sagte: Wenn du zuviele Domains auf dem Server hast bzw zu viele Spammails bekommst, ist das Script sinnlos, weil es dann jede menge Mails verschicken würde. In dem Falle caughtsam auch an /dev/null weiterleiten.
 
Last edited by a moderator:
Welcher Milter-Version??

Hallo,

da liegen 5 verschiedene Milter-Versionen auf dem Server, alle vom
gleichen Tag. Welche soll man ziehen für den VServer bei SFY?

Gruß

Martin
 
fmschrader said:
da liegen 5 verschiedene Milter-Versionen auf dem Server, alle vom
gleichen Tag. Welche soll man ziehen für den VServer bei SFY?
Das aktuellste ist meistens das Beste.
Ich habe auf meinem vServer:
spamass-milter-0.2.0.tar.gz
installiert.
 
Hallo,

jetzt habe ich die Version mit der höchsten Nr genommen.
Aber was soll ich mit dieser Fehlermeldung anfangen?
Sieht für mich nach einem Scriptfehler aus. Die Datei /etc/init.d/sendmail existiert. Aber müßte da nicht ein Leerzeichen folgen?

Gruß

Martin

[root@147234 spamass-milter-0.2.0]# spamass-milter -p /var/spamd/spamass-milter.
sock -b caughtspam@mschrader.info -f
[root@147234 spamass-milter-0.2.0]# make -C /etc/mail
make: Entering directory `/etc/mail'
make: *** Warning: File `sendmail.mc' has modification time in the future (2004-
05-13 20:19:23 > 2004-05-13 20:19:07.769169)
sendmail.mc:10: m4: Cannot open /etc/init.d/sendmail-cf/m4/cf.m4: No such file o
r directory
make: warning: Clock skew detected. Your build may be incomplete.
make: Leaving directory `/etc/mail'
 
Tja, nun ist wohl was zerschossen worden.

Hier ein paar Zeilen aus meiner mail.log.

Sieht irgendwie nicht so aus, als würde ich im Augenblick
noch Mails erhalten, oder?

Kann damit jemand etwas anfangen?

Ciao

Martin
 
War zu schnell...

May 13 19:46:39 147234 spamd[7747]: server started on port 783/tcp (running version 2.63)
May 13 20:17:13 147234 spamass-milter[325]: spamass-milter 0.2.0 starting
May 13 20:22:09 147234 sendmail[2179]: NOQUEUE: SYSERR(root): No local mailer defined
May 13 20:22:09 147234 sendmail[2179]: NOQUEUE: SYSERR(root): QueueDirectory (Q) option must be set
 
Hallo zusammen,

jetzt mußte ich tatsächlich den teuren Support in Anspruch nehmen,
um wieder Mails zu bekommen. Das Problem wurde aber auch
auf Anhieb gelöst. Danke nochmal!

Nun läuft mein sendmail wieder, aber der Filter verweigert sich noch.

Kann jemand mit diesen Fehlermeldungen etwas anfangen?
Die Datei spamass-milter.sock ist wie oben beschrieben erstellt
worden.

Danke

Martin

May 13 23:51:07 147234 spamass-milter[25538]: spamass-milter 0.2.0 starting
May 13 23:54:00 147234 sendmail[29889]: i4DLrxLf029889: from=<fmschrader@t-online.de>, size=5587, class=0, nrcpts=1, msgid=<IOEHLEPHLKGLGLMOAGKMMEFKDBAA.mschrader@mschrader.info>, proto=ESMTP, relay=mailout05.sul.t-online.com [194.25.134.82]
May 13 23:54:00 147234 spamc[30147]: connect(AF_INET) to spamd at 127.0.0.1 failed, retrying (#1 of 3): Connection refused
May 13 23:54:01 147234 spamc[30147]: connect(AF_INET) to spamd at 127.0.0.1 failed, retrying (#2 of 3): Connection refused
May 13 23:54:02 147234 spamc[30147]: connect(AF_INET) to spamd at 127.0.0.1 failed, retrying (#3 of 3): Connection refused
May 13 23:54:03 147234 spamc[30147]: connection attempt to spamd aborted after 3 retries
May 13 23:54:04 147234 sendmail[5189]: i4DLrxLf029889: to=<info@logoversandservice.de>, delay=00:00:04, xdelay=00:00:01, mailer=esmtp, pri=30987, relay=mailin05.sul.t-online.de. [194.25.134.74], dsn=2.0.0, stat=Sent (Message accepted.)
 
Spamd läuft nicht. '/etc/init.d/spamd restart' sollte da Abhilfe schaffen.
Prüfe ob alle Start-Links korrekt angelegt sind (z.B. mit 'chkconfig --add spamd'), damit bei einem reboot auch spamd automatisch gestartet wird.

@djrick:
Genau das fehlt noch in Deinem Howto!

DJRICK: An welcher Stelle sollte es denn rein? Fügs bitte nach deinem Ermessen hinzu


huschi.
 
Last edited by a moderator:
Hallo Huschi,

vielen Dank für die Hilfe.

Der Restart hat geklappt. Aber der chkconfig gibt die Fehlermeldung
'service spamd does not support chkconfig'.
Ich habe /etc/init.d/spamd mit dem Inhalt 'spamd -d -u spamd'
angelegt. Macht das Sinn?

Gruß

Martin
 
Nein, das ist ein sehr mikriges Startscript, welches noch nichtmal alle nötigen Funktionen erfüllt.

Nimm dieses hier für RedHat:
(Speichern als /etc/init.d/spamd, darauf achten daß es im Unixformat ist.)
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

huschi.
 
So fängt der Sonntag gut an...

Guten Morgen Huschi,

vielen Dank für das Skript, hat geklappt. Und schon gibt auch
'chkconfig --add spamd' keinen Fehler mehr aus. Prima!

Viele Grüße

Martin
 
Tja, so ganz ist es wohl doch noch nicht.
Mein maillog gibt folgendes preis:

May 16 12:59:53 147234 spamd[1254]: server started on port 783/tcp (running version 2.63)
May 16 13:09:44 147234 sendmail[19366]: i4GB9ivo019366: Milter (spamassassin): error connecting to filter: Connection refused by /var/spamd/spamass-milter.sock
May 16 13:09:44 147234 sendmail[19366]: i4GB9ivo019366: Milter (spamassassin): to error state

Irgendwas liegt noch quer. Hast Du noch ne Idee, Huschi?

Gruß

Martin
 
Subby said:
1000 Dank für dieses Tutorial, läuft einwandfrei :D
Ich merk schon, dass dieses HowTo ziemlich viele Klicks hat....war anscheinend keine schlechte idee es mal zusammen zu fassen
 
Back
Top