Всем привет!
Есть система с установленным постфиксом настроенным на виртуальные домены.
Пытаюсь ко всему этому прикрутить фильтр (clamfilter)Делаем по инструкции
1. Edit master.cf and put there:
filter unix - n n - - pipe flags=R user=postfix \
argv=/usr/local/bin/clamfilter -F admin@domain.com \
-f ${sender} -- ${recipient}2. Add the content_filter option to smtpd binary:
smtp inet n - n - - smtpd -o content_filter=filter:dummy3. Restart Postfix.
Работает, но только наполовину, а именно - если я отправляю почту через клиента с другой машины - фильтр срабатывает и вирус ловит
Mar 25 12:14:18 md postfix/pipe[71777]: 397CA164823: to=<root@domain.net>, orig_to=<root@otherdomain.net>, relay=filter, delay=0, status=sent (dummy)
а если я делаю
cat EIR.vir | mail -s "virus test" root@domain.net
То почта идет в обход фильтраMar 25 12:15:01 md postfix/virtual[71782]: 9FEF6164824: to=<root@domain.net>, orig_to=<root@otherdomain.net>, relay=virtual, delay=0, status=sent (delivered to maildir)
По логике вещей подумал и добавил строки -o content_filter=filter:dummy
к
local unix - n n - - local -o content_filter=filter:dummy
virtual unix - n n - - virtual -o content_filter=filter:dummyРезультат тот же.
Как сделать проверку в любом случае?
Если не ошибаюсь, то данном случае content_filter нужно указывать для pickup.
>Если не ошибаюсь, то данном случае content_filter нужно указывать для pickup.Получаем
status=bounced (Too many hops)
Потому, что после скрипта (filter) письмо опять попадает к pickup и получается петля. Я подумаю, как этого избежать (если unk раньше не подскажет :) )
Просто написать content_filter=filter:dummy в main.cf, а не в master.cf
>Просто написать content_filter=filter:dummy в main.cf, а не в master.cfПросто - не получается, все равно получаем status=bounced (Too many hops)
>>Просто написать content_filter=filter:dummy в main.cf, а не в master.cf
>
>Просто - не получается, все равно получаем status=bounced (Too many hops)
А вы покажите master.cf и postconf -n|grep content_filter
>>>Просто написать content_filter=filter:dummy в main.cf, а не в master.cf
>>
>>Просто - не получается, все равно получаем status=bounced (Too many hops)
>А вы покажите master.cf и postconf -n|grep content_filter[megadot@root postfix]# grep -v "#" master.cf
smtp inet n n n - - smtpd
pickup fifo n - n 60 1 pickup
cleanup unix n - n - 0 cleanup
qmgr fifo n - n 300 1 qmgr
tlsmgr unix - - n 1000? 1 tlsmgr
rewrite unix - - n - - trivial-rewrite
bounce unix - - n - 0 bounce
defer unix - - n - 0 bounce
trace unix - - n - 0 bounce
verify unix - - n - 1 verify
flush unix n - n 1000? 0 flush
proxymap unix - - n - - proxymap
smtp unix - - n - - smtp
relay unix - - n - - smtp
-o fallback_relay=
showq unix n - n - - showq
error unix - - n - - error
discard unix - - n - - discard
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - n - - lmtp
anvil unix - - n - 1 anvil
scache unix - - n - 1 scache
maildrop unix - n n - - pipe
flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}
old-cyrus unix - n n - - pipe
flags=R user=cyrus argv=/cyrus/bin/deliver -e -m ${extension} ${user}
cyrus unix - n n - - pipe
user=cyrus argv=/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}
uucp unix - n n - - pipe
flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
ifmail unix - n n - - pipe
flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp unix - n n - - pipe
flags=Fq. user=foo argv=/usr/local/sbin/bsmtp -f $sender $nexthop $recipientfilter unix - n n - - pipe
flags=R
user=filter
argv=/usr/local/bin/clamfilter -F root@megadot.savelovo.net -f ${sender} -- ${recipient}[megadot@root postfix]# postconf -n|grep content_filter
content_filter = filter:dummy
>filter unix - n
>n -
> - pipe
>
> flags=R
> user=filter
> argv=/usr/local/bin/clamfilter -F root@megadot.savelovo.net -f ${sender} -- ${recipient}
Пардон я был не внимателен, ваш фильтр скорее всего использует sendmail(1) для возврата почты postfix - т.е. не smtp почту фильтровать им не получется.
(по крайней мере одним экземпляром postfix)
Используйте smtp фильтр или возвращайте почту posfix программкой типа minisendmail.
>Пардон я был не внимателен, ваш фильтр скорее всего использует sendmail(1) для
>возврата почты postfix - т.е. не smtp почту фильтровать им не
>получется.
>(по крайней мере одним экземпляром postfix)
>Используйте smtp фильтр или возвращайте почту posfix программкой типа minisendmail.Угу, его и использует
clamfilter.c:
#ifndef DELIVER
#define DELIVER "/usr/sbin/sendmail"
#endifЕсть еще вопрос - как к данной конструкции прилепить еще фильтр типа:
smtp inet n - n - - smtpd
-o smtd_recipient_restrictions=permit_mynetworks,check_relay_domains
-o content_filter=spamassassin
spamassassin unix - n n - - pipe
user=nobody argv=/usr/local/bin/spamc -f -e
/usr/sbin/sendmail -oi -f ${sender} ${recipient}
>Есть еще вопрос - как к данной конструкции прилепить еще фильтр типа:
Проще да лучше поставить что-то типа amavisd-new (народ на форуме очень хвалит) и будет у вас работать clamav, spamassassin и т.д. будет быстрее и лучше. Если не хотите amavisd, то можно приделать скриптовый кастыль - который получив письмо через pipe(8) сначала отдаст его clamav, а потом spamasssassin'у...
>>Есть еще вопрос - как к данной конструкции прилепить еще фильтр типа:
>Проще да лучше поставить что-то типа amavisd-new (народ на форуме очень хвалит)
>и будет у вас работать clamav, spamassassin и т.д. будет быстрее
>и лучше. Если не хотите amavisd, то можно приделать скриптовый кастыль
>- который получив письмо через pipe(8) сначала отдаст его clamav, а
>потом spamasssassin'у...Я уже пробовал через него и решил отказаться - каждый из его процессов кушает около 13 метров памяти. Достаточно много для программы-посредника.
>Я уже пробовал через него и решил отказаться - каждый из его
>процессов кушает около 13 метров памяти. Достаточно много для программы-посредника.
Дело ваше - ставьте скриптовую подпорку.
>>Я уже пробовал через него и решил отказаться - каждый из его
>>процессов кушает около 13 метров памяти. Достаточно много для программы-посредника.
>Дело ваше - ставьте скриптовую подпорку.Вопрос то вот в чем:
Если у меня уже есть такая конструкция:
smtp inet n - n - - smtpd -o content_filter=filter:dummyfilter unix - n n - - pipe flags=R user=postfix \
argv=/usr/local/bin/clamfilter -F admin@domain.com \
-f ${sender} -- ${recipient}Как можно сделать вызов еще одного фильтра?
smtp inet n - n - - smtpd
-o smtd_recipient_restrictions=permit_mynetworks,check_relay_domains
-o content_filter=spamassassin
spamassassin unix - n n - - pipe
user=nobody argv=/usr/local/bin/spamc -f -e
/usr/sbin/sendmail -oi -f ${sender} ${recipient}
>Как можно сделать вызов еще одного фильтра?
Я же вам говорю - напишите скрипт который сначала запустит /usr/local/bin/clamfilter, а потом /usr/local/bin/spamc и запускайте этот скрипт в качестве фильтра через pipe(8).
Использовать команду content_filter для pipe(8) с фильтрами вашего типа нельзя - цепочку не построить.