Zarafa spamtrain und UCS

mail
german

#1

Hallo zusammen,

ich bin neu hier und habe dank der tollen Beiträge eigentlich schon alles zum laufen bekommen.
Was noch fehlt is die Spam/Ham integration in Zarafa.

Bei Zarafa habe ich das Plugin spamtrain gefunden und den Entwickler kontaktiert um zu erfahren ob er dies noch aktiv entwickelt, da er dies bejaht hat aber leider nicht sagen konnte wie es mit dem UCS läuft frage ich mal hier in die Runde, da es noch keinen Beitrag dazu gab, wie es zum funktionieren gebracht werden kann.

Hier die Konfigurationsmöglichkeiten in der config.php

<?php
/**
 * Global plugin settings.
 */

/** Logging */
define('PLUGIN_SPAMTRAIN_LOGGING_ENABLED', true);
define('PLUGIN_SPAMTRAIN_LOGGING_FILE', '/tmp/spamtrain.log');

/** 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');

/**
 * Per user plugin settings.
 */

/** Enable the spamtrain plugin for all clients */
define('PLUGIN_SPAMTRAIN_USER_DEFAULT_ENABLE', false);
?>

Denke mal dass läuft mit SpamAssasin, drum habe ich da mal die auskommentierung weggenommen.
Muss da nun sonst noch was beachtet oder konfiguriert werden.
Bissher ging dass auf dem alten Server mittels eines Skript und einem junkunlearn ordner, denke aber das Plugin funktioniert besser und einfacher für die meisten Enduser auf dem System.

Viele Grüße D.


Spamassassin Bayes Training + Zarafa
#2

Hallo noch mal,

ich hatte nun mit dem Entwickler gesprochen, nachdem ich diese Logfile an ihn gesendet habe.

DEBUG: enter::trainham
DEBUG: Invoking command '/usr/bin/sa-learn --ham --username maxmustermann'...
DEBUG: Streaming message to command:
Return-Path: <testmail@domain.de>
Received: from intranet.maxmustermann.de (127.0.0.1)
	by intranet (Zarafa-spooler) with LMTP
	for <testmail@domain.de>; Thu, 19 Nov 2015 18:20:40 +0100 (CET)
Received: from localhost (localhost [127.0.0.1])
	by intranet.maxmustermann.de (Postfix) with ESMTP id 7260AA0064
	for <testmail@domain.de>; Thu, 19 Nov 2015 18:20:40 +0100 (CET)
X-Virus-Scanned: by amavisd-new-2.7.1 (20120429) (Debian) at maxmustermann.de
X-Spam-Flag: YES
X-Spam-Score: 1001.203
X-Spam-Level: ****************************************************************
X-Spam-Status: Yes, score=1001.203 tagged_above=-1000 required=5
	tests=[DKIM_ADSP_CUSTOM_MED=0.001, FREEMAIL_FROM=0.001, GTUBE=1000,
	HTML_MESSAGE=0.001, NML_ADSP_CUSTOM_MED=1.2, NO_RELAYS=-0.001,
	TVD_SPACE_RATIO=0.001] autolearn=no
Received: from intranet.maxmustermann.de ([127.0.0.1])
	by localhost (intranet.maxmustermann.de [127.0.0.1]) (amavisd-new, port 10024)
	with ESMTP id JRmakEEpflsX for <testmail@domain.de>;
	Thu, 19 Nov 2015 18:20:40 +0100 (CET)
Received: from intranet.maxmustermann.de (localhost [127.0.0.1])
	by intranet.maxmustermann.de (Postfix) with ESMTP id 201B4A0062
	for <testmail@domain.de>; Thu, 19 Nov 2015 18:20:40 +0100 (CET)
MIME-Version: 1.0
Received: from gmail-pop.l.google.com [74.125.206.108]
	by intranet.maxmustermann.de with POP3 (fetchmail-6.3.21)
	for <testmail@domain.de> (single-drop); Thu, 19 Nov 2015 18:20:40 +0100 (CET)
Received: by 10.36.211.146 with HTTP; Thu, 19 Nov 2015 09:19:38 -0800 (PST)
Date: Thu, 19 Nov 2015 18:19:38 +0100
Delivered-To: testmail@domain.de
Message-ID: <CAGran6nTeTWi-EPXyetAzQ1KiALArTnsQo2RsVjj6OWhN0NCJw@mail.gmail.com>
Subject: test
From: Test User <testmail@domain.de>
To: Test User <testmail@domain.de>
Content-Type: multipart/alternative; boundary=001a114457a6af5c380524e7f6a1

This is a multi-part message in MIME format. Your mail reader does not
understand MIME message format.
--=_QwOo8UTGVYPTMsXHh1X8on93Fvpg+74npNcYgs-ZMJIogoy6
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit

XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X

--=_QwOo8UTGVYPTMsXHh1X8on93Fvpg+74npNcYgs-ZMJIogoy6
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><code>XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UB=
E-TEST-EMAIL*C.34X</code></div>=0D=0A
--=_QwOo8UTGVYPTMsXHh1X8on93Fvpg+74npNcYgs-ZMJIogoy6--
ERROR: Command '/usr/bin/sa-learn --ham --username maxmustermann' finished with status 2
DEBUG: exit::trainham (result=false)

Er denkt es könnte mit den Userrechten zu tun haben und mir diesen Link gesendet, wobei ja nicht Dovecot genutzt wird
http://serverfault.com/questions/703173/spamassassin-with-dovecot-antispam-training

Ich habe noch dieses Gefunden
wiki.apache.org/spamassassin/SiteWideBayesSetup

Hat noch jemand eine Idee, denke ansonsten würde das Zarafa Plugin funktionieren.

Gruss D.


#3

Hast du denn versucht wie im verlinkten Artikel die Berechtigungen anzupassen? In diesem Fall läuft ja sa-learn nicht als Dovecot sondern, als www-data (weil über den Webserver ausgeführt).

Ansonsten könnte das von mir in github.com/zarafa4ucs/zarafa4uc … -160276783 genannte Skript auch interessant sein. Dieses arbeitet Serverseitig und erfasst damit auch Mails die z.B. über ein Mobiltelefon als Spam/Ham markiert werden.


#4

@fbartels

Danke für Ihre Antwort Herr Bartels, ich habe das gleiche Problem wie der User

ich werde mir das Skript heute Abend ansehen.
Ich dachte nur spamtrain würde out of the box arbeiten und ist eine einfache Sache.
Würden die beiden Dinge auch parallel laufen?

Es wäre toll, ich bin mit Zuteilung oder Änderungen von Rechten immer sehr vorsichtig und eher unerfahren, wenn Sie mir diesbezüglich noch mal auf die Sprünge helfen und mir schreiben was ich genau anpassen muss.

Mein english ist jetzt auch nicht gerade der Hammer und die ich habe auch bis auf sa-learn die anderen Dateien nicht gefunden.

Danke Ihnen und einen schönen start in die neue Woche Theodor


#5

Ich habe das leider auch noch nicht auf Univention umgesetzt und müsste es daher auch erstmal selbst durchspielen. Dafür fehlt mir momentan aber leider die Zeit.


#6

Danke für die Antwort Herr Bartels,

es eilt ja nicht, aber es wäre toll, wenn die Sache mal gut dokumentiert wäre, so dass es die meistens selbständig einrichten Können.
Vielleicht ergibt sich ja am Jahresende eine Möglichkeit :wink:
Gerne kann ich Ihnen auch einen Zugang zu dem Testsystem geben.

Viele Grüße D.


#7

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


#8

Und weiter gehts…

Habe mir das hier:

mal angesehen und auch das funktioniert offensichtlich gut.
Hier muß lediglich in der “zarafa-spamhandler.cfg” das spamcommand geändert werden:

[spamcommand] command = /usr/bin/sa-learn --spam --dbpath /var/lib/amavis/.spamassassin/
(Dies wurde vorher per “sudo -u amavis” als amavis ausgeführt. Wenn geplant ist, das script als “root” auszuführen, ist das mMn. nicht nötig)

Wenn man nun zarafa-spamhandler.sh ausführbar macht und ausführt, funktioniert das Ganze auch gut und kann somit als Cron-Job eingerichtet werden.


#9

I’m trying to “install” the spamtrain plugin. I’m having trouble to find out which folder to place it in. I would expect the webapp folder to be in /var/www, but it isn’t. Can anyone tell me?

NB: with “find . -name “webapp” -type d”, I find only /etc/zarafa/webapp. It has a htaccess file, but I am not used to find webcontent in /etc


#10

Hello sakgRtd2w,

the webapp itself is located in /usr/share/zarafa-webapp. The plugins are installed in subfolders of the folder “plugins”.


#11

Thanks! Running “/usr/bin/sa-learn --spam --dbpath /var/lib/amavis/.spamassassin/” takes a long time as it seems. I wonder how I can check whether it works well?


#12

Hallo Zusammen,

leider muss ich diesen Thread noch mal hoch holen.

Inwieweit funktioniert das Spam und Ham handling nun in Kopano.
Können die hier angegebenen Scripte/Plugins auch in Kopano genutzt werden, da dieses ja eigentlich für Zarafa gemacht sind.
Da unser SMB Server nun einwandfrei mit den Testaccounts werkelt aber in der Spam Sache noch nichts unternommen wurde und auch dieser auch nicht auf den bekannten Teststring reagiert, möchte ich dieses ändern.
Wäre auch toll wen man dem Server auch fälschlich erkannte Spam Mails wieder abgewöhnen könnte.

Freue mich auf Anregungen, damit ich meine Tutorial vervollständigen kann.

Viele Grüße Holger


#13

Entschuldigt dass ich nun nach rund 21 Tagen den Beitrag pusche…Keiner eine Idee, ein Howto wie man dem Kopano spam und ham beibringt?
Danke Holger


#14

Hallo Holger,

grundsätzlich funktionieren hier unter Kopano die selben Skripte, wie auch unter Zarafa. Einen Möglichen Ansatz haben wir mal unter https://kb.kopano.io/display/WIKI/Kopano-spamd beschrieben.


#15

@fbartels

den Beitrag habe ich schon studiert, der funktioniert aber soweit ich es verstehe nur für Spam aber nicht für Ham also unlearn…
Zum andere, wenn ich einen Teststring um die Spamerkennung zu testen an die UCS sende wird dieser nicht erkannt…
sprich diesesn:
XJSC4JDBQADN1.NSBN32IDNENGTUBE-STANDARD-ANTI-UBE-TEST-EMAILC.34X

Danke Holger


#16

ja, das stimmt das verlinkte Beispiel macht nur Spam und keinen Ham.

Bezüglich des Teststrings kann ich leider nichts sagen, wir nutzen hier nur den Standardstack von Univention ohne darüber hinaus gehende Konfiguration.


#17

Danke @fbartels

Wird dass Skript noch um Ham erweitert?
Mit dem Tesstring wollte ich nur aufzeigen, dass wohl in der Univention konfiguration mit Kopano zusammen keine Spamerkennung stattfindet.


#18

zumindest gibt es dazu derzeit von unserer Seite aus keine Pläne. Pull Requests sind aber willkommen.


#19

Danke noch mals Herr Bartels @fbartels

Eine Erkenntnis habe ich noch und ich denke in dem Fall hat es was mit zarafa/Kopano zu tun.
Ich habe auf dem System einen Account zum Testen und dort läuft die Mail mit diesem Auffälligen Teststring der dann die Mail als Spam vorgaukelt richtig ab und liefert diese in den Spamordner von Kopano.
Kann es sein, dass bei der Migration mit dem zarafa Migration Tool irgendwas schief gelaufen ist.
Falls ja, was könnte ich/wir da tun.

Danke Noch mal Holger


#20

hm… kann ich mir nicht direkt vorstellen. Das Migrationstool sollte eigentlich bestehende Ordner erkennen und diese nicht überschreiben. Kommt denn bei der Zustellung eventuell ein Fehler im dagent.log?