Spamfilter für imap Postfach

mit isbg.py (IMAP Spam-Be-Gone) und spamassasin auf Debian wheezy

Ausgangssituation:

Du hast ein IMAP Postfach und bekommst relativ viel Spam. Leider hast du keine direkte Kontrolle über den Mailserver und kannst nur auf dem Client Filter / Tools verwenden um dich den SPAMs zu entledigen.

Leider ist die Projektseite von dem Script isbg.py nicht mehr online, bei github ist allerdings noch etwas zu finden.

Ich habe das Script überarbeitet und biete es dir hier zum Download an.

Lösung:

Ein vorhandener Debian Server (wheezy) oder ein Raspberry PI als imap Spam Filter!

Vorbereitung:

Lege in deinem IMAP-Postfach einen Ordner mit dem namen „spam“ an.

{code lang:bash hidden:false}

apt-get update
apt-get install spamassassin imapfilter python
apt-get install razor pyzor unp

apt-get install python-pip

pip install docopt==0.6.2

{/code} 

Script runterladen und in /bin/ ablegen

{code lang:bash hidden:false}

cd /bin/

wget HTTPS://michael-heck.net/downloads/isbg.zip

unp isbg.zip

rm isbg.zip

chmod +x isbg.py

{/code} 

spamassasin 

{code lang:bash hidden:false}

cd root
mkdir .spamassassin && cd .spamassassin/

{/code} 

Nun z.B. mit nano oder vim die Datei „user_prefs“ mit folgendem Inhalt anlegen.

{code lang:bash hidden:false}

required_score 5.0
#use_razor2 1
use_pyzor 1
use_bayes 1
bayes_auto_learn 1
bayes_auto_learn_threshold_nonspam -0.001
bayes_auto_learn_threshold_spam 9.0
#use_auto_whitelist 0
score BAYES_00 -4
score BAYES_05 -2
score BAYES_95 6
score BAYES_99 9
score DNS_FROM_AHBL_RHSBL 0
score __RFC_IGNORANT_ENVFROM 0
score DNS_FROM_RFC_DSN 0
score DNS_FROM_RFC_BOGUSMX 0
score __DNS_FROM_RFC_POST 0
score __DNS_FROM_RFC_ABUSE 0
score __DNS_FROM_RFC_WHOIS 0

{/code} 

In der /etc/defaut/spamassasin folgende Zeilen anpassen

{code lang:bash hidden:false}

ENABLED=1

OPTIONS=“–allow-tell –create-prefs –max-children 5 –helper-home-dir“

{/code} 

dann

{code lang:bash hidden:false}

/etc/init.d/spamassasin restart

{/code} 

Bayes DB anlegen

{code lang:bash hidden:false}

sa-learn –force-expire -D

{/code} 

imapfilter konfigurieren

/root/.imapfilter/config.lua anlegen

{code lang:bash hidden:false}

options.timeout = 120
options.subscribe = true

account1 = IMAP {
server = ‚mail.xxx.de‘,
username = ‚username‘,
password = ‚password‘

msgs = account1.INBOX:contain_subject(‚***SPAM***‘)
account1.INBOX:move_messages(account1[’spam‘],msgs)

}

{/code} 

Hinweis: Server, username, password anpassen!

Mails die „***SPAM***“ im Betreff stehen haben werden also direkt in den spam – Ordner geschoben. Das Tagging macht bereits der Mailserver auf dem mein Mailaccount liegt. Da nutze ich später aus um meinen lokalen Spamfilter davon lernen zu lassen. Der Tag könnte bei dir auch anders aussehen z.B. „[SPAM]“ oder „JUNK“. Einfach entsprechend anpassen.

Um den imapfilter zu testen folgendes ausführen:

{code lang:bash hidden:false}

imapfilter

{/code} 

Alles ok? Dann kannst du dafür einen Job in der /etc/crontab anlegen.

{code lang:bash hidden:false}

*/1 * * * * root imapfilter >/dev/null 2>&1

{/code} 

danach

{code lang:bash hidden:false}

/etc/init.d/cron restart

{/code} 

Von nun an prüft der Imapfilter jede Minute und verschiebt die Mails wenn welche vorhanden sind.

isbg.py konfigurieren

{code lang:bash hidden:false}

isbg.py –verbose –imaphost mail.domain.net –imapuser user@domain.net –savepw

{/code} 

Hinweis: Mailserver, User eintragen. Das Passwort wird dann gespeichert

Spamfilter anlernen

{code lang:bash hidden:false}

isbg.py –imaphost mail.xxxx.com –imapuser xxxx@xxxxx.net –teachonly –learnhambox INBOX.Gesendet –spamc 

{/code} 

Hinweis: Hier wird dem Spamfilter beigebracht, dass alles in INBOX.Gesendet kein Spam ist. Das kannst du für beliebige Ordner wiederholen.

{code lang:bash hidden:false}

isbg.py –imaphost mail.o-xxxx.com –imapuser  xxxx@xxxxx.net –teachonly –learnspambox INBOX.spam –spamc

{/code} 

Hinweis: Hier wird dem Spamfilter beigebracht, dass alles in INBOX.spam Spam ist.

Spamfilter testen

{code lang:bash hidden:false}

isbg.py –imaphost mail.xxxx.com –imapuser xxxx@xxxxx.net –delete –noreport –spamc

{/code} 

Läuft alles?

Dann ist es zeit auch das zu automatisieren!

Script in /bin/spam_check.sh anlegen.

{code lang:bash hidden:false}

!/bin/sh
isbg.py –imaphost mail.o-xxxxx.com –imapuser xxxxx@michael-heck.net –delete –noreport –spamc

{/code} 

Ausführbar machen

{code lang:bash hidden:false}

chmod +x /bin/spam_check.sh

{/code}

Dann kannst du dafür einen Job in der /etc/crontab anlegen.

{code lang:bash hidden:false}

*/1 * * * * root spam_check.sh >/dev/null 2>&1

{/code} 

danach

{code lang:bash hidden:false}

/etc/init.d/cron restart

{/code} 

Nun sollte der Spamfilter arbeiten!

Das lernen kannst du ebenfalls automatisieren.

Mails die falsch erkannt wurden bzw. gelernt werden sollen einfach in einem IMAP-Ordner „lerne“ ablegen. 

Script in /bin/spam_learn.sh anlegen.

{code lang:bash hidden:false}

#!/bin/sh
isbg.py –imaphost mail.xxx.com –imapuser xxxxx@michael-heck.net –teachonly –learnspambox INBOX.spam –spamc
isbg.py –imaphost mail.xxx.com –imapuser xxxxx@michael-heck.net –teachonly –learnhambox INBOX.lerne –spamc
isbg.py –imaphost mail.xxx.com –imapuser xxxxx@michael-heck.net –teachonly –learnhambox INBOX.Gesendet –spamc

{/code} 

Ausführbar machen

{code lang:bash hidden:false}

chmod +x /bin/spam_learn.sh

{/code}

Dann kannst du dafür einen Job in der /etc/crontab anlegen.

{code lang:bash hidden:false}

30 4 * * * root spam_learn.sh >/dev/null 2>&1

{/code} 

danach

{code lang:bash hidden:false}

/etc/init.d/cron restart

{/code} 

So wird nachts um 04:30 der Lernprozess gestartet. Alle Mails die du in den im Script angegebenen Orndern abgelegt hast werden so gelernt. Mit der Zeit wird der Spamfilter also immer besser.

Wenn dir das Projekt gefällt, habe ich natürlich nichts gegen eine kleine Spende.

 

Von heckmic

Schreibe einen Kommentar

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

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.