Moin,
hat sich schon jemand crm114 (http://crm114.sourceforge.net/) angeschaut?
Sieht von der Beschreibung ganz brauchbar aus.
Gruß, Nyx
SPAM-Filter CRM114
Re: SPAM-Filter CRM114
Null-Antwort-Löschung verhindern
Re: SPAM-Filter CRM114
CRM114 laden, entpacken und nach Anleitung compilieren und installieren. Anschließend mailfilter.crm, mailfilter.cf, blacklist.mfp, whitelist.mfp, rewrites.mfp, priolist.mfp, maillib.crm, mailreaver.crm und mailtrainer.crm vom crm-source-Verzeichnis in ein entsprechendes Verzeichnis kopieren. Ich habe es vorgezogen, für jeden Mailaccount einen eigenen Filter zu verwenden. Daher wurden die Dateien nach
/var/qmail/mailnames/domainname.de/mailuser
kopiert. Im gleichen Verzeichnis wurden auch die beiden Dateien nonspam.css und spam.css mittels
cssutil -b -r spam.css
bzw.
cssutil -b -r nonspam.css
erzeugt, die die Filterdatenbank darstellen.
rewrites.mfp kann zunächst leer bleiben, sollte aber besser, wie unter http://crm114.sourceforge.net/docs/CRM1 ... _HOWTO.txt Step 4 Part 1 beschrieben, angepasst werden.
In mailvilter.cf muss in jedem Fall das Passwort geändert werden, das man benötigt, wenn man den Filter per Returnmail trainieren will. Desweiteren habe ich noch die Exitcodes geändert, damit im .qmail je nach Exit-Code sortiert werden kann. Hier mein Beispiel der mailfilter.cf:
Das Beispiel setzt voraus, dass der Mime-Decoder mit "openssl base64" gestartet werden kann. Wer einen anderen verwendet, muss diese Zeile anpassen.
Leider hat sich in der mailfilter.crm ein Fehler eingeschlichen, wonach Spam-Verdacht-Mails nicht mit dem gewünschten Exit-Code kommen. Etwa in Zeile 1098 findet man folgendes:
danach folgendes einfügen:
Etwa in Zeile 1180 befindet sich diese eingefügte Zeile ebenfalls. Diese dort löschen.
Im Mailuserverzeichnis habe ich für die Sortierung der Mails 3 weitere .qmail-Dateien angelegt:
.qmail-clean
.qmail-unsure
.qmail-spam
Ich habe mich dafür entschieden, die Mails in Unterverzeichnisse zu sortieren. Daher mit maildirmake die Verzeichnisse angelegt:
maildirmake ./Maildir/.Spam
maildirmake ./Maildir/.Spamverdacht
maildirmake ./Maildir/.Ham
Das Ham-Verzeichnis verwende ich zum Trainieren des Filters. Dazu später mehr.
Jetzt noch die .qmail editieren:
chmod +t .qmail
vi .qmail
chmod -t .qmail
Nun sollten die Mails entsprechend sortiert werden.
Um den Filter zu trainieren, verwende ich die Unterverzeichnisse
./Maildir/.Spam/cur/
./Maildir/.Ham/cur/
Damit wird der Filter nur durch Mails trainiert, die auch tatsächlich gelesen wurden oder als solche markiert wurden. Somit werden versehentlich als Spam markierte ungelesene Mails nicht berücksichtigt. Obigen Code habe ich noch in einen Cron-Job eingebunden. Damit läuft das Training dann automatisch.
Nun muss man nur noch stets brav die nicht richtig erkannten Mails in das Spam- bzw. Ham-Verzeichnis verschieben oder kopieren und als gelesen markieren, damit diese beim Training auch berücksichtigt werden.
Wer mag, kann die Filterdatenbanken und diverse .qmail-Dateien auch global anlegen. In den Qmail-Manpages findet man entsprechende Hinweise, in welcher Reihenfolge und wo die .qmail-Dateien gesucht werden. Für die css-Dateien muss man beim crm-Aufruf den Pfad anpassen.
P.S. Ich bin davon ausgegangen, dass qmail seine Mails als einzelne Dateien in Verzeichnissen ablegt. Eine .qmail-Datei mit dem Inhalt
würde die Mails nicht in einem Verzsichnis sondern in einer Datei ablegen.
/var/qmail/mailnames/domainname.de/mailuser
kopiert. Im gleichen Verzeichnis wurden auch die beiden Dateien nonspam.css und spam.css mittels
cssutil -b -r spam.css
bzw.
cssutil -b -r nonspam.css
erzeugt, die die Filterdatenbank darstellen.
rewrites.mfp kann zunächst leer bleiben, sollte aber besser, wie unter http://crm114.sourceforge.net/docs/CRM1 ... _HOWTO.txt Step 4 Part 1 beschrieben, angepasst werden.
In mailvilter.cf muss in jedem Fall das Passwort geändert werden, das man benötigt, wenn man den Filter per Returnmail trainieren will. Desweiteren habe ich noch die Exitcodes geändert, damit im .qmail je nach Exit-Code sortiert werden kann. Hier mein Beispiel der mailfilter.cf:
Code: Select all
:spw: /myownpasswd/
:verbose_startup: //
:do_base64: /yes/
:mime_decoder: /openssl base64 -d/
:cache_dupe_command: //bin/ln/
:general_fails_to: //
:rejected_mail_exit_code: /3/
:accepted_mail_exit_code: /0/
:unsure_mail_exit_code: /2/
:program_fault_exit_code: /1/
:add_headers: /yes/
:add_verbose_stats: /no/
:add_mailtrainer_report: /yes/
:add_extra_stuff: /no/
:spam_flag_subject_string: /[MY-Spam]/
:good_flag_subject_string: //
:unsure_flag_subject_string: //
:confirm_flag_subject_string: /TCF:/
:rewrites_enabled: /yes/
:log_to_allmail.txt: /no/
:log_all_mail_to_file: //
:text_cache: /reaver_cache/
:trainer_invoke_command: /./mailtrainer.crm/
:trainer_randomizer_command: / ./shuffle.crm /
:trainer_randomizer_command: / ./crm114_tre shuffle.crm /
:log_rejections: /yes/
:log_rejections_to_file: //
:inoculations_enabled: /no/
:decision_length: /16000/
:expand_urls: /no/
:url_fetch_cmd: /wget -T 30 -O - /
:url_trim_cmd: / head -c 16000 /
:clf: /osb unique microgroom/
:thick_threshold: /10.0/
:lcr: /[[:graph:]]+/
:undo_interruptus: /no/
:automatic_training: /no/
Leider hat sich in der mailfilter.crm ein Fehler eingeschlichen, wonach Spam-Verdacht-Mails nicht mit dem gewünschten Exit-Code kommen. Etwa in Zeile 1098 findet man folgendes:
Code: Select all
:looks_good:Code: Select all
alter (:our_exit_code:) /:*:accepted_mail_exit_code:/Im Mailuserverzeichnis habe ich für die Sortierung der Mails 3 weitere .qmail-Dateien angelegt:
.qmail-clean
Code: Select all
./Maildir/Code: Select all
./Maildir/.Spamverdacht/Code: Select all
./Maildir/.Spam/maildirmake ./Maildir/.Spam
maildirmake ./Maildir/.Spamverdacht
maildirmake ./Maildir/.Ham
Das Ham-Verzeichnis verwende ich zum Trainieren des Filters. Dazu später mehr.
Jetzt noch die .qmail editieren:
chmod +t .qmail
vi .qmail
Code: Select all
| if [ -z "$CRMXX" ]; then export CRMXX=1; /usr/bin/crm -u $RECIPIENT ./mailfilter.crm > spamchk$$; retval=$?; if [ -s spamchk$$ ]; then if [ $retval = 2 ]; then crmdeliver="unsure"; elif [ $retval = 3 ]; then crmdeliver="spam"; elif [ $retval = 0 ]; then crmdeliver="clean"; else crmdeliver=""; fi; /var/qmail/bin/qmail-local "$USER" "$HOME" "$LOCAL" "-" "$crmdeliver" "$HOST" "$SENDER" "$DEFAULT" < spamchk$$; retval=$?; rm -f spamchk$$; [ $retval = 0 ] && exit 99; exit $retval; fi; rm -f spamchk$$; fi
./Maildir/Nun sollten die Mails entsprechend sortiert werden.
Um den Filter zu trainieren, verwende ich die Unterverzeichnisse
./Maildir/.Spam/cur/
./Maildir/.Ham/cur/
Code: Select all
/usr/bin/crm -u /var/qmail/mailnames/domainname.de/mailuser /var/qmail/mailnames/domainname.de/mailuser/mailtrainer.crm --good=/var/qmail/mailnames/domainname.de/mailuser/Maildir/.Ham/cur/ --spam=/var/qmail/mailnames/domainname.de/mailuser/Maildir/.Spam/cur/ --repeat=5 --verbose --randomizeNun muss man nur noch stets brav die nicht richtig erkannten Mails in das Spam- bzw. Ham-Verzeichnis verschieben oder kopieren und als gelesen markieren, damit diese beim Training auch berücksichtigt werden.
Wer mag, kann die Filterdatenbanken und diverse .qmail-Dateien auch global anlegen. In den Qmail-Manpages findet man entsprechende Hinweise, in welcher Reihenfolge und wo die .qmail-Dateien gesucht werden. Für die css-Dateien muss man beim crm-Aufruf den Pfad anpassen.
P.S. Ich bin davon ausgegangen, dass qmail seine Mails als einzelne Dateien in Verzeichnissen ablegt. Eine .qmail-Datei mit dem Inhalt
Code: Select all
./Maildir