Danke für den Hinweis. Angesprochenes Feature ist im Paket grommunio-antispam ab der Version "grommunio-antispam-3.2-<distro>.6.1" enthalten.
SPAM Ham learned/lernen
- Edited
Jo, sieht schon besser aus.
Ich schau mir ja nur den Code an aber irgendwie macht mich die nächste Baustelle stutzig.
Wer hat denn sqlite3
installiert? Das einzige was mit Core verfügbar ist schimpft sich /usr/bin/sqlite3_analyzer
.
EDIT: Eine frage zu der Verwirklichung:
Könnte ich quasi mit
echo 'select message_id,mid_string from messages where parent_fid=0xb;' | sqlite3 "${MAILDIR}/exmdb/exchange.sqlite3" -tabs -noheader | while read -r TRASHMSG; do
MSGID=$(echo "${TRASHMSG}" | awk '{ print $1 }')
/usr/libexec/gromox/delmsg -d "${MAILDIR}" -f 0x17 "${MSGID}"
done
die Gelöschten Elemente leeren? ;P
Installieren mit: zypper in sqlite3
, benötigt man sowieso wenn man in den Datenbanken was ändern oder nachsehen muss.
WalterH
Jo danke Walter :-).
Ging eher darum das sqlite3
als Abhängigkeit gesetzt wird für das Paket grommunio-antispam
damit man gar nicht drüber nachdenken muss.
Ich denke @mwilliams hat den wink mit dem Zaunpfahl schon verstanden.
- Edited
Wo wird sqlite3
direkt aufgerufen?
Die Programme verwenden die Sqlite3 Bibliotheken, die Programme sollten das Executable nicht benötigen. Nur die Admins verwenden sqlite3
.
- Edited
grommunio-antispam-3.2-lp153.6.1.x86_64.rpm
Datei /usr/sbin/grommunio-spam-run.sh
Zeile 20
18
19 echo "${MYSQL_QUERY[@]}" | ${MYSQL_CMD[@]} | while read -r USERNAME MAILDIR ; do
>> 20 echo 'select message_id,mid_string from messages where parent_fid=0x17;' | sqlite3 "${MAILDIR}/exmdb/exchange.sqlite3" -tabs -noheader | while read -r SPAMMSG; do
21 MSGFILE=$(echo "${SPAMMSG}" | awk '{ print $2 }')
Ich ging davon aus das die auch benutzt wird und laut rpm nur libsqlite3.so
cb@asterix ~/denv/Downloads % rpm -ivh grommunio-antispam-3.2-lp153.6.1.x86_64.rpm |& grep sqlite3
libsqlite3.so.0()(64bit) is needed by grommunio-antispam-3.2-lp153.6.1.x86_64
Das ist natürlich besch... wenn die Abhängigkeit fehlt. Bei den Entwicklern ist sqlite3
natürlich installiert. Vermutlich deshalb übersehen.
crpb Ich gehe davon aus, das es funktioniert. Nur muss man dann den Cleaner laufen lasse, da die Elemente nur aus der Datenbank gelöscht werden aber auf der Disk bleiben, wie auch bei allen anderen Löschvorgängen.
for i in /var/lib/gromox/user/*/*; do /usr/libexec/gromox/cleaner -v -d "$i"; done
- Edited
Aja, ich werde es mal bei gelegenheit in meiner Test-VM laufen lassen.
Apropos Cleanup hab ich die lösung ja schon in Bunt bei mir im Standard-Environment. :P
https://gist.github.com/crpb/bb414090acc4a4db5715c2a4116cad1d
# vim: filetype=sh
# FARBSPIELE #
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
function red { printf "${RED}$@${NC}\n" ; }
function green { printf "${GREEN}$@${NC}\n" ; }
function yellow { printf "${YELLOW}$@${NC}\n" ; }
function blue { printf "${BLUE}$@${NC}\n" ; }
# Grommunio Konsolen Helferlein
# Gromox - Cleanup already deleted files
grom_cleanup() {
local maildir
MESSAGE="\n\n\tTo really cleanup use: "$(blue "grom_cleanup")" "$(red "clean")"\n"
SWITCH="-n";
if [[ "$1" = "clean" ]]; then SWITCH="";MESSAGE=""; fi
for user in $(grom_users); do
yellow "User: ${user}:"
maildir="$(grommunio-admin user query --filter username="${user}" maildir)"
/usr/libexec/gromox/cleaner "${SWITCH}" -d "${maildir}" |grep --color=always -e "^" -e "[^ ]*[0-9](M|G|k)B"
done
echo -e "$MESSAGE"
}
# Grommunio-Users
# List Domains
grom_doms() { grommunio-admin domain list |awk '{print $2}' ; }
# List User
grom_users() {
local doms
if [[ "$#" -ge 1 ]]; then
doms=$(grep "^${1}" <<< "$(grom_doms)")
else
doms=$(grom_doms)
fi
for dom in $doms; do \
grommunio-admin user query --format json-structured | \
jq -r '.[]|select(.username|endswith("'"${dom}"'"))|.username'
done
}
Was dann noch fehlt, passt aber nicht zu den Thread, man muss gelegentlich die Datenbanken verkleinern, funktioniert z.B. so für die erste Domain Datenbank, für die User Datenbanken so ähnlich, nur anderer Path:
systemctl stop gromox-http
sqlite3 /data/gromox/domain/1/exmdb/exchange.sqlite3 'VACUUM;'
systemctl start gromox-http
- Edited
WalterH
Ei super. Vielen Dank! Also einfach wie ne steinalte Postgres behandeln *haha*
EDIT: Nagut... es geht ja viel einfacher...
grom_cleanup clean
/usr/libexec/gromox/delmsg -d /var/lib/gromox/user/*/* -f 0xb
for db in /var/lib/gromox/user/*/*/exmdb/exchange.sqlite3; do ls -l "$db"; sqlite3 "$db" 'VACUUM;'; ls -l "$db"; done
Könnte man das Löschen der Elemente als optional konfigurieren?
Wir haben dann doch immer mal wieder false positives die wir erst nach einiger Zeit finden. Wenn ich das Spam-lernen automatisch aufsetze, dann würden diese Email gelöscht werden.
- Edited
Also tendenziell wären das ja nur ein paar Zeilen im Skript und wohl noch ne configdatei irgendwo um es zu steuern.
Jedoch kenne ich mich nicht so sehr mit rspamd aus inwiefern den das interessiert wenn die Nachricht bereits als Spam geflagged wurde. Ich vermute mal es ist egal wenn man das mehrmals macht.
Das hier sollte doch reichen oder? NICHT GETESTET!
grommunio-test:~ # cat << EOF > /etc/sysconfig/grommunio-antispam
# Delete Messages after rspamc learn_spam
# Defaults to YES / true
DELETE_MESSAGE=true
EOF
grommunio-test:~ # diff /usr/sbin/grommunio-spam-run.sh ~/grommunio-spam-run.sh
2a3,4
> . /etc/sysconfig/grommunio-antispam
>
33c35
< if [ ${EXITSTATUS} -eq 0 ]; then
---
> if [ ${EXITSTATUS} -eq 0 ] && [ ${DELETE_MESSAGE:-"true"} = "true" ]; then
Ich suche immer noch, wir sich rspamd verhält, wenn Spam mehrfach gelernt wird. Wenn das kein Problem ist, dann setze ich deinen Vorschlag bei mir mal testweise um, vielen Dank!
Aktuell hänge ich aber noch daran: https://community.grommunio.com/d/540-wann-ist-mid-string-aus-der-message-tabelle-leer