Spamassassin optimieren Teil 2: Der Spamkiller


13.March 2008

Im 2. Teil zu meinen Bestrebungen dem Spam auf meinem Webserver Herr zu werden habe ich mich mit der Möglichkeit beschäftigt, Spam gar nicht erst zum User gelangen zu lassen.

Mit Hilfe von Squirrelmail als Webfrontend, Spamassassin auf dem Server und einem Cron Script, werden Spam Mails die der Assassin findet 5 Tage in einem Spam Ordner per Squirrelmail vorgehalten, und dann automatisch gelöscht. Vorher lernt Spamassassin natürlich schön aus dem Inhalt der Mails…

 Zuerst habe ich jedem Mailuser in seinem Mail Spool ein Unterverzeichnis SPAM eingerichtet. Mailserver Config habe ich dann zentral angesagt, dass alles was Spamassassin während des Serverprozesses “Empfangen” findet (Markierung *SPAM*), direkt in den Ordner SPAM umleitet. Da dies für jeden Mailserver wie sendmail, postfix oder exim anders aussieht, verweise ich an dieser Stelle mal frech auf die Herstellerseiten der Pakete.

Jede erkannte Spam Mail wird nun also in den gesonderten Ordner verfrachtet, wo sich die User die Mails 5 Tage lang per Webmail, in meinem Fall Squirrelmail, ansehen können. Falls versehentlich falsche Mails als Spam deklariert werden, können diese verschoben werden.

Nach 5 Tagen dann aber schlägt von hinten und ohne Vorwarnung ein Lern-und-Kill Script zu, welches stumpf jeglichen Spam löscht. Ich habe mein lern-und-kill Script ganz doof killspam.sh genannt, und in einem meiner Bastelordner abgelegt. Also ab an den Platz eurer Wahl und

vi killspam.sh

getippt. Der Inhalt sieht dann so aus:

#!/bin/sh
# Variable Anzahl Tage, bis Spam zu alt wird
TOO_OLD=2

# Spam Ordner finden
PATH_SPAM=”find /var/mail/ -type d -name .spam
echo [$PATH_SPAM<br /> # raus, wenn kein spam<br /> if [ -z “$]{.math .inline}{PATH_SPAM}” ]; then
   exit 0
fi
# Spam lernen und dann killen nach Variable [$TOO_OLD (Std. 5)<br /> if [ -n “$]{.math .inline}{PATH_SPAM}” ]; then
   for each in “${PATH_SPAM}” ; do
       FILES_TO_DELETE=”find ${each} -type f -ctime +$TOO_OLD
       if [ -n “${FILES_TO_DELETE}” ]; then
          for file in ${FILES_TO_DELETE} ; do
              if [ -n ${file} ]; then
                 sa-learn –no-sync –spam ${file}
                 rm -f ${file}
              fi
          done
       fi
   done
fi
sa-learn –sync

exit 0

Dieses Script habe ich dann lecker per Cron in den täglichen Ablauf gebannt:

 15 3 * * * /irgendwo/killspam.sh | mail -s “Killspam” mail@adresse.de

So wird täglich alles 5 Tage alte Zeug gelernt, und dann gelöscht UND Ihr erhaltet eine Mail vom Cron. Die Mailuser sehen auf meinem Server seither keine Spam Mails mehr, und bisher gab es keine false positives zu verzeichnen.