LINUX.ORG.RU
ФорумAdmin

как победить sieve

 ,


0

1

Привет, все мучаюсь с sieve, но никак не получается победить. Надо сделать сортировку по папкам в зависимости от отправителя, а так же борьба со спамом.
Вот что сделано:

  • Настроен dovecot
    protocols = imap sieve managesieve
    
    managesieve_notify_capability = mailto
    managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comperator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date
    
    service managesieve-login {
      inet_listener sieve {
        port = 4190
      }
      service_count = 1
    
      process_min_avail = 0
    
      vsz_limit = 64M
    }
    service managesieve {
     process_limit = 1024
    }
    protocol sieve {
      mail_max_userip_connections = 10
      mail_plugins = 
      managesieve_implementation_string = Dovecot Pigeonhole
      managesieve_logout_format = bytes=%i/%o
      managesieve_max_compile_errors = 5
      managesieve_max_line_length = 65536
      managesieve_notify_capability = 
      managesieve_sieve_capability = 
    }
    
    protocol lmtp {
      mail_plugins = $mail_plugins sieve
    }
    
    
    plugin {
    
      sieve = /home/mail/post.com/new/sieve/1.sieve
      sieve_dir = /etc/dovecot/sieve-after
      sieve_global_dir = /etc/dovecot/sieve-after/
      sieve_before = /etc/dovecot/sieve-after/spam-to-folder.sieve
      sieve_default = /etc/dovecot/sieve-after/spam-to-folder.sieve
    
    
      sieve_max_script_size = 1M              # Максимальный размер одного скрипта
      sieve_quota_max_scripts = 50            # Максимальное количество скриптов
      sieve_quota_max_storage = 1M            # Максимальный общий объём скриптов
      sieve_max_actions = 32                  # Максимальное количество действий, которые можно выполнить за одно выполнение скрипта.
      sieve_max_redirects = 4                 # Максимальное количество действий по перенаправлению
    
      sieve_extensions = +spamtest +spamtestplus +virustest
     
      sieve_spamtest_status_type = score
      sieve_spamtest_status_header = \
        X-Spam-Score: score=(-?[[:digit:]]+\.[[:digit:]]).*
      sieve_spamtest_max_header = \
       X-Spam-Score: score=-?[[:digit:]]+\.[[:digit:]] required=([[:digit:]]+\.[[:digit:]])
     
      sieve_virustest_status_type = text
      sieve_virustest_status_header = X-Virus-Scan: Found to be (.+)\.
      sieve_virustest_text_value1 = clean
      sieve_virustest_text_value5 = infected
    
    }
    
    lda_mailbox_autocreate = yes
    lda_mailbox_autosubscribe = yes
    
    protocol lda {
      mail_plugins = $mail_plugins quota acl expire sieve
      mail_plugins = cmusieve
      mail_plugin_dir = /usr/lib/dovecot/dovecot-lda
    }
    


  • postfix
    main.cf

    mailbox_command = /usr/lib/dovecot/dovecot-lda -f "$SENDER" -a "$RECIPIENT"
    
    master.cf
    dovecot unix    -       n       n       -       -      pipe
      flags=DRhu user=vmail:mail [br]argv=/usr/local/libexec/dovecot/dovecot-lda   -f ${sender} -d ${user}@${nexthop} -a ${original_recipient}[br]
    

  • Конфиг sieve
    require ["imap4flags", "fileinto", "variables", "date"];
    
    if allof (header :contains "From" "test3@post.com")
    {
        fileinto "Friends";
        stop;
    }
    


    if header :comparator "i;ascii-casemap" :contains "subject" "*****SPAM*****" {
      fileinto ".Junk";
      stop;
    } else {
       keep;
    }
    

Ответ на: комментарий от dzury

Мои требования полностью совпадают с требованиями выше, которые полностью соответствуют правилам сайта

Блоки кода выделяются тегом [code].

по ссылке, указанной в этом комментарии.

Читать в таком виде будет гораздо удобнее, и не придётся ломать голову, где ты приводишь конфиг/лог, а где описываешь проблему. И выглядит это красивее.

mord0d ★★★★★ ()

Про спам - нафига так извращаться ? тот кто определяет спам должен добавить свой заголовок типа

X-Spam-flag: YES|NO

И не будет проблемы с сортировкой в sieve

if header :contains "X-Spam-Flag" "YES"
{
        fileinto "spam";
}

PS много лет используется spamassassin + cyrus

vel ★★★★★ ()
Ответ на: комментарий от dzury

Теперь хорошо, сам же видишь!

Плюсану предыдущего комментатора

XMs ★★★★★ ()
Ответ на: комментарий от vel

«На вкус и цвет фломастеры разные» использую header :contains "X-Spam-Level NNN" алсо много лет spamassassin + cyrus
И на основании NNN или discard, или с меньшим шкворцем fileinto

anc ★★★★★ ()
Последнее исправление: anc (всего исправлений: 1)

dovecot не видел. Раз уж вспомнили cyrus+sieve. У вас файлики скомпилированы? Возможно dovecot сам перекомпилит их при изменении, все бывает, но все-таки... лучше уточнить.

anc ★★★★★ ()
Ответ на: комментарий от vel

Можно еще так:

## Если уровень спама 9 или больше 9 то переправляем админу на проверку
if allof(header :contains "X-Spam-Level" "*********",
     not address :is :all "Delivered-To" "admin@mydomen.ru")
    {
     redirect "admin@mydomen.ru";
    }
И незабыть скомпилировать:
sievec /var/vmail/sieve/dovecot.sieve
chmod o+r  /var/vmail/sieve/dovecot.sieve

Bootmen ☆☆☆ ()
Ответ на: комментарий от Bootmen

Спасибо за ответы. У меня немного другая структура

у меня скрипт находится в Dovecot

sieve_before = /etc/dovecot/sieve-after/spam-to-folder.sieve
как я ранее писал...
sievec /etc/dovecot/sieve-after/spam-to-folder.sieve
все эти элементарные вещи делал все равно не работает

dzury ()
Ответ на: комментарий от dzury

require ["fileinto"];



if header :contains "X-Spam-Flag" ["YES"] {
    setflag "\\seen";                                                                                                                                                   
    fileinto "Junk";                                                                                                                                                    
    stop;                                                                                                                                                               
} else {                                                                                                                                                                
    # The rest goes into INBOX                                                                                                                                          
    # default is "implicit keep", we do it explicitly here                                                                                                              
    keep;                                                                                                                                                               
}                                                                                                                                                                       
            

и так тоже пробовал

 
if header :comparator "i;ascii-casemap" :contains "subject" "*****SPAM*****" {
  fileinto ".Junk";
  stop;
} else {
   keep;
}

ничего. Все приходит в INBOX во входящие

dzury ()

Воспользуйтесь утилитой для проверки правил sieve-test, это в разы ускорит настройку скрипта sieve

keir ★★ ()
Ответ на: комментарий от keir

Кто-нибудь вникал в то что я изложил в «шапке»? Там все верно, может мои настройки не верны!

sieve-test -с *.sieve 
как пользоваться утилитой?

dzury ()
Ответ на: комментарий от dzury

Кто-нибудь вникал в то что я изложил в «шапке»? Там все верно, может мои настройки не верны!

sieve-test как раз помогает выяснить, верны ли настройки и какие из них отрабатывают для конкретного письма.

как пользоваться утилитой?

sieve-test <script-file> <mail-file>; например так:

sieve-test /etc/dovecot/sieve/rules.sieve /var/vmail/mydomain.tld/mailbox/cur/1416470252.M506334261034.mx,S=12348,W=12870:2,
И получить в ответ что-нибудь типа этого:
Performed actions:

 * store message in folder: INBOX.from-robot
        + create mailbox if it does not exist

Implicit keep:

  (none)

sieve-test(root): Info: final result: success

keir ★★ ()
Ответ на: комментарий от keir
sieve-test /etc/dovecot/sieve-after/spam-to-folder.sieve   /cur/1544765638.V801I1056d3M210229.mail:2,

Вот такое выходит

sieve-test(root): Error: User initialization failed: Namespace '': Mail storage autodetection failed with home=/root
sieve-test(root): Fatal: Invalid user settings. Refer to server log for more information.

dzury ()
Ответ на: комментарий от dzury

Мой андроид увидел эту запись как более лучшую

require [«fileinto»];

if header :contains «X-Spam-Flag» [«YES»] { setflag «\\seen»; fileinto «Junk»; stop; } else { # The rest goes into INBOX # default is «implicit keep», we do it explicitly here keep; }

anonymous ()
Ответ на: комментарий от dzury

Есть еще замечания по настройке в первом посту? Предложения? Кто может рассказать полностью как настраивать!? Может вообще не так делаю!

dzury ()
Ответ на: комментарий от dzury

Делаешь в гугле такой запрос

sieve-test(root): Error: User initialization failed: Namespace 
Дает тучу ссылок (сам проверял). Много на англицком но гугль сам переводить могет.

;)

Удачи.

Bootmen ☆☆☆ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.