From d8ace47eea9836760f8855e15f3521798e36f467 Mon Sep 17 00:00:00 2001 From: psy Date: Tue, 9 Feb 2021 14:00:35 +0100 Subject: [PATCH] train spam mails from junk --- defaults/main.yml | 1 + files/learn-ham.sieve | 5 +++ files/learn-spam.sieve | 2 + files/rspamd-learn-ham.sh | 2 + files/rspamd-learn-spam.sh | 2 + tasks/main.yml | 3 ++ tasks/sieve_train_from_junk.yml | 72 +++++++++++++++++++++++++++++++++ 7 files changed, 87 insertions(+) create mode 100644 files/learn-ham.sieve create mode 100644 files/learn-spam.sieve create mode 100644 files/rspamd-learn-ham.sh create mode 100644 files/rspamd-learn-spam.sh create mode 100644 tasks/sieve_train_from_junk.yml diff --git a/defaults/main.yml b/defaults/main.yml index 10fdf16..b183446 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -1,5 +1,6 @@ rspamd: redis: false + train_from_junk: false local_configs: {} rspamd_redis: local_configs: diff --git a/files/learn-ham.sieve b/files/learn-ham.sieve new file mode 100644 index 0000000..a9226ce --- /dev/null +++ b/files/learn-ham.sieve @@ -0,0 +1,5 @@ +require ["vnd.dovecot.pipe", "copy", "imapsieve", "variables"]; +if string "${mailbox}" "Trash" { + stop; +} +pipe :copy "rspamd-learn-ham.sh"; diff --git a/files/learn-spam.sieve b/files/learn-spam.sieve new file mode 100644 index 0000000..a5b6176 --- /dev/null +++ b/files/learn-spam.sieve @@ -0,0 +1,2 @@ +require ["vnd.dovecot.pipe", "copy", "imapsieve"]; +pipe :copy "rspamd-learn-spam.sh"; diff --git a/files/rspamd-learn-ham.sh b/files/rspamd-learn-ham.sh new file mode 100644 index 0000000..c30528f --- /dev/null +++ b/files/rspamd-learn-ham.sh @@ -0,0 +1,2 @@ +#!/bin/sh +exec /usr/bin/rspamc learn_ham diff --git a/files/rspamd-learn-spam.sh b/files/rspamd-learn-spam.sh new file mode 100644 index 0000000..da8e276 --- /dev/null +++ b/files/rspamd-learn-spam.sh @@ -0,0 +1,2 @@ +#!/bin/sh +exec /usr/bin/rspamc learn_spam diff --git a/tasks/main.yml b/tasks/main.yml index 31185e0..972f023 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -24,3 +24,6 @@ loop: "{{ rspamd.local_configs | dict2items }}" notify: - restart rspamd + +- include: sieve_train_from_junk.yml + when: rspamd.train_from_junk \ No newline at end of file diff --git a/tasks/sieve_train_from_junk.yml b/tasks/sieve_train_from_junk.yml new file mode 100644 index 0000000..5336aac --- /dev/null +++ b/tasks/sieve_train_from_junk.yml @@ -0,0 +1,72 @@ +- name: add sieve actions + blockinfile: + path: /etc/dovecot/conf.d/90-sieve.conf + insertbefore: "}" + block: | + # From elsewhere to Junk folder + imapsieve_mailbox1_name = Junk + imapsieve_mailbox1_causes = COPY + imapsieve_mailbox1_before = file:/etc/dovecot/sieve/learn-spam.sieve + + # From Junk folder to elsewhere + imapsieve_mailbox2_name = * + imapsieve_mailbox2_from = Junk + imapsieve_mailbox2_causes = COPY + imapsieve_mailbox2_before = file:/etc/dovecot/sieve/learn-ham.sieve + + sieve_pipe_bin_dir = /etc/dovecot/sieve + sieve_global_extensions = +vnd.dovecot.pipe + sieve_plugins = sieve_imapsieve sieve_extprograms + register: dovecot_config + +- name: restart dovecot + when: dovecot_config.changed + service: + name: dovecot + state: restarted + +- name: create directory for sieve files + file: + path: /etc/dovecot/sieve + state: directory + +- name: copy global sieve files + copy: + src: "{{ item }}" + dest: "/etc/dovecot/sieve/{{ item }}" + owner: vmail + group: vmail + mode: 0500 + with_items: + - learn-spam.sieve + - learn-ham.sieve + register: sieve_scripts + +- name: run sieve compiler + when: sieve_scripts.changed + command: | + sievec /etc/dovecot/sieve/{{ item }} + with_items: + - learn-spam.sieve + - learn-ham.sieve + +- name: chown sieve files + file: + path: "/etc/dovecot/sieve/{{ item }}" + owner: vmail + group: vmail + mode: 0500 + with_items: + - learn-spam.svbin + - learn-ham.svbin + +- name: copy shellscripts + copy: + src: "{{ item }}" + dest: "/etc/dovecot/sieve/{{ item }}" + owner: vmail + group: vmail + mode: 0700 + with_items: + - rspamd-learn-spam.sh + - rspamd-learn-ham.sh \ No newline at end of file