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

Помогите обуять procmail :)


0

0

И так вводная:
Установлен sendmail 8.13.8 и спамооборона 1024, связка настроена и работает хорошо, т.е. спамфильтр помечает спам в хеадере письма такими флагами:

X-Spam-Ystatus: hits=52.40
X-Spam-Flag: YES
X-Spam-Yversion: Spamooborona-3.2

где «hits», обозначает вероятность спама и колеблется от ~10 до 120 условных попугаев.

Задача: письма помеченные как спам, с hits>40 отправлять в /dev/null, остальное направлять в специальный почтовый ящик для спама. Для реализации задачи был использован procmail

/etc/procmailrc:
-------------------------------------------------
LOGFILE=/var/log/procmail
:0 H
* ^X-Spam-Flag: YES
{
:0
* ? test $(/usr/bin/formail -xX-Spam-Ystatus |/bin/sed -e 's/.*=//' -e 's/\..*//') -ge 40
/dev/null
}

:0 H
* ^X-Spam-Flag: YES
/var/mail/spam
-------------------------------------------------

А вот результат меня удивил - большинство писем расфасовывается нормально, но некоторые письма с hits>40 «прорываются» в почтовый ящик со спамом. Как такое получается - не понятно.


Вот лог:
------------------------------------------------------------
From riling01@boxpal.ru.ru Mon May 24 16:01:46 2010
Subject: [SPAM 108.50] =?koi8-r?B?0+xZ9uJhINJhY9P57G9r?=
Folder: /dev/null 4610
From riling01@boxpal.ru.ru Mon May 24 16:01:46 2010
Subject: [SPAM 108.50] =?koi8-r?B?0+xZ9uJhINJhY9P57G9r?=
Folder: /dev/null 4610
From riling01@boxpal.ru.ru Mon May 24 16:01:46 2010
Subject: [SPAM 108.50] =?koi8-r?B?0+xZ9uJhINJhY9P57G9r?=
Folder: /var/mail/spam 4611
------------------------------------------------------------

Вот письмо, вероятно на три адресата, которое странно обработалось, первые два пошли правильно в /dev/null, а третье /var/mail/spam


Помогите разобраться.

Попробуй включить VERBOSE в procmail и посмотреть, почему не попадает в правило.

ponch
()

Я бы правила оформила попроще (зачем такой сложный подсчет?)
На примере моего конфига, который делает почти то же самое с письмами, помеченными VadeREtro, но условия посложнее

LOGFILE=/var/log/procmaillog
VERBOSE=on
LOGABSTRACT=all

:0
# Сейчас уже не помню, назначает ли СО вес больше 1000 и бывает ли
# у нее целочисленный вес, но моя строка рассчитана на значения от 40
# и до 999 с обязательной дробной частью, что можно легко подправить # по надобности.
* ^X-Spam-Ystatus: hits=([4-9]|[1-9][0-9])[0-9]\..+
/dev/null

# Итак, все письма, имеющие вес >=40 , отправлены в /dev/null
# Стало быть, остались только письма с меньшим весом.
# Отправляем их в спец.файл
: 0
* ^X-Spam-Flag: YES
/var/mail/spam

Еще имхо полезно добавить исключения для этих условий. ТО есть когда случилось ложное срабатывание (а мое сравнительное тестирование показало большее кол-во ЛС у СО), нужно оставить возможность форварда письма в нужный ящик:
: 0
* ^X-Spam-Flag: YES
{
0:
* !^Return-Path: <root@mail.domain.ru>
/var/mail/spam
}



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

Респект!

Вчера вечером, от безысходности пришел к точно такому же решению. Могу с уверенностью сказать, что в procmail запуск стороннего приложения для получения результата работает глючно. При каких-то неизвестных мне условиях приложение не запускается и соответственно не может обработать письмо.

LOGFILE=/var/log/procmail
----------------------------------------------------
VERBOSE=off
:0
* ^X-Spam-Flag: YES
{
:0
* ^X-Spam-Ystatus: hits=[1-3][0-9]\.
/var/mail/spam
}

:0
* ^X-Spam-Flag: YES
{
:0
* ^X-Spam-Ystatus: hits= [1-9]\.
/var/mail/spam
}

:0
* ^X-Spam-Flag: YES
/dev/null
----------------------------------------------------

Первое правило засовывает в спамовый ящик все что имеет рейтинг от 10 до 39, второе 1 до 9, третье все остальное пихает в /dev/null

В спамобороне вывод значения хитс сделан изменчиво, в зависимости от его значения
Спам начинается со значения >=9
если hits >=0 но <10 то
X-Spam-Ystatus: hits= X.XX

если hits >=10 но <100 то
X-Spam-Ystatus: hits=XX.XX

если hits >=100 то
X-Spam-Ystatus: hits=XXX.X

В регулярных выраджениях надо это учитывать.

samson_b
() автор топика
Ответ на: Респект! от samson_b

> В спамобороне вывод значения хитс сделан изменчиво, в зависимости от его значения СПасибо, напомнили, это действительно так и убить их за это мало ...

По поводу ваших правил хочется заметить: конечно, хозяин - барин, но почему бы не объединить первую и вторую проверки? И зачем нужна предпроверка на ^X-Spam-Flag: YES в первых двух правилах, если наличие X-Spam-Ystatus: hits=XXX.X говорит само за себя?

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

Вы правы! я впоследствии переделал на ваш вариант. :)
У меня еще вопрос появился?

Как в эту конструкцию добавлять еще адреса белого списка?
Вот так?

:0
* ^X-Spam-Flag: YES
{
0:
* !^Return-Path: <root@mail.domain.ru>
* !^Return-Path: <root@mail.domain2.ru>
* !^Return-Path: <root@mail.domain3.ru>
/var/mail/spam
}

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

:0
* ^X-Spam-Flag: YES
{
0:
^^ - Кстати это опечатка, правильно так ":0" ?

* !^Return-Path: <root@mail.domain.ru>
* !^Return-Path: <root@mail.domain2.ru>
* !^Return-Path: <root@mail.domain3.ru>
/var/mail/spam
}

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

Да, опечатка.
Вроде правильно, но я бы это все объединила
* !^Return-Path: <root@mail.domain[2-3]?.ru>

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