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

Исходное сообщение
"FreeBSD + Sendmail + procmail+ cyrus"

Отправлено togkskbr , 05-Фев-10 23:19 
Установлен spamassasin и clamav, задача все что помечено как ****SPAM**** перебрасывать в ящик spam@domain.ru (создан пользователь), остальное отдавать пользователю.

В приведенном ниже конфигах редиректа нет, procmail молчит, в лог ничего не сыпется, но спам детектится и метка в теме ставится.

Если же как советовали http://www.opennet.me/openforum/vsluhforumID1/58331.html изменить mailertables на mail.domain.ru скрипт срабатывает, почта сносится в spam, лог procmail это показывает, но любая другая почта перестает ходить, в лог maillog сыпет:

Feb  5 21:21:26 mail sm-mta[2109]: o15ILLDT002109: Milter add: header: X-Spam-Ch
ecker-Version: SpamAssassin 3.2.5 (2008-06-10) on\n\tmail.metallkom-don.ru
Feb  5 21:21:26 mail sm-mta[2112]: o15ILLDT002109: to=<aaa@domain.ru>, d
elay=00:00:04, xdelay=00:00:00, mailer=procmail, pri=31075, relay=/usr/local/etc
/procmailrc, dsn=5.0.0, stat=Can't create output

что нужно подправить?


mail# uname -a
FreeBSD mail 7.1-RELEASE FreeBSD 7.1-RELEASE #1: Thu Jan 28 23:19:39 MSK 2010     root@mail:/usr/src/sys/i386/compile/ESXI  i386
mail#


freebsd.m4:
===========

divert(-1)
divert(0)
VERSIONID(`$FreeBSD: src/etc/sendmail/freebsd.mc,v 1.34.2.3.2.1 2008/11/25 02:59:29 kensmith Exp $
OSTYPE(freebsd6)
DOMAIN(generic)
FEATURE(access_db, `hash -o -T<TMPF> /etc/mail/access')
FEATURE(blacklist_recipients)
dnl FEATURE(local_lmtp)
FEATURE(mailertable, `hash -o /etc/mail/mailertable')
FEATURE(virtusertable, `hash -o /etc/mail/virtusertable')
dnl Uncomment to allow relaying based on your MX records.
dnl FEATURE(relay_based_on_MX)
dnl DNS based black hole lists
dnl --------------------------------
dnl FEATURE(dnsbl)
dnl FEATURE(dnsbl, `blackholes.mail-abuse.org', ``"550 Mail from " $&{client_addr} " rejected, see
dnl define(`confCW_FILE', `-o /etc/mail/sendmail.cw')
dnl define(`confCW_FILE', `-o /etc/mail/local-host-names')
define(`confMAX_MESSAGE_SIZE',`11428800')
DAEMON_OPTIONS(`Name=IPv4, Family=inet')
DAEMON_OPTIONS(`Port=25, Name=MSA, M=E')dnl
define(`confBIND_OPTS', `WorkAroundBrokenAAAA')
define(`confNO_RCPT_ACTION', `add-to-undisclosed')
define(`confPRIVACY_FLAGS', `authwarnings,noexpn,novrfy')
INPUT_MAIL_FILTER(`clamav', `S=local:/var/run/clamav/clamd.sock, F=, T=S:4m;R:4m')
INPUT_MAIL_FILTER(`spamassassin', `S=local:/var/run/spamass-milter.sock, F=, T=C:15m;S:4m;R:4m;E:10)
define(`confMILTER_MACROS_CONNECT',`b, j, _, {daemon_name}, {if_name}, {if_addr}')
dnl define(`confINPUT_MAIL_FILTERS', `spamassassin,clamav')
FEATURE(local_procmail)
MAILER(procmail)
MAILER(`cyrusv2')
MAILER(smtp)
MAILER(local)

local-host-names:
=================
domain.ru


mailertables:
==============
domain.ru        procmail:/usr/local/etc/procmailrc


procmailrc:
===========
MAILDIR=/var/mail
LOGFILE=/var/log/procmaillog
LOGABSTRACT=yes
VERBOSE=on

:0
* ^Subject:.*SPAM
$MAILDIR/spam



Содержание

Сообщения в этом обсуждении
"FreeBSD + Sendmail + procmail+ cyrus"
Отправлено SDenis , 06-Фев-10 11:55 
>[оверквотинг удален]
>procmailrc:
>===========
>MAILDIR=/var/mail
> LOGFILE=/var/log/procmaillog
> LOGABSTRACT=yes
> VERBOSE=on
>
> :0
> * ^Subject:.*SPAM
> $MAILDIR/spam

Здесь путаница с LDA (Local Delivery Agent).

Procmail умеет доставлять только локальным юзерам из /etc/password.

У Cyrus IMAP собственная база юзеров, для доставки в почтовые ящики используется собственный LDA (возможность фильтрации обкспечивается с помощью Sieve).

Если хочешь юзать Cyrus IMAP, подключи в sendmail.mc макрос mailer.cyrus и убери procmail.
Еще раз - юзеры у Cyrus IMAP не системные, управляются через CLI Cyrus'a


"FreeBSD + Sendmail + procmail+ cyrus"
Отправлено togkskbr , 06-Фев-10 13:23 

>Здесь путаница с LDA (Local Delivery Agent).
>
>Procmail умеет доставлять только локальным юзерам из /etc/password.

так и оказалось, procmail положил сообщения в /var/mail/spam но зайдя клиентом по поп3 я сообщений не вижу...


>У Cyrus IMAP собственная база юзеров, для доставки в почтовые ящики используется
>собственный LDA (возможность фильтрации обкспечивается с помощью Sieve).

хм, пока читаю что это и как, не могу понять если возможность глобального применения разбора почты ко всем пользователям?

>Если хочешь юзать Cyrus IMAP, подключи в sendmail.mc макрос mailer.cyrus и убери
>procmail.

http://www.yekt.info/2.html
добавил,

define(`confLOCAL_MAILER', `cyrus')
define(`CYRUS_MAILER_PATH', /usr/local/cyrus/bin/deliver)

а также именно в этом порядке.

MAILER(`smtp')
MAILER(`local')
MAILER(`cyrus')


>Еще раз - юзеры у Cyrus IMAP не системные, управляются через CLI
>Cyrus'a


"FreeBSD + Sendmail + procmail+ cyrus"
Отправлено Medlar , 06-Фев-10 12:00 
>... procmail молчит,

Покажите вывод команды
date | sendmail -Am -odi -d11.99 local-user


"FreeBSD + Sendmail + procmail+ cyrus"
Отправлено togkskbr , 06-Фев-10 13:12 
>>... procmail молчит,
>
>Покажите вывод команды
>date | sendmail -Am -odi -d11.99 local-user

mail# date | sendmail -Am -odi -d11.99 local-user
openmailer: FILE /var/imap/socket/lmtp
openmailer: MCI@0x2841100c: flags=6006c<CACHED,ESMTP,SIZE,8BITMIME,ENHSTAT,PIPELINED>,
        errno=0, herrno=0, exitstat=0, state=2, pid=0,
        maxsize=0, phase=client LHLO, mailer=cyrusv2,
        status=(null), rstatus=(null),
        host=localhost, lastuse=Sat Feb  6 13:11:20 2010

giveresponse: status=67, dsn=5.1.1, e->e_message=local-user... User unknown, errnum=0
openmailer: FILE /var/imap/socket/lmtp
openmailer: MCI@0x2841100c: flags=6006c<CACHED,ESMTP,SIZE,8BITMIME,ENHSTAT,PIPELINED>,
        errno=0, herrno=0, exitstat=0, state=2, pid=0,
        maxsize=0, phase=client DATA 354, mailer=cyrusv2,
        status=(null), rstatus=(null),
        host=localhost, lastuse=Sat Feb  6 13:11:20 2010

openmailer: MCI@0x2841100c: flags=6006c<CACHED,ESMTP,SIZE,8BITMIME,ENHSTAT,PIPELINED>,
        errno=0, herrno=0, exitstat=0, state=2, pid=0,
        maxsize=0, phase=client DATA 354, mailer=cyrusv2,
        status=(null), rstatus=(null),
        host=localhost, lastuse=Sat Feb  6 13:11:20 2010

giveresponse: status=0, dsn=2.0.0, e->e_message=<NULL>, errnum=0
mail#


"FreeBSD + Sendmail + procmail+ cyrus"
Отправлено Medlar , 06-Фев-10 13:34 
mailer=cyrusv2, то есть, как вам уже подсказали в первом ответе, до procmail'a в вашем случае  дело не доходит, да и не должно доходить.

"FreeBSD + Sendmail + procmail+ cyrus"
Отправлено togkskbr , 06-Фев-10 15:40 
>mailer=cyrusv2, то есть, как вам уже подсказали в первом ответе, до procmail'a
>в вашем случае  дело не доходит, да и не должно
>доходить.

да спасибо, но ответ о глобальном применении одного скрипта sieve по прежнему открыт... не хотелось бы менять cyrus, но видимо придется.


"FreeBSD + Sendmail + procmail+ cyrus"
Отправлено SDenis , 06-Фев-10 23:36 
>>mailer=cyrusv2, то есть, как вам уже подсказали в первом ответе, до procmail'a
>>в вашем случае  дело не доходит, да и не должно
>>доходить.
>
>да спасибо, но ответ о глобальном применении одного скрипта sieve по прежнему
>открыт... не хотелось бы менять cyrus, но видимо придется.

Понять схему MTA-LDA.

Читать доки по Cyrus.

и/или:

Начать с чего нибудь попроще
из IMAP: dovecot, courier-imap
из MTA: sendmail (должен знать каждый, первая реализация SMTP),затем postfix, затем exim.


"FreeBSD + Sendmail + procmail+ cyrus"
Отправлено togkskbr , 07-Фев-10 11:19 

>Понять схему MTA-LDA.

видимо придется.

>Читать доки по Cyrus.

доки по cyrus просто бомба...
например это чего стоит http://cyrusimap.web.cmu.edu/imapd/install-sieve.html


>и/или:
>
>Начать с чего нибудь попроще
>из IMAP: dovecot, courier-imap
>из MTA: sendmail (должен знать каждый, первая реализация SMTP),затем postfix, затем exim.
>


"FreeBSD + Sendmail + procmail+ cyrus"
Отправлено togkskbr , 07-Фев-10 17:25 
После углубленного прочтения удалость-таки запустить Sieve от cyrus... сама фильтрация заработала, к примеру такое:

if anyof (address :contains "from" "testu@test.ru") {
    reject text:
wtf!!!!!
.
;
    discard;
    stop;
}


если же добавить:

if allof (header :contains "subject" "SPAM") {
    reject text:
спам
.
;
    redirect "spam@test.ru";
}


никакого редиректа не выполняется.

P.S. правило генерились при помощи smartsieve - полезная штука.


1. вопрос почему такое половинчатое выполнение?  MTA-LTA?

2. ну и вдогонку, есть ли другие варианты глобально навесить этот скрипт  на всех кроме как expect - ом ?


"FreeBSD + Sendmail + procmail+ cyrus"
Отправлено halt , 10-Фев-10 11:37 
Делай связку Spamassasin-Sendmail с помощью milter-spamc
сейчас он платный, но старые версии халявные если не найдешь я вышлю
сам milter работает стабильно, я его еще доработал и связал с mysql
Выдержка из хелпа:

-a email        copy all mail to email address
-A              always add the X-Spam-Report: header report of rules triggered
-b email        copy junk mail to email address
-B email        redirect junk mail to email address
-c email        copy clean mail to email address
-C              check for spam only, disable X-Spam-Report: header completely
-d excess       discard spam messages that exceed the threshold by N
-f cf           pathname of sendmail.cf file for access database whitelists
-F format       redirect junk mail to reformated recipient addresses
-h              this usage summary
-H host         spamd host name or IP
-K kilo         how many KB to pass to SpamAssassin, 64 default, 0 unlimited
-l limit        limit number of untrusted recipients per message
-p              discard instead of reject if Precedence is list or lower
-P port         spamd port address, -1 to disable spamd filtering
-r excess       reject spam that exceeds the threshold by N, overrides delivery
-R excess       reject spam that exceeds the threshold by N, allow delivery
-s tag          spam subject tag
-S              append the spam score to the spam subject tag
-t timeout      sendmail/milter I/O timeout in seconds, 0 indefinite
-T timeout      milter/spamd I/O timeout in seconds, 0 indefinite
-u user         default user account to process messages with
-U user         force message processing with this user account
-v detail       comma separated list of what to write to the mail log:
                0, all, info, trace, parse, debug, dialog, state, dns
                cache, database, socket-fd, socket-all, libmilter