[exim-conf] вопрос по pipe транспорту

Victor Ustugov victor на corvax.kiev.ua
Чт Июл 23 19:20:48 EEST 2015


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



Подробная информация о списке рассылки exim-conf