Hallo zusammen,
auch wenn der Thread schon etwas länger liegt, kann ich hier meinen Senf dazu geben. Ich habe ebenfalls nach Lösungen gesucht, wie das Trainieren des Bayes Filter in UCS etwas komfortabler gestaltet werden kann, wenn Zarafa benutzt wird.
Dabei bin ich über diesen Thread gestolpert und demzufolge das spamtrain WebApp - Plugin. Dieses konnte ich so zum laufen bekommen:
Normalerweise wird spamassassin im UCS täglich über einen cron - job trainiert, hier der entsprechende Auszug aus dem Script, welches letztlich per cron.daily aufgerufen wird:
[code]find /var/spool/cyrus/mail/domain/ ( -wholename */*/*/user/*/Spam )
-exec $SA_LEARN --dbpath /var/lib/amavis/.spamassassin --spam {} ;
find /var/spool/cyrus/mail/domain/ -wholename */*/*/user/*/Ham
-exec $SA_LEARN --dbpath /var/lib/amavis/.spamassassin --ham {} ;
[/code]
Wie zu sehen, werden dabei u.a. alle Mails in allen “Spam” Ordnern der Benutzer mittels /usr/bin/sa-learn verarbeitet. Da spamassassin bei Univention als amavis - “Plugin” läuft, wird per --dbpath Parameter die entspr. Bayes - DB angegeben.
Das Ganze funktioniert aber nicht, wenn Zarafa benutzt wird, denn in dem Fall liegen die Mails ja in der MySQL DB von Zarafa und nicht als mbox - Dateien irgendwo unterhalb von /var/spool.
Damit nun das spamtrain Plugin für die Zarafa Webapp richtig funktioniert, muß nach dessen Installation folgendes angepaßt werden:
1.) Der Aufruf in der config.php des Plugins muss so abgeändert werden:
Von:
/** Spam Filter train commands (choose the one suitable for your setup) */
// DSPAM with shared spam database
define('PLUGIN_SPAMTRAIN_TRAIN_SPAM_CMD', '/usr/bin/dspam --user dspam --source=error --class=spam');
define('PLUGIN_SPAMTRAIN_TRAIN_HAM_CMD', '/usr/bin/dspam --user dspam --source=error --class=innocent');
// DSPAM with per user spam database
//define('PLUGIN_SPAMTRAIN_TRAIN_SPAM_CMD', '/usr/bin/dspam --user %u --source=error --class=spam');
//define('PLUGIN_SPAMTRAIN_TRAIN_HAM_CMD', '/usr/bin/dspam --user %u --source=error --class=innocent');
// SpamAssassin with per user database
//define('PLUGIN_SPAMTRAIN_TRAIN_SPAM_CMD', '/usr/bin/sa-learn --spam --username %u');
//define('PLUGIN_SPAMTRAIN_TRAIN_HAM_CMD', '/usr/bin/sa-learn --ham --username %u');
Nach:
/** Spam Filter train commands (choose the one suitable for your setup) */
// DSPAM with shared spam database
//define('PLUGIN_SPAMTRAIN_TRAIN_SPAM_CMD', '/usr/bin/dspam --user dspam --source=error --class=spam');
//define('PLUGIN_SPAMTRAIN_TRAIN_HAM_CMD', '/usr/bin/dspam --user dspam --source=error --class=innocent');
// DSPAM with per user spam database
//define('PLUGIN_SPAMTRAIN_TRAIN_SPAM_CMD', '/usr/bin/dspam --user %u --source=error --class=spam');
//define('PLUGIN_SPAMTRAIN_TRAIN_HAM_CMD', '/usr/bin/dspam --user %u --source=error --class=innocent');
// SpamAssassin with per user database
define('PLUGIN_SPAMTRAIN_TRAIN_SPAM_CMD', 'sudo /usr/bin/sa-learn --spam --dbpath /var/lib/amavis/.spamassassin');
define('PLUGIN_SPAMTRAIN_TRAIN_HAM_CMD', 'sudo /usr/bin/sa-learn --ham --dbpath /var/lig/amavis/.spamassassin');
Es müssen also zum Einen die sa-learn Kommandos “Einkommentiert” und die “dspam” - Kommandos “auskommentiert” werden. Des weiteren muß statt des “–username” - Parameters der “–dbpath” Parameter (s. Univention Cron - Script) benutzt werden.
2.)
Da das Verzeichnis “/var/lib/amavis/.spamassassin” nur vom Benutzer “amavis” beschrieben werden darf, das sa-learn Kommando aber als “www-data” abgesetzt wird (es kommt ja letztlich vom Webserver, der als www-data läuft), habe ich hier “sudo” verwendet, damit das sa-learn Kommando mit root - Rechten aufgerufen wird, und so in das Verzeichnis “/var/lib/amavis/.spamassassin” schreiben kann.
Damit das klappt, muß das dem www-data “erlaubt” werden. Dazu in “/etc/sudoers.d/” eine neue Datei anlegen (bspw. “www-data”):
cmnd_Alias SALEARN = /usr/bin/sa-learn
%www-data ALL=(ALL) NOPASSWD: SALEARN
Damit darf fortan der Benutzer “www-data” den Befehl “/usr/bin/sa-learn” per “sudo” mit root-Rechten ausführen, ohne nach seinem Passwort gefragt zu werden.
Wenn man dann in der WebApp eine Mail per Kontext-Menü als “Spam” kennzeichnet, wird das konfiguierte sa-learn Kommando aufgerufen und - wenn dieses mit RC 0 zurück kommt - die Mail anschließend gelöscht.
Sollte ein Fehlerfenster erscheinen (das evtl. sogar keinen Text enthält), kann man mit Aktivieren des Loggings in der config.php:
/** Logging */
define('PLUGIN_SPAMTRAIN_LOGGING_ENABLED', true);
define('PLUGIN_SPAMTRAIN_LOGGING_FILE', '/tmp/spamtrain.log');
auf Fehlersuche gehen.
Vllt. hilft das ja hier dem Ein oder Anderen weiter…
Viele Grüße
T0mcat