LINUX.ORG.RU
решено ФорумAdmin

dovecot-lda и .Junk: положить подозрительное письмо в спам.

 , , lda,


1

1

Всем доброго дня. Имеется связка exim + dovecot + lda + SA. Нужно, чтобы все, что набирает больше определенного числа балов в SA и меньше критического, при достижении которого письмо просто удаляется ложилось в папку Junk. Делаем по инструкции:

begin routes
...
spam_to_user:
    driver = accept
    condition     = ${if and {{>{$spam_score_int}{20}}{<{$spam_score_int}{80}}}{yes}{no}}
    domains     = !+local_domains
    transport = user_spam_delivery
...
begin transports
...
user_spam_delivery:
    driver = pipe
    command = /usr/lib/dovecot/dovecot-lda -e -m "Junk|${substr_1:$local_part_suffix}" -d $local_part@$domain -f $sender_address -a $original_local_part@$original_domain
    message_prefix =
    message_suffix =
    delivery_date_add
    envelope_to_add
    return_path_add
    return_fail_output
    log_output
    umask = 077
    group = 8
    user = 106
    temp_errors = 64 : 69 : 70: 71 : 72 : 73 : 74 : 75 : 78
...

Письмо все равно кладется во входящие.

Решение: пишем глобальный скрипт для sieve, компилим с помощью sievec, даем права (у меня Debian-exim:mail), прописываем в 90-sieve.conf:

sieve_before путь_к_скрипту.sieve

Сам скрипт:

require ["fileinto"];
# rule:[spam]
if header :contains "Subject" "*****SPAM*****"
{
        fileinto "Junk";
        stop;
}
★★★★★

Последнее исправление: leg0las (всего исправлений: 3)

А что, по каким-то причинам нельзя подключить sieve и написать сколь угодно гибкие глобальные правила?

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

Понял что ты имеешь ввиду.

Исправил в exim.conf

begin routes
...
spam_to_user:
    driver = accept
    condition     = ${if and {{>{$spam_score_int}{20}}{<{$spam_score_int}{80}}}{yes}{no}}
    domains     = !+local_domains
    transport = dovecot_delivery

т.е. ходить вместе со всей почтой через один транспорт, нерабочий транспорт закоментил.

Пилим dovecot. /etc/dovecot/conf.d/90-sieve.conf:

sieve_global_dir = /etc/dovecot/conf.d/sieve

Создал директорию, выдал ей права, создал правило:

require ["fileinto"];
# rule:[SPAM]
if header :contains "Subject" "**SPAM**"
{
        fileinto "Junk";
}

Скомпилил с помощью sievec, перезапустил dovecot и exim. Не работает.

leg0las ★★★★★
() автор топика
Последнее исправление: leg0las (всего исправлений: 4)
Ответ на: комментарий от leg0las

запускай dovecot-lda, указывай пользователя и давай ему на вход письмо - смотри в лог, что пишет.

УМВР.

Может у тебя вообще dovecot-lda не запускается - наворотил в конфиге непонятно чего.

zgen ★★★★★
()
Последнее исправление: zgen (всего исправлений: 1)
Ответ на: комментарий от zgen

dovecot-lda работает, т.к. в принципе письма идут через него, это основной транспорт. Плюс пользовательские фильтры (в roundcube которые настраиваются) тоже прекрасно пашут.

дабы не быть голословным:

dovecot_delivery:
    driver = pipe
    command = /usr/lib/dovecot/dovecot-lda -e -d $local_part@$domain -f $sender_address -a $original_local_part@$original_domain
    message_prefix =
    message_suffix =
    delivery_date_add
    envelope_to_add
    return_path_add
    return_fail_output
    log_output
    umask = 077
    group = 8
    user = 106
    temp_errors = 64 : 69 : 70: 71 : 72 : 73 : 74 : 75 : 78
leg0las ★★★★★
() автор топика
Последнее исправление: leg0las (всего исправлений: 1)
Ответ на: комментарий от zgen

Скормить ему уже доставленное письмо? или как?

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