[exim-conf] доработки поддержки персональных карантинов

Victor Ustugov victor на corvax.kiev.ua
Сб Янв 7 02:13:36 EET 2012


приветствую

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

также добавлена переменная confVIRT_MDIR_PIPE_PERSONAL_QUARANTINE,
отличающаяся от confVIRT_MDIR_PIPE тем, что в ней нужно указать путь к
внешнему LDA и параметры доставки письма в персональный карантин.

пример:
define(`confVIRT_MDIR_PIPE_PERSONAL_QUARANTINE',
`/usr/local/libexec/dovecot/deliver -d $local_part@$domain -m Junk')dnl

похоже, что значение параметра command в транспортах экспандится как-то
криво, поэтому не удалось при использовании PIPE в confDELIVERY_TO в
одном транспорте delivery_to_virt_domain использовать условие для выбора
значения confVIRT_MDIR_PIPE или confVIRT_MDIR_PIPE_PERSONAL_QUARANTINE.

пришлось создать отдельный транспорт
delivery_to_virt_domain_personal_quarantine, который используется только
при указании PIPE в confDELIVERY_TO при необходимости доставить спамовое
письмо в персональный карантин.

дополнительные варианты доставки писем в виртуальные мейлдиры с помощью
procmail и пользовательских фильтров exim'а игнорируется для спамовых
писем, предназначенных для доставки в персональные карантины.

также в системном фильтре (если быть точнее, то в
site/system_filter_quarantine_content_scaned) нужно после доставки копий
писем в общесистемные каратины (если одновременно используются и
общесистемные и персональные карантины) не выполнять seen finish, т. к.
в противном случае уже нЕчего будет доставлять в персональный карантин.

пример можно найти тут:
http://mta.org.ua/exim-4.76-conf/samples/site/system_filter_quarantine_personal_content_scaned

имя файла дано для примера. в рабочей ситуации этот код должен
находиться в файле site/system_filter_quarantine_content_scaned

при этом для писем, предназначенных для доставки в общесистемные
карантины, нужно делать опциональную доставку в /dev/null для адресов
получателей, которые тем или иным способом (virt_aliases, virtusertable)
разворачиваются не в другие адреса, а в команды. например, это касается
алиасов, применяемых для списков рассылок менеджера рассылок mailman. в
противном случае письма, получившие высокую оценку контент сканера, все
равно будут доставлены в списки рассылки и на служебные адреса списков
(подписка, отписка, адрес владельца рассылки и т. д.)

проще всего игнорирование штатной доставки в такие адреса делать с
помощью примерно такой конструкции:

ifelse_strstr(confCONTENT_SCANNING_QUARANTINE, `PERSONAL', `
if $h_X-Spam-Action: contains "quarantined" then
	if foranyaddress $recipients (
"${lookup{$thisaddress}wildlsearch{confCONFDIR/recipients_no_personal_quarantine}{yes}{no}}"
is "yes" ) then
		seen save /dev/null
		finish
	endif
endif
')dnl ifelse_strstr(confCONTENT_SCANNING_QUARANTINE, `PERSONAL', `')

при этом в файле recipients_no_personal_quarantine нужно перечислить
адреса получателей, которые не являются почтовыми ящиками. пример,
касающийся этого списка рассылки:

# cat recipients_no_personal_quarantine
exim-conf на mta.org.ua
exim-conf-admin на mta.org.ua
exim-conf-bounces на mta.org.ua
exim-conf-confirm на mta.org.ua
exim-conf-join на mta.org.ua
exim-conf-leave на mta.org.ua
exim-conf-owner на mta.org.ua
exim-conf-request на mta.org.ua
exim-conf-subscribe на mta.org.ua
exim-conf-unsubscribe на mta.org.ua


-- 
Best wishes Victor Ustugov   mailto:victor на corvax.kiev.ua
public GnuPG/PGP key:        http://victor.corvax.kiev.ua/corvax.asc
ICQ UIN: 77186900, 371808614 nic-handle: CRV-UANIC




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