LINUX.ORG.RU
ФорумAdmin

В postfix два content_filter как реализовать?

 ,


0

1

Помогите знающие. Сколько я не пытался понять механизм модулей postfix читая документацию, так ничего и не понял ( ну тупой я нуб, просьба злобным гуру не повторяться и вообще проходить мимо).

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

И так есть стандартный механизм вызова spamassassin вызывается он так в master.cf

smtp      inet  n       -       n       -       -       smtpd
  -o content_filter=spamassassin:

spamassassin     unix    -       n       n       -       -       pipe
    user=spamd argv=/usr/bin/spamc -f -e /usr/sbin/sendmail.postfix -oi -f ${sender} ${recipient}

и хотелось бы включить свой скриптик собирающий некоторую информацию по заголовкам писем перелопаченный на основе disclaimer он вызывается аналогично и работает, но без spamassassin.

smtp      inet  n       -       n       -       -       smtpd
  -o content_filter=dfilt:

dfilt     unix    -       n       n       -       -       pipe
  flags=Rq user=filter argv=/etc/postfix/disclaimer -f ${sender} -- ${recipient}

А вот скрестить их в один фильтр, или правильно передать от одного фильра другому, мне увы не позволяют знания или закостенелые мозги. Думал может так:

  -o content_filter=spamassassin:dfilt

нет....

Чтение 11 главы русского перевода книги The Book of Postfix (Ralf Hildebrandt, Patrick Koetter) просветления увы не внесли. Аналогов на просторов инета я не нашел. Каким то органом чувствую, что не сложно это должно быть, но увы..... Скрипт disclaimer заканчивается практически так же как и спамфильтр возвращением письма и оно возвращается, но в другой фильтр естественно не передается, а надо бы :))).

/usr/sbin/sendmail.postfix "$@" <in.$$

Может кто то подскажет или ткнет в доку, только она должна быть понятна балбесу. Терпеливым и откликнувшимся Гуру, заранее Спасибо.

★★★★

Вот для ознакомления: https://www.opennet.ru/openforum/vsluhforumID1/75063.html

Если кратко, то может быть только один content_filter, потому что postfix (smtpd) передаёт письмо фильтру полностью и если фильтр письмо принял, то postfix «забывает» про это письмо, оно уже передано, у posftix'а нет письма, чтобы передать его второму content_filter'у.

content_filter возвращает письмо через:

pickup    fifo  n       n       n       60      1       pickup
но там не нужно делать content_filter, иначе письмо на нём зациклит.

Если нужно что-то логгировать до спамасасина, то, то в качестве контейнт-фильтра пишите скрипт, который логирует и передаёт письмо следующему фильтру (спамасасину), примерно как здесь: http://wiki.apache.org/spamassassin/IntegratedSpamdInPostfix

mky ★★★★★
()

content_filter не нужен, используйте milter интерфейс. В нем можно несколько фильтров сделать и привязывать их как угодно.

trancefer ★★
()
Ответ на: комментарий от mky

Вон оно как...

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

Хотелка то вроде простая, хотелось бы логгировать от какого адреса письмо пришло и к кому, те те письма которые удалил спам фильтр не интересны.

Спасибо.

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

Milter когда то пользовал,

но мне кажется еще в связке sendmail + drweb. В postfix тоже? А можно какую нибуть ссылку на документацию,лучше русскую. Потому что даже что искать не представляю.

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

Это я уже полистал

темный лес... а нет примерчика какого живого, как что то прикручивалось? И на русском бы.

Попробую расковырять. Спасибо.

alex_sim ★★★★
() автор топика
Ответ на: Вон оно как... от alex_sim

Если вам нужно сначала в спамасасин, то указывайте ему, чтобы он после проверки вызывал ваш скрипт, а не sendmail.postfix. А уже из своего скрипта вызывайте sendmail.postfix.

хотелось бы логгировать от какого адреса письмо пришло и к кому

Вроде smapd сам умеет это писать, возможно, что вам просто нужно скриптом разбирать его логи и записывать в нужном виде.

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

Это да,

можно просто лопатить maillog, но так вроде мне казалось красивее что ли особенно после удаления спама. Варианты есть, если не получится с фильтром, найду другой способ. Вот по этой ссылке http://wiki.apache.org/spamassassin/IntegratedSpamdInPostfix можно намутить, только до spamassassin все это получается.

alex_sim ★★★★
() автор топика
Ответ на: Это да, от alex_sim

можно просто лопатить maillog, но так вроде мне казалось красивее что ли особенно после удаления спама.

Пальцем в небо т.к. postfix не знаю, использую sendmail с spamass-milter. Он у меня пишет в maillog и выхлоп добавленных заголовков sa, в принципе можно проанализировать и их и попавшие в спам просто не выводить.

anc ★★★★★
()
Ответ на: комментарий от mky

сделал так,

${SPAMASSASSIN} | ${SENDMAIL} «$@» | ${MY_SCRIPT} «$@»

И вроде все заработало как хотелось, но опять засада, на тестовом почтовике (без серых списков) все нормально, а на рабочем почему то postgrey стал работать не так как задумано. Почему то пиcьма от почтовиков с белого списка (!!!) так же стали задерживаться.... а это не айс! postgrey вызывается так в main.cf

smtpd_recipient_restrictions =
        check_policy_service inet:127.0.0.1:10023,
        .....

spamd попросил писать отдельный лог но в нем он не пишет почему то отправителя:

Mon Sep 12 09:23:26 2016 [20922] info: spamd: connection from localhost [127.0.0.1] at port 41204
Mon Sep 12 09:23:27 2016 [20922] info: spamd: processing message <1241734014.20160912091749@mydoman.ru> for spamd:5001
Mon Sep 12 09:23:27 2016 [20922] info: spamd: identified spam (1005.0/5.0) for spamd:5001 in 0.4 seconds, 692 bytes.
Mon Sep 12 09:23:27 2016 [20922] info: spamd: result: Y 1004 - DNS_FROM_AHBL_RHSBL,FSL_HELO_NON_FQDN_1,GTUBE,HELO_NO_DOMAIN,RDNS_NONE,TO_MALFORMED,TO_NO_BRKTS_NORDNS scantime=0.4,size=692,user=spamd,uid=5001,required_score=5.0,rhost=localhost,raddr=127.0.0.1,rport=41204,mid=<1241734014.20160912091749@mydoman.ru>,autolearn=no

Полезной информации нет. Видимо придется просто maillog лопатить

alex_sim ★★★★
() автор топика
Ответ на: сделал так, от alex_sim

Опять пальцем в небо. Посмотрите в сторону ключика -D у него много параметров, вдруг что-то подойдет.

anc ★★★★★
()
Ответ на: Ключик spamd от alex_sim

Да. Подробности в мане и согласно ему http://wiki.apache.org/spamassassin/DebugChannels
Я не уверен что идея хороша, но исходя из того что при полном логе наковырять данные можно, только предполагаю что какого-то из параметров вам хватит (сам такого не делал).

anc ★★★★★
()
Последнее исправление: anc (всего исправлений: 1)
Ответ на: сделал так, от alex_sim

${SPAMASSASSIN} | ${SENDMAIL} «$@» | ${MY_SCRIPT} «$@»

Странная конструкция, как именно вы её реализовали?

По идее вам нужно было в master.cf в строке описания spamassassin писать:

user=spamd argv=/usr/bin/spamc -f -e /usr/local/sbin/logger-mail.sh -oi -f ${sender} ${recipient}

#cat /usr/local/sbin/logger-mail.sh
#!/bin/bash
echo " $*" >> /tmp/logfile.txt
exec /usr/sbin/sendmail.postfix "$@" 

То есть postfix вызывая spamc указывает ему через опцию ″-e″, что возврат письма нужно выполнять через ваш скрипт (logger-mail.sh), а не через sendmail. А ваш скрипт, сохранив указанные ему агрументы (можно все, можно только тот, что после ″-f″ и последний) замещает себя sendmail'ом, который и получает письмо на stdin от spassasin'а.

У spamd, вроде, настраивается что выводить через ″-D канал″, http://wiki.apache.org/spamassassin/DebugChannels .

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

Да, наверно странная! :)

но тем не менее это работает, как то. Это я нарыл по вашей ссылке отсюда http://wiki.apache.org/spamassassin/IntegratedSpamdInPostfix первый скрипт. Так и только так отрабатывает и spamassassin и мой скрипт дергает отправителя и получателя из письма, но обнаружились какие то проблемы с postgrey.

в скрипте же

${SPAMASSASSIN} | ${SENDMAIL} "$@"

отрабатывает spamd затем передается sendmail? почему бы мне не воткнуть свой скрипт? но мой скрипт отрабатывался только стоя третим. в остальных случаях письмо вроде бы обрабатывалось spamd, но затем терялось в недрах модулей postfix, я к сожалению никак не могу понять как он и куда передает и синтаксис неподвластен моему умишку. Поэтому и ищу аналоги и пытаюсь что то свое воткнуть. Извините если я тут нагородил чуши не понимаючи.

Обязательно сейчас попробую ваш вариант, что то подобное я и хотел реализовать, но видимо через задний проход.

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

Попробовал как вы советовали....

скрипт сработал, но теперь обнаружилась другая проблема. Теперь ВСЕ письма распознаются как спам.

пишу локальному пользователю user@localhost и любое письмо распознается как спам с оценкой 6

X-Spam-Status: Yes, score=6.0 required=5.0 tests=DNS_FROM_AHBL_RHSBL,
.....
X-Spam-Report:
        *  1.2 TO_MALFORMED To: has a malformed address
        *  0.2 FH_FROMEML_NOTLD E-mail address doesn't have TLD (.com, etc.)
        *  2.4 DNS_FROM_AHBL_RHSBL RBL: Envelope sender listed in dnsbl.ahbl.org
        *  0.4 NO_DNS_FOR_FROM DNS: Envelope sender has no MX or A DNS records
        *  1.3 RDNS_NONE Delivered to internal network by a host with no rDNS
        *  0.5 TO_EQ_FM_DIRECT_MX To == From and direct-to-MX
        *  0.0 TO_NO_BRKTS_NORDNS To: misformatted and no rDNS

Отключаю скрипт и на том же самом письме

X-Spam-Status: No, score=3.2 required=5.0 tests=FH_FROMEML_NOTLD,RDNS_NONE,

чудеса...

alex_sim ★★★★
() автор топика
Последнее исправление: alex_sim (всего исправлений: 1)
Ответ на: Попробовал как вы советовали.... от alex_sim

Ну это уже какие-то чудеса, скрипт срабатывает после spamassassin'а, он никак не может влиять на распознование спама.

И это вобще странно:

Envelope sender listed in dnsbl.ahbl.org

Откуда у письма мог взяться адрес отправителя из блек-листа?

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

Вот вот!

подумал может в dnsbl.ahbl.org вдруг появился какой нибуть localhost? но без скрипта то все нормально... не спам! :))

Ладно переживу без своего скрипта, уж больно геморойно все это оказалось.

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