From 6d70a60899859a7f2fa1ed2f163e69618fcc062e Mon Sep 17 00:00:00 2001 From: Tunui Franken Date: Thu, 25 Jul 2024 22:10:02 +0200 Subject: [PATCH] Finish imapsieve config for learn-ham and learn-spam --- roles/mailserver_dovecot/handlers/main.yml | 12 +++ roles/mailserver_dovecot/tasks/main.yml | 73 ++++++++++++++++++- .../templates/learn-ham.sieve.j2 | 9 +++ .../templates/learn-spam.sieve.j2 | 5 ++ .../templates/rspamd-learn-ham.sh.j2 | 5 ++ .../templates/rspamd-learn-spam.sh.j2 | 5 ++ 6 files changed, 107 insertions(+), 2 deletions(-) create mode 100644 roles/mailserver_dovecot/templates/learn-ham.sieve.j2 create mode 100644 roles/mailserver_dovecot/templates/learn-spam.sieve.j2 create mode 100644 roles/mailserver_dovecot/templates/rspamd-learn-ham.sh.j2 create mode 100644 roles/mailserver_dovecot/templates/rspamd-learn-spam.sh.j2 diff --git a/roles/mailserver_dovecot/handlers/main.yml b/roles/mailserver_dovecot/handlers/main.yml index 5712374..4b50e50 100644 --- a/roles/mailserver_dovecot/handlers/main.yml +++ b/roles/mailserver_dovecot/handlers/main.yml @@ -5,3 +5,15 @@ ansible.builtin.command: cmd: sievec /etc/dovecot/sieve-after/spam-to-folder.sieve changed_when: true + +- name: Compile learn-spam.sieve + become: true + ansible.builtin.command: + cmd: sievec /etc/dovecot/sieve/learn-spam.sieve + changed_when: true + +- name: Compile learn-ham.sieve + become: true + ansible.builtin.command: + cmd: sievec /etc/dovecot/sieve/learn-ham.sieve + changed_when: true diff --git a/roles/mailserver_dovecot/tasks/main.yml b/roles/mailserver_dovecot/tasks/main.yml index 9c44314..74007af 100644 --- a/roles/mailserver_dovecot/tasks/main.yml +++ b/roles/mailserver_dovecot/tasks/main.yml @@ -152,14 +152,17 @@ line: '\1sieve_after = /etc/dovecot/sieve-after' notify: Reload dovecot service -- name: Create sieve-after directory +- name: Create sieve directories become: true ansible.builtin.file: - path: /etc/dovecot/sieve-after + path: "/etc/dovecot/{{ item }}" state: directory owner: root group: root mode: "755" + loop: + - sieve + - sieve-after - name: Copy spam-to-folder.sieve become: true @@ -201,3 +204,69 @@ backrefs: true line: '\1mail_plugins = $mail_plugins quota imap_sieve' notify: Reload dovecot service + +- name: Add imapsieve config for Junk training + become: true + ansible.builtin.blockinfile: + path: /etc/dovecot/conf.d/90-sieve.conf + 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 + insertafter: 'plugin {' + marker: "# {mark} ANSIBLE MANAGED BLOCK IMAPSIEVE" + notify: Reload dovecot service + +- name: Add configs for imapsieve + become: true + ansible.builtin.lineinfile: + path: /etc/dovecot/conf.d/90-sieve.conf + regexp: '^(\s*)#?{{ item.key }} =.*' + backrefs: true + line: '\1{{ item.key }} = {{ item.val }}' + loop: + - key: sieve_global_extensions + val: '+vnd.dovecot.pipe' + - key: sieve_plugins + val: 'sieve_imapsieve sieve_extprograms' + notify: Reload dovecot service + +- name: Copy learn-spam.sieve + become: true + ansible.builtin.template: + src: learn-spam.sieve.j2 + dest: /etc/dovecot/sieve/learn-spam.sieve + owner: root + group: root + mode: "600" + notify: Compile learn-spam.sieve + +- name: Copy learn-ham.sieve + become: true + ansible.builtin.template: + src: learn-ham.sieve.j2 + dest: /etc/dovecot/sieve/learn-ham.sieve + owner: root + group: root + mode: "600" + notify: Compile learn-ham.sieve + +- name: Copy rspamd-learn-spam.sh and rspamd-learn-ham.sh scripts + become: true + ansible.builtin.template: + src: "rspamd-learn-{{ item }}.sh.j2" + dest: "/etc/dovecot/sieve/rspamd-learn-{{ item }}.sh" + owner: root + group: root + mode: "700" + loop: + - spam + - ham diff --git a/roles/mailserver_dovecot/templates/learn-ham.sieve.j2 b/roles/mailserver_dovecot/templates/learn-ham.sieve.j2 new file mode 100644 index 0000000..02166af --- /dev/null +++ b/roles/mailserver_dovecot/templates/learn-ham.sieve.j2 @@ -0,0 +1,9 @@ +# {{ ansible_managed }} + +require ["vnd.dovecot.pipe", "copy", "imapsieve", "variables"]; + +if string "${mailbox}" "Trash" { + stop; +} + +pipe :copy "rspamd-learn-ham.sh"; diff --git a/roles/mailserver_dovecot/templates/learn-spam.sieve.j2 b/roles/mailserver_dovecot/templates/learn-spam.sieve.j2 new file mode 100644 index 0000000..5dad2a3 --- /dev/null +++ b/roles/mailserver_dovecot/templates/learn-spam.sieve.j2 @@ -0,0 +1,5 @@ +# {{ ansible_managed }} + +require ["vnd.dovecot.pipe", "copy", "imapsieve"]; + +pipe :copy "rspamd-learn-spam.sh"; diff --git a/roles/mailserver_dovecot/templates/rspamd-learn-ham.sh.j2 b/roles/mailserver_dovecot/templates/rspamd-learn-ham.sh.j2 new file mode 100644 index 0000000..cf7202d --- /dev/null +++ b/roles/mailserver_dovecot/templates/rspamd-learn-ham.sh.j2 @@ -0,0 +1,5 @@ +#!/bin/bash + +# {{ ansible_managed }} + +exec /usr/bin/rspamc learn_ham diff --git a/roles/mailserver_dovecot/templates/rspamd-learn-spam.sh.j2 b/roles/mailserver_dovecot/templates/rspamd-learn-spam.sh.j2 new file mode 100644 index 0000000..a0af1ca --- /dev/null +++ b/roles/mailserver_dovecot/templates/rspamd-learn-spam.sh.j2 @@ -0,0 +1,5 @@ +#!/bin/bash + +# {{ ansible_managed }} + +exec /usr/bin/rspamc learn_spam