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.
Script runterladen und in /bin/ ablegen
spamassasin
Nun z.B. mit nano oder vim die Datei "user_prefs" mit folgendem Inhalt anlegen.
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
dann
Bayes DB anlegen
imapfilter konfigurieren
/root/.imapfilter/config.lua anlegen
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:
Alles ok? Dann kannst du dafür einen Job in der /etc/crontab anlegen.
danach
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
Hinweis: Mailserver, User eintragen. Das Passwort wird dann gespeichert
Spamfilter anlernen
--teachonly --learnhambox INBOX.Gesendet --spamc \n\n\n";Show/Hidden bash code
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
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
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
Ausführbar machen
Dann kannst du dafür einen Job in der /etc/crontab anlegen.
danach
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
#!/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
Dann kannst du dafür einen Job in der /etc/crontab anlegen.
danach
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
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
Nach der Umstellung auf 1.00 ist alles tutti, so wie es bis jetzt aussieht.
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.
Lade dir mal auf github die aktuelle Version von isbg.py herunter. Ab Version 1.0 wird SSL per default unterstützt.
Gruß
Dualbit
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
Ich versuche seit einigen Tagen isbg um STARTTLS zu erweitern. Kann jemand helfen?
Danke!
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!
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.
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.
Alle Kommentare dieses Beitrages als RSS-Feed.