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.

 

Show/Hidden bash code

View source
 
 
 
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
 
 
 
 

 

Script runterladen und in /bin/ ablegen

Show/Hidden bash code

View source
 
 
 
cd /bin/
 
 
wget http://michael-heck.net/downloads/isbg.zip
 
 
unp isbg.zip
 
 
rm isbg.zip
 
 
chmod +x isbg.py
 
 
 
 

 

spamassasin 

Show/Hidden bash code

View source
 
 
 
cd root
mkdir .spamassassin && cd .spamassassin/
 
 
 
 

 

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

Show/Hidden bash code

View source
 
 
 
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
 
 
 
 

 

In der /etc/defaut/spamassasin folgende Zeilen anpassen

Show/Hidden bash code

View source
 
 
 
ENABLED=1
 
 
OPTIONS="--allow-tell --create-prefs --max-children 5 --helper-home-dir"
 
 
 
 

dann

Show/Hidden bash code

View source
 
 
 
/etc/init.d/spamassasin restart
 
 
 
 

 

Bayes DB anlegen

Show/Hidden bash code

View source
 
 
 
sa-learn --force-expire -D
 
 
 
 

 

imapfilter konfigurieren

/root/.imapfilter/config.lua anlegen

Show/Hidden bash code

View source
 
 
 
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)
 
 
}
 
 
 
 

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:

Show/Hidden bash code

View source
 
 
 
imapfilter
 
 
 
 

 

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

Show/Hidden bash code

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

danach

Show/Hidden bash code

View source
 
 
 
/etc/init.d/cron restart
 
 
 
 

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

 

isbg.py konfigurieren

--savepw\n\n\n";Show/Hidden bash code

View source
 
 
 
isbg.py --verbose --imaphost mail.domain.net --imapuser user@domain.net --savepw
 
 
 
 

 

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

 

Spamfilter anlernen

--teachonly --learnhambox INBOX.Gesendet --spamc \n\n\n";Show/Hidden bash code

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

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

 

 --teachonly --learnspambox INBOX.spam --spamc\n\n\n";Show/Hidden bash code

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

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

 

Spamfilter testen

 --delete --noreport --spamc\n\n\n";Show/Hidden bash code

View source
 
 
 
isbg.py --imaphost mail.xxxx.com --imapuser xxxx@xxxxx.net --delete --noreport --spamc
 
 
 
 

 

Läuft alles?

Dann ist es zeit auch das zu automatisieren!

Script in /bin/spam_check.sh anlegen.

--delete --noreport --spamc\n\n\n";Show/Hidden bash code

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

Ausf√ľhrbar machen

Show/Hidden bash code

View source
 
 
 
chmod +x /bin/spam_check.sh
 
 
 

 

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

Show/Hidden bash code

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

 

danach

Show/Hidden bash code

View source
 
 
 
/etc/init.d/cron restart
 
 
 
 

 

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.

--teachonly --learnspambox INBOX.spam --spamc\nisbg.py --imaphost mail.xxx.com --imapuser Diese E-Mail-Adresse ist vor Spambots gesch√ľtzt! Zur Anzeige muss JavaScript eingeschaltet sein! --teachonly --learnhambox INBOX.lerne --spamc\nisbg.py --imaphost mail.xxx.com --imapuser Diese E-Mail-Adresse ist vor Spambots gesch√ľtzt! Zur Anzeige muss JavaScript eingeschaltet sein! --teachonly --learnhambox INBOX.Gesendet --spamc\n\n\n";Show/Hidden bash code

View source
 
 
 
#!/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
 
 
 
 

Ausf√ľhrbar machen

Show/Hidden bash code

View source
 
 
 
chmod +x /bin/spam_learn.sh
 
 
 

 

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

Show/Hidden bash code

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

danach

Show/Hidden bash code

View source
 
 
 
/etc/init.d/cron restart
 
 
 
 

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.

 

 

 

Kommentare   

0 #9 Fillip 2017-04-09 17:28
Guten Abend zusammen,
ich wollte mich mal mit dem Thema hier befassen, da mein Mail Anbieter kein Spam filter hat... Nun bin ich leider nicht weit gekommen... Vielleicht hat jemand ne Idee woran es liegt.

Die Installation von "spamassassin imapfilter python" scheint nicht ganz reibungslos zu laufen:

pi@raspberrypi:/bin/.spamassassin $ sudo apt-get install spamassassin imapfilter python
Reading package lists... Done
Building dependency tree
Reading state information... Done
imapfilter is already the newest version.
python is already the newest version.
spamassassin is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 264 not upgraded.
2 not fully installed or removed.
After this operation, 0 B of additional disk space will be used.
Do you want to continue? [Y/n] y
Setting up spamassassin (3.4.0-6) ...
insserv: script habridge: service homebridge already provided!
Job for spamassassin.service failed. See 'systemctl status spamassassin.service' and 'journalctl -xn' for details.
invoke-rc.d: initscript spamassassin, action "start" failed.
dpkg: error processing package spamassassin (--configure):
subprocess installed post-installation script returned error exit status 1
dpkg: dependency problems prevent configuration of sa-compile:
sa-compile depends on spamassassin (>= 3.3.2-8); however:
Package spamassassin is not configured yet.

dpkg: error processing package sa-compile (--configure):
dependency problems - leaving unconfigured
Errors were encountered while processing:
spamassassin
sa-compile
E: Sub-process /usr/bin/dpkg returned an error code (1)

Desweiteren, was meinst du mit "cd /root" sicher zur√ľck ins Haupt bzw Stammverzeichnis (/home/pi) richtig?

Desweitren beim Versch die Datei " /etc/defaut/spamassasin" zu ändern, wird mir dann eine leere angezeigt...

Ich sage schon mal danke :-D
Dem Administrator melden
0 #8 Walter 2017-01-17 20:52
Also das Update der isbg.py auf 1.00 kann ich fuer Jessie nur empfehlen, hab 2 Abende gertselt warum das mit 0.99 nicht laeuft.
Nach der Umstellung auf 1.00 ist alles tutti, so wie es bis jetzt aussieht.
Dem Administrator melden
0 #7 viper 2016-10-14 10:53
Hallo.
Ich versuche gerade das Skript auf einem Raspberry Pi mit Raspian (Jessie) zum Laufen zu bringen da dieses genau das ist, was ich suche. Die Installation habe ich als root (also mit einem sudo vor den einzelnen Befehlen) durchgef√ľhrt. Das hat soweit geklappt. Das Skript erkennt auch wieviele Mails in dem Postfach sind, markiert aber keines als SPAM. Anlernen bringt auch nichts. Nun ist mir im Syslog aufgefallen, dass der Spamd einen Fehler bringt, der eine Verbindung ablehnt und nach 3mal abbricht. Ich habe im Internet gelesen, dass die Ursache wohl daran liegt, dass spamd nicht als root ausgef√ľhrt werden darf. Ich habe daraufhin einen user angelegt und in den Optionen von Spamassassin den User mit -u eingetragen. Aber auch das hat nicht zum Ziel gef√ľhrt. Nun bin ich mit meinem Linux Wissen am Ende. Hat jemand das Skript auf einen Raspberry mit Jessie am Laufen und k√∂nnte mir da den ein oder anderen Tipp geben ?
Vielen Dank im Voraus.
Dem Administrator melden
0 #6 Dualbit 2016-08-15 11:03
@Paul:

Lade dir mal auf github die aktuelle Version von isbg.py herunter. Ab Version 1.0 wird SSL per default unterst√ľtzt.

Gruß
Dualbit
Dem Administrator melden
0 #5 Dualbit 2016-08-15 09:27
Hallo,

warum kommentierst du in deiner 'user_pref' die Verwendung von razor2 aus, wenn du es installiert hast? Gibt es da irgendwelche Probleme mit pyzor?

Es gr√ľsst
Dualbit
Dem Administrator melden
0 #4 Paul 2015-12-21 10:56
Hallo!
Ich versuche seit einigen Tagen isbg um STARTTLS zu erweitern. Kann jemand helfen?
Danke!
Dem Administrator melden
0 #3 Plumber 2015-12-17 13:23
Ich bin es noch mal. Habe den Banana PI nun mit einer Bananian Debian wheezy 15.04 am Start.

Bei dieser geht alles soweit glatt, bis man den Spamfilter anlernene will. Ab da geht es nicht mehr weiter.
Evtl sollte hier der Autor mal neu ansetzen und ggf. Besserung im Artikel schaffen.
Da ich ein Fan von "Einmal-wegwerfadressen" in solchen Kommentarfunktionen bin, wäre es schön wenn es hier im Artikel eine Lösung gibt.

Viele Gr√ľ√üe!
Dem Administrator melden
0 #2 Plumber 2015-12-13 19:05
Hallo!

Tolles Script, bis es irgend wann probleme macht. Ich habe die Probleme das nur noch error's kommen durch isbg.py. Leider lsst sich das Script wohl nicht auf einem Bananian OS ausf√ľhren. Sehr schade, denn es w√§re exakt das gewesen, was ich gesucht h√§tte. Wie gesagt, bis zu dem Punkt wo das "isbg.py" arbeiten soll, lief alles soweit perfekt.
Dem Administrator melden
+1 #1 kingkong 2015-07-27 10:58
Hallo,

Danke f√ľr den Tutorial nur es gibt einige Probleme die ich gerne mitteilen m√∂chte.

Der Lua Script sollte wie folgt keine Fehler ausgeben:

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)


Weiters sollte man beachten falls ein Fehler bei der Ausf√ľhrung der Datei isbg.py wie folgt ausgeben sollte:

imaplib.error: command: UID => got more than 10000 bytes

Dann in der Datei imaplib.py nach dieser Zeile suchen _MAXLINE = 10000 und den Wert erhöhen.
Dem Administrator melden

Kommentar schreiben

Sicherheitscode
Aktualisieren