Vlad Shpolyanskiy wrote:
> Коллеги, добрый день!
добрый
> Подскажите, плиз, по следующему вопросу:
> Есть два роутера - первый и второй, идут в конфиге друг за другом,
> каждый из которых со своим pipe транспортом.
> Каждый роутер в отдельности работает так как ожидается, письмо проходит
> через него и на выходе получаю то что ожидается.
> Когда пытаюсь включить оба роутера, то в логах вижу что письмо проходит
> через оба роутера, но по финалу не видно результатов обработки письма
> первым роутером/транспортом (в моем случаи не вырезается атач из письма).
при таком подходе если в письме будут zip/rar/7z аттачи, то такие письма
три раза пройдет через очередь?
очень похоже на то, как работают с почтой постфиксеры.
если бы не ограничение на размер проверяемых с помощью spamc писем, то
самое простое - избавиться как минимум от одного инжекта в очередь -
письма с аттачами проверять одной парой роутера и транспорта, а письма
без аттачей - другой парой.
в первой паре в одном фильтре использовать и altermime и spamc.
во второй паре - только spamc.
если пойти дальше - можно использовать одну пару роутера и транспорта, а
transport_filter должен менять значение в зависимости от значения
переменных acl_m_attach_cut и local_part.
вообще избавиться от повторных инжектов в очередь можно путем
использовать штатной интеграции со spamd без дополнительных роутеров и
транспортов, а вырезать аттачи уже на этапе доставки. правда тогда spamd
будет проверять письма до вырезания аттачей. и это актуально, если в
списке qqq указаны локальные домены, доставку которым можно организовать
с помощью LDA через pope транспорт.
если же использование двух повторных инжекта в очередь приемлемо, то я
бы убрал unseen из роутера attachstrip. ибо с одной стороны в транспорте
attachstrip_transport производится повторный инжект в
очередь, а из-за unseen в роутере attachstrip письмо будет передано
дальше роутеру spamcheck_router.
т. о. каждое письмо с zip/rar/7z аттачами должно дойти до роутера
spamcheck_router в двух экземплярах - со срипнутыми аттачми и просто с
аттачами.
еще указание названия протокола attach-strip смысла не имеет. разве что
оно где-то используется при присвоении значения переменной
acl_m_attach_cut. хотя скорее всего ей значение присваивается в
зависимости от наличия аттачей в письме.
и вся эта конструкция скорее всего не сработает, если имя аттача будет
закодировано не в quoted-printable или base64, а в соответствии с
RFC2231, как и положено. у altermime с этим проблем нет, но exim из
коробки вроде до сих пор не поддерживает RFC2231.
в любом случае я бы в конце регекспа таки сделал привязку к концу
строки. мало ли, где в средине имени аттача может быть .zip или .rar.
например, из писем будут удалены аттачи с именами типа www.rarlab.com.png
ну и чтобы тестировать altermime с таким же синтаксисом из командной
строки, то регексп придется еще и в кавычки взять.
т. о. получится:
transport_filter = \
"/usr/local/bin/altermime --input=- --remove='\.(zip|rar|7z)$'"
p. s. список рассылки exim-conf на mta.org.ua создан для обсуждения
вопросов, связанных с одноименным конфигуратором exim'а. посему тут мало
подписчиков, в последнее время кроме редких анонсов новых фичей или
пофикшенных багов тут пролетают разве что анонсы патчей и механизмов
сборки новых версий exim для нескольких ОС.
общие вопросы по exim скорее всего лучше задавать в
exim-users на mailground.net, если с инглишем всё хорошо, то в
exim-users на exim.org
> Кусок конфига ниже.
>> Первый роутер/транспорт:
>> attachstrip:
> driver = accept
> domains = +qqq
> transport = attachstrip_transport
> condition = "${if and { {eq{$acl_m_attach_cut}{1}}
> {!eq{$local_part}{xxx}} } {1}{0}}"
> no_verify
> unseen
>> attachstrip_transport:
> driver = pipe
> command = /usr/local/sbin/exim -oMr attach-strip -bS
> use_bsmtp = true
> transport_filter = "/usr/local/bin/altermime --input=-
> --remove=\.(zip|rar|7z)"
> home_directory = "/tmp"
> current_directory = "/tmp"
> user = mailnull
> group = mail
> log_output = true
> return_fail_output = true
>> Второй роутер/транспорт:
>> spamcheck_router:
> no_verify
> condition = "${if and { {!def:h_X-xxx-Spam:} \
> {!eq {$received_protocol}{spam-scanned}} \
> { < {$message_size}{400K}} } {1}{0}}"
> driver = accept
> transport = spamcheck
>>> spamcheck:
> driver = pipe
> timeout_defer = true
> command = /usr/local/sbin/exim -oMr spam-scanned -bS
> use_bsmtp = true
> transport_filter = "/usr/local/bin/spamc -f -s 400000"
> home_directory = "/tmp"
> current_directory = "/tmp"
> user = mailnull
> group = mail
> log_output = true
> return_fail_output = true
> return_path_add = false
> message_prefix =
> message_suffix =
>> Спасибо!
>>> _______________________________________________
> exim-conf mailing list
>exim-conf на mta.org.ua>http://mta.org.ua/mailman/listinfo/exim-conf>http://mta.org.ua/exim-conf/>http://mta.org.ua/exim-conf/m4/README>rsync://rsync.mta.org.ua/exim-conf/>
--
Best wishes Victor Ustugov mailto:victor на corvax.kiev.ua
public GnuPG/PGP key: http://victor.corvax.kiev.ua/corvax.asc
ICQ UIN: 371808614 JID: corvax_at_nb на jabber.corvax.kiev.ua
nic-handle: CRV-UANIC