URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 65216
[ Назад ]

Исходное сообщение
"Настройка PROCMAIL c хитрыми условиями для разгребания СПАМа"

Отправлено SHRiKE_SPb , 29-Мрт-06 16:00 
FreeBSD 5.0 + sendmail + spamassasin + procmail
МЭНы и конфу читал, но пока не получается...

Стоит SpamAssasin и метит всю почту своими тэгами. Задача в следующем - организовать через procmail следующий алгоритм:
Если X-Spam-Flag: YES, то
  Если score > 20, то письмо удалить,
  Если 10 < score < 20, то перенаправить письмо на spam@maycorp.ru,
  Если score < 10, то с письмом ничего не делать (т.е. оправить дальше юзеру)  
Конец Если.

Что не получается:
1) procmail обрабатывает только почту приходящую на _локальные_ ящики сервера, но у меня несколько доменов и для многих из них стоит в virtualusertable
@mycorp2.ru   %1@smtp.mycorp2.ru
@mycorp3.ru   %1@smtp.mycorp3.ru
т.к. внешний SMTP сервер один для всех доменов, а maycorpXYZ.ru находяться в корпоративной локалке.
Так вот, Procmail не обрабатывает письма для таких доменов.
============ sendmail.mc =================
divert(-1)
divert(0)
VERSIONID(`$FreeBSD: src/etc/sendmail/freebsd.mc,v 1.27 2002/10/16 22:52:56 keramida Exp $
OSTYPE(freebsd5)
DOMAIN(generic)

FEATURE(access_db, `hash -o -T<TMPF> /etc/mail/access')
FEATURE(blacklist_recipients)
FEATURE(local_lmtp)
FEATURE(`local_procmail')
FEATURE(mailertable, `hash -o /etc/mail/mailertable')
FEATURE(virtusertable, `hash -o /etc/mail/virtusertable')
define(`confCW_FILE', `-o /etc/mail/local-host-names')
define(`confBIND_OPTS', `WorkAroundBrokenAAAA')
define(`confMAX_MIME_HEADER_LENGTH', `256/128')
define(`confNO_RCPT_ACTION', `add-to-undisclosed')
define(`confPRIVACY_FLAGS', `authwarnings,noexpn,novrfy')
INPUT_MAIL_FILTER(`spamassassin', `S=local:/var/run/spamass-milter.sock, F=, T=C:15m;S:4m;R:4m;E:10m')
define(`confMILTER_LOG_LEVEL',`6')
MAILER(procmail)dnl
MAILER(local)
MAILER(smtp)
============ sendmail.mc =================
2) Не могу понять как в /usr/local/etc/procmailrc писать условия... Данная конструкция ессно не работает, но хочется что-то именно такого:
======= procmailrc =======
:0
* ^X-Spam-Flag: YES # если спам
* !^X-Sender: Procmail # и не проходило проверку
{
| formail -A"X-Sender: Procmail" # отметить что проверку прошло
:0
* ^X-Spam-Status: *(score > 20) # в зависимости от балла
| sendmail > /dev/null # удаляем
:0
* ^X-Spam-Status: *(10 < score < 20)
| formail -I"To: spam@maycorp.ru | sendmail -t # отправляем на дальнейшее рассмотрение
# как сделать чтоб в письме пришедшем на spam@maycorp.ru в поле TO: стоял адрес,
# на кот. письмо шло изначально, а не "spam@maycorp.ru"?
}
# иначе отправляем как есть
======= procmailrc =======


Содержание

Сообщения в этом обсуждении
"Настройка PROCMAIL c хитрыми условиями для разгребания СПАМа"
Отправлено Muke , 29-Мрт-06 16:18 
А зачем такой изврат, когда мильтером можно режектить?

"Настройка PROCMAIL c хитрыми условиями для разгребания СПАМа"
Отправлено SHRiKE_SPb , 29-Мрт-06 16:22 
>А зачем такой изврат, когда мильтером можно режектить?

Каким именно мильтером? У меня используется spamass-milter.sh. О нем идет речь?


"Настройка PROCMAIL c хитрыми условиями для разгребания СПАМа"
Отправлено Muke , 29-Мрт-06 16:37 
>>А зачем такой изврат, когда мильтером можно режектить?
>
>Каким именно мильтером? У меня используется spamass-milter.sh. О нем идет речь?

spamass-milter.sh - скрипт запускающий сам мильтер. курите доку на предмет нужной опции запуска (-r 20?)


"Настройка PROCMAIL c хитрыми условиями для разгребания СПАМа"
Отправлено SHRiKE_SPb , 29-Мрт-06 17:02 
>>>А зачем такой изврат, когда мильтером можно режектить?
>>
>>Каким именно мильтером? У меня используется spamass-milter.sh. О нем идет речь?
>
>spamass-milter.sh - скрипт запускающий сам мильтер. курите доку на предмет нужной опции
>запуска (-r 20?)


-r 20 действительно помогло, спасибо.
А как теперь пересылать письма, у которых score От 10 до 20?

PS Убивать не могу, но юзерам валиться это тоже не должно...


"Настройка PROCMAIL c хитрыми условиями для разгребания СПАМа"
Отправлено Muke , 29-Мрт-06 17:28 
>-r 20 действительно помогло, спасибо.
>А как теперь пересылать письма, у которых score От 10 до 20?

я не пользую spamass-milter. он вроде простой и такого не умеет.
milter-spamc (http://www.snertsoft.com) умеет, но он сейчас коммерческий.
если надо - выложу куданьть последнюю free версию.

>PS Убивать не могу, но юзерам валиться это тоже не должно...

режект - это не убивание. в случае ложного срабатывания валидный отправитель должен получить отлуп.


"Настройка PROCMAIL c хитрыми условиями для разгребания СПАМа"
Отправлено SHRiKE_SPb , 29-Мрт-06 17:35 
>>-r 20 действительно помогло, спасибо.
>>А как теперь пересылать письма, у которых score От 10 до 20?
>
>я не пользую spamass-milter. он вроде простой и такого не умеет.
>milter-spamc (http://www.snertsoft.com) умеет, но он сейчас коммерческий.
>если надо - выложу куданьть последнюю free версию.
>
>>PS Убивать не могу, но юзерам валиться это тоже не должно...
>
>режект - это не убивание. в случае ложного срабатывания валидный отправитель должен
>получить отлуп.


OK, завтра гляну. Скинь в мыло последнюю free версию пож-та.


"Настройка PROCMAIL c хитрыми условиями для разгребания СПАМа"
Отправлено SHRiKE_SPb , 30-Мрт-06 09:03 
По-поводу procmail кто-нить что-нить подсказать может или как?

> procmail обрабатывает только почту приходящую на _локальные_ ящики сервера, но у
>меня несколько доменов и для многих из них стоит в virtualusertable
>
>@mycorp2.ru   %1@smtp.mycorp2.ru
>@mycorp3.ru   %1@smtp.mycorp3.ru
>т.к. внешний SMTP сервер один для всех доменов, а maycorpXYZ.ru находяться в
>корпоративной локалке.
>Так вот, Procmail не обрабатывает письма для таких доменов.
>============ sendmail.mc =================
>divert(-1)
>divert(0)
>VERSIONID(`$FreeBSD: src/etc/sendmail/freebsd.mc,v 1.27 2002/10/16 22:52:56 keramida Exp $
>OSTYPE(freebsd5)
>DOMAIN(generic)
>
>FEATURE(access_db, `hash -o -T<TMPF> /etc/mail/access')
>FEATURE(blacklist_recipients)
>FEATURE(local_lmtp)
>FEATURE(`local_procmail')
>FEATURE(mailertable, `hash -o /etc/mail/mailertable')
>FEATURE(virtusertable, `hash -o /etc/mail/virtusertable')
>define(`confCW_FILE', `-o /etc/mail/local-host-names')
>define(`confBIND_OPTS', `WorkAroundBrokenAAAA')
>define(`confMAX_MIME_HEADER_LENGTH', `256/128')
>define(`confNO_RCPT_ACTION', `add-to-undisclosed')
>define(`confPRIVACY_FLAGS', `authwarnings,noexpn,novrfy')
>INPUT_MAIL_FILTER(`spamassassin', `S=local:/var/run/spamass-milter.sock, F=, T=C:15m;S:4m;R:4m;E:10m')
>define(`confMILTER_LOG_LEVEL',`6')
>MAILER(procmail)dnl
>MAILER(local)
>MAILER(smtp)
>============ sendmail.mc =================


"Настройка PROCMAIL c хитрыми условиями для разгребания СПАМа"
Отправлено Павел Киев , 14-Май-09 14:25 
>[оверквотинг удален]
>* ^X-Spam-Flag: YES # если спам
>* !^X-Sender: Procmail # и не проходило проверку
>{
>| formail -A"X-Sender: Procmail" # отметить что проверку прошло
>:0
>* ^X-Spam-Status: *(score > 20) # в зависимости от балла
>| sendmail > /dev/null # удаляем
>:0
>* ^X-Spam-Status: *(10 < score < 20)
>| formail -I"To: spam@maycorp.ru | sendmail -t # отправляем на дальнейшее рассмотрение

Решал похожую задачу для Yandex Spamooborona.
Он вставляет 2 тега, которые приходится проверять:
X-Spam-Flag: YES
X-Spam-Ystatus: hits=71.80
вот соотв. кусок .procmailrc:
:0
* ^X-Spam-Flag: YES
{
:0
* ? test $(/usr/bin/formail -xX-Spam-Ystatus |/bin/sed -e 's/^.*=//' -e 's/...$//') -ge 40
/dev/null
}
вроде всё понятно, скажу только что sed применяется чтобы взять число "hits" (начинается после знака '=') и откусить дробную часть вместе с точкой (последние 3 символа). Потом сравнивается с 40 (указанный яндексом порог).