SPAM-Filter CRM114

Postfix, QMail, Sendmail, Dovecot, Cyrus, Courier, Anti-Spam
User avatar
nyxus
RSAC
Posts: 697
Joined: 2002-09-13 08:41
Location: Lübeck

SPAM-Filter CRM114

Post by nyxus » 2003-01-25 22:37

Moin,

hat sich schon jemand crm114 (http://crm114.sourceforge.net/) angeschaut?

Sieht von der Beschreibung ganz brauchbar aus.


Gruß, Nyx

fritz
Systemtester
Systemtester
Posts: 1430
Joined: 2002-04-23 20:12
Location: Lehrte / Hannover

Re: SPAM-Filter CRM114

Post by fritz » 2003-03-02 05:15

Null-Antwort-Löschung verhindern

manjo
Posts: 32
Joined: 2004-01-14 14:46

Re: SPAM-Filter CRM114

Post by manjo » 2007-04-20 19:18

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:

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/
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:

Code: Select all

:looks_good:
danach folgendes einfügen:

Code: Select all

alter (:our_exit_code:) /:*:accepted_mail_exit_code:/
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

Code: Select all

./Maildir/
.qmail-unsure

Code: Select all

./Maildir/.Spamverdacht/
.qmail-spam

Code: Select all

./Maildir/.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

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/
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/

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 --randomize
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

Code: Select all

./Maildir
würde die Mails nicht in einem Verzsichnis sondern in einer Datei ablegen.