Помогите спам письма кидать в другой ящик

EXIM, sendmail, postfix, Dovecot и прочие. Решение проблем связанных с работой электронной почты

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
armix
проходил мимо

Помогите спам письма кидать в другой ящик

Непрочитанное сообщение armix » 2009-09-30 16:14:54

Помогите изменить строку file = /var/mail/$local_part так, чтобы письма, которые содержат в Subject слово ****SPAM**** кидалось не в
$local_part а в ящик spam ??????

Код: Выделить всё

local_delivery:
  driver = appendfile
  file = /var/mail/$local_part
  delivery_date_add
  envelope_to_add
  return_path_add
  group = mail
  mode = 0660

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2460 рублей (8 CPU, 8Gb RAM, 2x500Gb HDD, RAID 3ware 9750):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35066
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Помогите спам письма кидать в другой ящик

Непрочитанное сообщение Alex Keda » 2009-10-01 8:00:28

роутер рисуй с условием
Убей их всех! Бог потом рассортирует...

armix
проходил мимо

Re: Помогите спам письма кидать в другой ящик

Непрочитанное сообщение armix » 2009-10-01 9:48:01

lissyara писал(а):роутер рисуй с условием
Как записать само условие?

Аватара пользователя
Laa
ст. лейтенант
Сообщения: 1032
Зарегистрирован: 2008-02-21 18:25:33
Откуда: Украина, Россия

Re: Помогите спам письма кидать в другой ящик

Непрочитанное сообщение Laa » 2009-10-01 13:04:31

Примерно так в роутере:

Код: Выделить всё

condition             = ${if >={$spam_score_int}{SPAM_SCORE_MAX}}
exim: помните, что выдавая deny, вы можете недоставить ваше же письмо, зарубив sender-verify удаленного MTA к вашему MTA!!!

armix
проходил мимо

Re: Помогите спам письма кидать в другой ящик

Непрочитанное сообщение armix » 2009-10-01 14:14:07

Laa писал(а):Примерно так в роутере:

Код: Выделить всё

condition             = ${if >={$spam_score_int}{SPAM_SCORE_MAX}}

Вот мой рутер

Код: Выделить всё

localuser:
  driver = accept
  check_local_user  
# local_part_suffix = +* : -*
# local_part_suffix_optional
  transport = local_delivery
  cannot_route_message = Unknown user

Напишите плиз, как сделать так, чтобы письма которые содержат в Subject слово ****SPAM**** кидалось не в
local_delivery а local_delivery_spam ???

У меня никак не получается, возможно я пишу неправильный синтаксис, помогите!

Аватара пользователя
Laa
ст. лейтенант
Сообщения: 1032
Зарегистрирован: 2008-02-21 18:25:33
Откуда: Украина, Россия

Re: Помогите спам письма кидать в другой ящик

Непрочитанное сообщение Laa » 2009-10-01 15:45:42

armix писал(а):Вот мой рутер

Код: Выделить всё

localuser:
  driver = accept
  check_local_user  
# local_part_suffix = +* : -*
# local_part_suffix_optional
  transport = local_delivery
  cannot_route_message = Unknown user
Напишите плиз, как сделать так, чтобы письма которые содержат в Subject слово ****SPAM**** кидалось не в
local_delivery а local_delivery_spam ???

У меня никак не получается, возможно я пишу неправильный синтаксис, помогите!
Ну примерно так (сам не тестировал):

Код: Выделить всё

localuser_spam:
  driver = accept
  check_local_user  
  transport = local_delivery_spam
  cannot_route_message = Unknown user
  condition             = ${if match{$h_subject}{\N****SPAM****.*\N}}

localuser:
...
exim: помните, что выдавая deny, вы можете недоставить ваше же письмо, зарубив sender-verify удаленного MTA к вашему MTA!!!

armix
проходил мимо

Re: Помогите спам письма кидать в другой ящик

Непрочитанное сообщение armix » 2009-10-02 11:18:59

Laa писал(а):
armix писал(а):Вот мой рутер

Код: Выделить всё

localuser:
  driver = accept
  check_local_user  
# local_part_suffix = +* : -*
# local_part_suffix_optional
  transport = local_delivery
  cannot_route_message = Unknown user
Напишите плиз, как сделать так, чтобы письма которые содержат в Subject слово ****SPAM**** кидалось не в
local_delivery а local_delivery_spam ???

У меня никак не получается, возможно я пишу неправильный синтаксис, помогите!
Ну примерно так (сам не тестировал):

Код: Выделить всё

localuser_spam:
  driver = accept
  check_local_user  
  transport = local_delivery_spam
  cannot_route_message = Unknown user
  condition             = ${if match{$h_subject}{\N****SPAM****.*\N}}

localuser:
...

Ваш пример не работает! Я упростил условие, как сделать так, чтобы письма которые содержат в Subject слово SPAM кидалось не в
local_delivery а local_delivery_spam ???

вот что я написал

Код: Выделить всё

localuser_spam:
  driver = accept
  check_local_user  
# local_part_suffix = +* : -*
# local_part_suffix_optional
  transport = local_delivery_spam
  cannot_route_message = Unknown user
  condition = ${if match{$header_Subject}{\N^SPAM.*\N}{yes}{no}}

localuser:
  driver = accept
  check_local_user  
# local_part_suffix = +* : -*
# local_part_suffix_optional
  transport = local_delivery
  cannot_route_message = Unknown user


######################################################################
#                      TRANSPORTS CONFIGURATION                      #
######################################################################
#                       ORDER DOES NOT MATTER                        #
#     Only one appropriate transport is called for each delivery.    #
######################################################################

# A transport is used only when referenced from a router that successfully
# handles an address.

begin transports


# This transport is used for delivering messages over SMTP connections.

remote_smtp:
  driver = smtp

# This transport invokes procmail to deliver mail
procmail:
  driver = pipe
  command = "/usr/bin/procmail -d $local_part"
  return_path_add
  delivery_date_add
  envelope_to_add
  user = $local_part
  initgroups
  return_output

# This transport is used for local delivery to user mailboxes in traditional
# BSD mailbox format. By default it will be run under the uid and gid of the
# local user, and requires the sticky bit to be set on the /var/mail directory.
# Some systems use the alternative approach of running mail deliveries under a
# particular group instead of using the sticky bit. The commented options below
# show how this can be done.

local_delivery:
  driver = appendfile
  file = /var/mail/$local_part
  delivery_date_add
  envelope_to_add
  return_path_add
  group = mail
  mode = 0660


local_delivery_spam:
  driver = appendfile
  file = /var/mail/spam_$local_part
  delivery_date_add
  envelope_to_add
  return_path_add
  group = mail
  mode = 0660

Все равно все письма идут в local_delivery, и со словом SPAM в теме и без него!
Что делать?

Аватара пользователя
schizoid
подполковник
Сообщения: 3228
Зарегистрирован: 2007-03-03 17:32:31
Откуда: Украина, Чернигов
Контактная информация:

Re: Помогите спам письма кидать в другой ящик

Непрочитанное сообщение schizoid » 2009-10-02 12:53:39

у мну не роутом. а system-filter

Код: Выделить всё

# Спам

#logwrite "EXIM FILTER: debug - digit in variable acl_m0 = $acl_m0 (before)"
# Проверяем содержимое переменной про спам (содержит ли цифры)
if $acl_m0 matches ^\\d+
then
#logwrite "EXIM FILTER: debug - digit in variable acl_m0 = $acl_m0 (after first if)"
        # Строим новую тему письма - если спам
        # Проверяем содержимое переменной со счётчиком спамерских очков.
        # На данный момент считаем - что если 50 и более - это спам.

        # Добавляем заголовки с объяснением происходящего
        headers add "X-Spam-Description: if spam count > 50 - this is spam"
        headers add "X-Spam-Count: $acl_m0"
                                                                                                                                                     if $acl_m0 is above 49
        then
                headers add "Old-Subject: $h_subject:"
                headers remove "Subject"
                headers add "Subject: (*** SPAM ***) $h_old-subject:"
                headers add "X-Spam: YES"                                                                                                                    # Старый заголовок оставляем, на всякий случай
                #headers remove "Old-Subject"                                                                                                                deliver spam@my.domen.com
                logwrite "$tod_log EXIM FILTER: Spam count = $acl_m0 ; Added SPAM header. FORWARD -> spam@my.domen.com"
                seen finish
        endif
# закрываем проверку в письме
endif
можете как пример взять и под себе поправить
ядерный взрыв...смертельно красиво...жаль, что не вечно...

armix
проходил мимо

Re: Помогите спам письма кидать в другой ящик

Непрочитанное сообщение armix » 2009-10-02 13:18:47

schizoid писал(а):у мну не роутом. а system-filter

Код: Выделить всё

# Спам

#logwrite "EXIM FILTER: debug - digit in variable acl_m0 = $acl_m0 (before)"
# Проверяем содержимое переменной про спам (содержит ли цифры)
if $acl_m0 matches ^\\d+
then
#logwrite "EXIM FILTER: debug - digit in variable acl_m0 = $acl_m0 (after first if)"
        # Строим новую тему письма - если спам
        # Проверяем содержимое переменной со счётчиком спамерских очков.
        # На данный момент считаем - что если 50 и более - это спам.

        # Добавляем заголовки с объяснением происходящего
        headers add "X-Spam-Description: if spam count > 50 - this is spam"
        headers add "X-Spam-Count: $acl_m0"
                                                                                                                                                     if $acl_m0 is above 49
        then
                headers add "Old-Subject: $h_subject:"
                headers remove "Subject"
                headers add "Subject: (*** SPAM ***) $h_old-subject:"
                headers add "X-Spam: YES"                                                                                                                    # Старый заголовок оставляем, на всякий случай
                #headers remove "Old-Subject"                                                                                                                deliver spam@my.domen.com
                logwrite "$tod_log EXIM FILTER: Spam count = $acl_m0 ; Added SPAM header. FORWARD -> spam@my.domen.com"
                seen finish
        endif
# закрываем проверку в письме
endif
можете как пример взять и под себе поправить

А где это писать надо, прямо в exim.conf ?

Аватара пользователя
Laa
ст. лейтенант
Сообщения: 1032
Зарегистрирован: 2008-02-21 18:25:33
Откуда: Украина, Россия

Re: Помогите спам письма кидать в другой ящик

Непрочитанное сообщение Laa » 2009-10-02 15:31:37

armix писал(а): Ваш пример не работает! Я упростил условие, как сделать так, чтобы письма которые содержат в Subject слово SPAM кидалось не в
local_delivery а local_delivery_spam ???

вот что я написал

Код: Выделить всё

localuser_spam:
  driver = accept
  check_local_user  
# local_part_suffix = +* : -*
# local_part_suffix_optional
  transport = local_delivery_spam
  cannot_route_message = Unknown user
  condition = ${if match{$header_Subject}{\N^SPAM.*\N}{yes}{no}}
...
Все равно все письма идут в local_delivery, и со словом SPAM в теме и без него!
Что делать?
Ну попробуй взять в руки exim -bh и в режимах отладки понять почему не срабатывает условие.
Уверен, все получится.
exim: помните, что выдавая deny, вы можете недоставить ваше же письмо, зарубив sender-verify удаленного MTA к вашему MTA!!!

Аватара пользователя
schizoid
подполковник
Сообщения: 3228
Зарегистрирован: 2007-03-03 17:32:31
Откуда: Украина, Чернигов
Контактная информация:

Re: Помогите спам письма кидать в другой ящик

Непрочитанное сообщение schizoid » 2009-10-02 17:21:45

в главном файле ексима описать

Код: Выделить всё

system_filter         = /usr/local/etc/exim/filters/system-filter
далее создать файл /usr/local/etc/exim/filters/system-filter и туда вписать то, что писал выше
ядерный взрыв...смертельно красиво...жаль, что не вечно...