Author Topic: Спам в папку спам  (Read 4077 times)

AxetNord

  • Zen Monk
  • **
  • Posts: 79
  • Karma: +1/-0
    • View Profile
Спам в папку спам
« on: April 01, 2015, 03:46:07 pm »
Доброго времени суток.
Как настроить спам фильтр так, чтоб письма помеченные как спам отправлялись в папку спам пользователя? У меня сейчас они просто удаляются.

tunsa

  • Zen Samurai
  • ****
  • Posts: 350
  • Karma: +15/-1
    • View Profile
Re: Спам в папку спам
« Reply #1 on: April 02, 2015, 08:12:50 am »
Доброго времени суток.
Как настроить спам фильтр так, чтоб письма помеченные как спам отправлялись в папку спам пользователя? У меня сейчас они просто удаляются.

Почтовый клиент какой используете или сидите в почте через roundcube?

AxetNord

  • Zen Monk
  • **
  • Posts: 79
  • Karma: +1/-0
    • View Profile
Re: Спам в папку спам
« Reply #2 on: April 02, 2015, 08:15:58 am »
Используется Outlook и Thunderbird. Но письма, помеченные сервером как спам, не выходят из сервера. 

AxetNord

  • Zen Monk
  • **
  • Posts: 79
  • Karma: +1/-0
    • View Profile
Re: Спам в папку спам
« Reply #3 on: August 16, 2016, 12:16:30 pm »
Займусь некропостингом и оживлю тему.
Опытным путём было выяснено, что для того, чтобы спам не убивался сервером надо смотреть глазами в SMTP Mail Filter - Filter Policies - Spam policy ставить значение Pass.
Тогда спам тегируется но падает во входящие.

Осталось дело за малым, настроить сервер так, чтобы помеченные письма падали в папку Junk.
Единственное что с ходу пришло в голову, это настройка dovecot sieve scripts, но пока из этого ничего не выходит. Если здесь есть люди разбирающиеся в dovecot sieve буду рад помощи.

luha

  • Zen Samurai
  • ****
  • Posts: 479
  • Karma: +36/-1
    • View Profile
Re: Спам в папку спам
« Reply #4 on: August 16, 2016, 01:54:01 pm »
Решается настройкой правил sieve - это такие специальные фильтры на простеньком скриптовом языке, их можно править ручками в консоли, с помощью специальных программок или самописными скриптами (используется порт 4190), а также в вебморде почты (в roundcube в фильтрах). Короче стандартная тема.

Смысл такой же точно как и в локальных фильтрах почтовых менеджеров. Настраиваются действия на определённые правила. Тоесть к примеру надо чтобы письма с конкретного адреса переносились в конкретную папку и подобное. Отличие в том, что фильтры крутятся прямо на сервере и работают независимо от пользователя, поэтому можно настраивать разные автоответчики и прочее не терпящее отлагательств, кроме того имеем централизованное управление фильтрами и не надо на каждом устройстве повторять одно и тоже.

Фильтры физически лежат тут:
/var/vmail/sieve/domain.dom/user@domain.dom/roundcube.sieve

Однако сразу после создания ящика файл с настройками фильтров не создаётся! Чтобы он появилсятаки надо либо как-то руками действовать либо зайти в вебпочте в нужный ящик и открыть настройку фильтров - это проинициализирует что-то там и появится папка пользователя.

В зенчале sieve скрипты искусственно ограничены и имеют узкий функционал. Это можно исправить если надо (руками).

Ну и собсна к сути дела. Чтобы спам падал в спам скрипт должен быть примерно таким:

require ["copy","fileinto","imap4flags","vacation"];                                                                                               
# rule:[SPAM]                                                                                                                                       
if header :contains "X-Spam-Flag" "YES"                                                                                                             
{                                                                                                                                                   
        setflag "\\Seen";                                                                                                                           
        fileinto "Spam";                                                                                                                           
        stop;                                                                                                                                       
}

# rule:[SPAM] - это название фильтра.
Тут я применяю кроме прочего функцию "imap4flags" и обозначаю письмо как прочитанное строкой
setflag "\\Seen"; - это как раз из урезанного функционала фича и по дефолту может не работать, поэтому если что то удалить (оставил для примера).

fileinto "Spam"; - перенести письмо в папку с названием "Spam", папка должна существовать.

stop; - необязательный параметр, который указывает что дальше не надо выполнять никаких других скриптов. Бывает что следом идёт правило под которое письмо подпадает и без этого указания следующий фильтр также будет выполнен, а так нет.

Фильтры укладываются секциями (в примере это всё, кроме первой строки). Допускаются условия и регулярные выражения, комментирование знаком #. Выполняются последовательно сверху-вниз. Подробнее можно узнать из кучи манов.

P.S. Я через sieve кучу дел делаю. Проверяю на спам перед отправкой копии, фильтрую потоки и другое разное. Вещь нереально полезная! Решает простыми методами то, что по другому сделать вообще не знаю даже как.
« Last Edit: August 16, 2016, 02:55:01 pm by luha »

AxetNord

  • Zen Monk
  • **
  • Posts: 79
  • Karma: +1/-0
    • View Profile
Re: Спам в папку спам
« Reply #5 on: August 16, 2016, 02:37:54 pm »
Только руками применять для каждого пользователя не очень удобно.
в конфиге /etc/dovecot/conf.d/90-sieve.conf
есть параметр sieve_before. как я понял, сюда надо указывать путь к скрипту и данный скрипт будет отрабатываться до личных скриптов пользователя.
создаю папку /var/lib/dovecot/sieve/ и создаю там файл SPAM.sieve
В него пишу скрипт
Quote
require "fileinto";
if header :contains "X-Spam-Flag" "YES"
{
  fileinto "Junk";
}
Выполняю команду
sudo sievec /var/lib/dovecot/sieve/SPAM.sieve
ну и соответственно в конфиге 90-sieve.conf указываю
sieve_before = /var/lib/dovecot/sieve/SPAM.sieve
перезапускаю зенмаил, постфикс и довекот. но спам так и приходит в инбокс.
Как сделать общее правило для всех пользователей?

luha

  • Zen Samurai
  • ****
  • Posts: 479
  • Karma: +36/-1
    • View Profile
Re: Спам в папку спам
« Reply #6 on: August 16, 2016, 02:53:17 pm »
Ну и я вот тоже сразу пошёл по этому пути (только другой дорогой) и тоже как-то не сработало. Хотел как и вы сделать один общий скрипт. В итоге не было времени копать и плюнул, всёравно надо было с исключениями разными и прочим т.к. очень много ящиков и несколько домен. Если делать каждому отдельно то работает, но за интерес к теме спасибо, может даже разберёмся где косяк.

А папка "Junk" существует на сервере?
« Last Edit: August 16, 2016, 02:56:24 pm by luha »

AxetNord

  • Zen Monk
  • **
  • Posts: 79
  • Karma: +1/-0
    • View Profile
Re: Спам в папку спам
« Reply #7 on: August 16, 2016, 03:43:19 pm »
в конфиге dovecot.conf прописано
Quote
##
## Mailbox locations and namespaces
##

mail_uid=108
mail_gid=115

namespace inbox {
    inbox=yes

    mailbox Trash {
        auto = subscribe
        special_use = \Trash
    }

    mailbox Drafts {
        auto = subscribe
        special_use = \Drafts
    }

    mailbox Sent {
        auto = subscribe
        special_use = \Sent
    }

    mailbox "Sent Messages" {
        auto = no
        special_use = \Sent
    }

    mailbox Spam {
        auto = create
        special_use = \Junk
    }
}
Но при этом папки есть не во всех ящиках.
Я думаю, что проблема может быть в отсутствии доступа к скрипту. Но я не могу понять от имени кого работает dovecot.

luha

  • Zen Samurai
  • ****
  • Posts: 479
  • Karma: +36/-1
    • View Profile
Re: Спам в папку спам
« Reply #8 on: August 16, 2016, 04:27:59 pm »
Так и я говорю что не работает то, что вроде должно работать. Первый день после отпуска на работе, надо разгрести немного, может завтра будет время, тема интересная.

Проверь чтобы папка "Junk" физически была в ящике где тестируешь (у меня на серваке по умолчанию никаких джунков нет, есть папка "Spam" как в моём примере, зато в тандерберде джунк... может ты перепутал). Ещё одно! Если фильтр с ошибкой то у пользователя появляется файл лога "sieve-script.log" где подробно написано что случилось! Эти файлы можно выгребать скриптом и смотреть, бывает кто-то папку удалит или ещё что и скрипт перестаёт срабатывать.

Вот пример что бывает:

sieve: info: started log at Jun 20 11:57:28.                                                                                                       
main script: line 5: error: reject/ereject action conflicts with other action: the store action (main script: line 67) tries to deliver the message.
sieve: info: started log at Jun 27 14:33:40.                                                                                                       
main script: line 5: error: reject/ereject action conflicts with other action: the store action (main script: line 91) tries to deliver the message.
sieve: info: started log at Jul 12 16:14:20.                                                                                                       
main script: line 5: error: reject/ereject action conflicts with other action: the store action (main script: line 85) tries to deliver the message.
sieve: info: started log at Jul 13 15:17:02.                                                                                                       
main script: line 5: error: reject/ereject action conflicts with other action: the store action (main script: line 104) tries to deliver the message.

Поищи.

AxetNord

  • Zen Monk
  • **
  • Posts: 79
  • Karma: +1/-0
    • View Profile
Re: Спам в папку спам
« Reply #9 on: September 21, 2016, 07:54:26 am »
В конце концов оказалось, что ларчик открывался достаточно тривиально.
Самым большим недосмотром было не выполнять после правки конфигов команду sudo doveconf -n.
Если бы я сразу это сделал, я бы заметил, что изменения заносимые в конфиг 90-sieve.conf не применяются.
прописал в dovecot.conf и всё заработало.

Резюмирую.
Для использования глобальных sieve скриптов нужно.
1) положить скрипт там, где его сможет посмотреть пользователь ebox
2) при включенных локальных скриптах использовать директивы sieve_before или sieve_after
3) Указывать директивы в dovecot.conf

luha

  • Zen Samurai
  • ****
  • Posts: 479
  • Karma: +36/-1
    • View Profile
Re: Спам в папку спам
« Reply #10 on: September 21, 2016, 09:54:28 am »
Спасибо! Вы, если не затруднит, опишите поподробнее. Я лично не очень понял с позаранку что надо сделать чтобы заработало. Единственное уловил важность указания sieve_before или sieve_after да и то потому что ещё раньше открыл невозможность применения нескольких скриптов (в пределах пользователя), хотя по всему было видно что их можно создавать кучами (но работает только один)... а оказывается вон оно что.

AxetNord

  • Zen Monk
  • **
  • Posts: 79
  • Karma: +1/-0
    • View Profile
Re: Спам в папку спам
« Reply #11 on: September 21, 2016, 02:48:53 pm »
Опишу как у меня включилось складывание спама в папку спам.
Для начала, если вы ещё не начали пользоваться функцией перенесённых шаблонов, рекомендую начать. Для этого нужно создать папку /etc/zentyal/stubs/mail/
Quote
sudo mkdir -p /etc/zentyal/stubs/mail

Теперь копируем /usr/share/zentyal/stubs/mail/dovecot.conf.mas
Quote
sudo cp /usr/share/zentyal/stubs/mail/dovecot.conf.mas /etc/zentyal/stubs/mail/

Таким образом мы имеем рабочий конфиг в /etc и дефолтный конфиг, который греет душу как бекап.

теперь настраиваем sieve
создаём скрипт в  /var/vmail/sieve/
Quote
sudo nano /var/vmail/sieve/SPAM.sieve
содержимое
Quote
require ["fileinto"];
# rule:[SPAM]
if header :contains "X-Spam-Flag" "YES"
{
        fileinto "Spam";
}
даём задаём права на папку sieve и её вложения для пользователя ebox группы ebox
Quote
sudo chown -R ebox:ebox /var/vmail/sieve
теперь скрипт нужно скомпилировать
Quote
sudo sievec /var/vmail/sieve/SPAM.sieve
на этом настройка sieve закончилась, возвращаемся к dovecot
открываем шаблон /etc/zentyal/stubs/mail/dovecot.conf.mas и добавляем в раздел Plugin settings директиву запуска скрипта. sieve_after = /var/vmail/sieve/SPAM.sieve
у меня это выглядит так
Quote
.............................................
##
## Plugin settings
##
plugin {
  quota = maildir:User quota
  quota_rule = *:storage=0

  sieve = <% $mailboxesDir %>/%Ld/%Ln/sieve-script
  sieve_global_path = <% $mailboxesDir %>/default.sieve
  sieve_storage = <% $mailboxesDir %>/%Ld/%Ln
  sieve_dir     = <% $mailboxesDir %>/%Ld/%Ln
  sieve_after = /var/vmail/sieve/SPAM.sieve
............................................
Я использовал sieve_after, потому, что мне показалось это логичным. Если у вас другая ситуация, есть ещё sieve_before

после этого надо перезагрузить zentyal mail. и скрипт начнёт работать.

Для тестирования работы можно использовать /etc/dovecot/dovecot.conf это даёт оперативность проверки и если что-то пошло не так, нужно просто перезагрузить zentyal mail, и dovecot.conf восстановиться из шаблона.
команды для тестирования
sudo doveconf -n - покажет вам изменения конфига, которые dovecot воспринимает, как сделанные вручную. То есть он покажет вам правки от zentyal и сделанные руками.
sudo service dovecot restart - перезапустит dovecot и применит правила, из /etc/dovecot/dovecot.conf (напоминаю ещё раз, ручные изменения этого файла затрутся при перезапуске zentyal mail).

На этом вроде всё.
 

luha

  • Zen Samurai
  • ****
  • Posts: 479
  • Karma: +36/-1
    • View Profile
Re: Спам в папку спам
« Reply #12 on: September 21, 2016, 03:17:46 pm »
Спасибо, теперь понятнее некуда. Осталось затестить. :)

Думаю многим пригодится, хотя что-то как-то совсем глухо последнее время, видать никто почту на зенчале кроме нас не крутит.

luha

  • Zen Samurai
  • ****
  • Posts: 479
  • Karma: +36/-1
    • View Profile
Re: Спам в папку спам
« Reply #13 on: October 25, 2016, 09:10:24 am »
Предложи свою кандидатуру для модерирования ветки, тем более что опыт есть. Местный модер в бессрочном отпуске.