[exim-conf] dlfunc для интеграции exim с rspamd

Victor Ustugov victor на corvax.kiev.ua
Вт Мар 1 19:50:42 EET 2011


Victor Ustugov wrote:

>> от dlfunc а получаю следующие строки (ham/spam)
>>
>> RSPAMD answer: RSPAMD/1.3 0 EX_OK\r\nMetric: default; False; -3.00 /
>> 10.00 / 0.00\r\nAction: no action\r\nSymbol: R_SPF_ALLOW(-3.00); SPF
>> verification alowed;mx\r\nMessage: (SPF): spf allow\r\nUrls:
>> www.domain.com\r\nEmails: \r\nMessage-ID:
>> 20110228145135.GC96080 на domain.com\r\n\r\n
>>
>> RSPAMD answer: RSPAMD/1.3 0 EX_OK\r\nMetric: default; True; 11.00 /
>> 10.00 / 0.00\r\nAction: reject\r\nSymbol: MIME_HTML_ONLY(1.00); Messages
>> that have only HTML part\r\nSymbol: ONCE_RECEIVED(1.00); One received
>> header in a message \r\nSymbol: FORGED_RECIPIENTS(3.00); Recipients are
>> not the same as RCPT TO: mail command\r\nSymbol:
>> ONCE_RECEIVED_STRICT(4.00); One received header with 'bad' patterns
>> inside\r\nSymbol: MISSING_SUBJECT(2.00); Subject is missing inside
>> message\r\nUrls: \r\nEmails: \r\nMessage-ID:
>> 20112281815.EFC3173557E19590A9D3F на Inddev3\r\n\r\n
>>
>> 1. Action для ham писем не определялся изза того что Action: no action
>>    не подходит под Action: (\S+)\r\n
> 
> согласен, уместно (.+?)
>
>> 2. изза того что в функции match $N действует только внутри регекспа, 
>>    хидер X-Rspamd-Report: был равен $1$2 
> 
> это совсем старый вариант. чуть более поздний вариант лежит рядом -
> configure-example
> там уже нет \$1\$2

я вот в предыдущем письме хотел возразить, но при проверке в exim -be
таки $1 в match не сработал так, как я ожидал:

# echo '${if match{AABBCC}{\N(A+)\N}{\$1}{}}' | exim -be
> ${if match{AABBCC}{\N(A+)\N}{\$1}{}}
$1

но странно здесь другое. если при экранировании испльзовать два слеша,
то \$1 таки заменяется на подстроку, соответствующую шаблону в первых
круглых скобках, а лишний слеш выводится перед этим значением:

# echo '${if match{AABBCC}{\N(A+)\N}{\\$1}{}}' | exim -be
> ${if match{AABBCC}{\N(A+)\N}{\\$1}{}}
\AA


есть вполне рабочий пример:

warn	condition	= ${if eq{$acl_m0}{}{no}{yes}}
	set acl_m1	= ${if match{$acl_m0}\
		{\N^RSPAMD answer: RSPAMD/(\S+) 0 EX_OK\N}{$1}{}}
	add_header	= X-Rspamd-Protocol-Version: \
		${if eq{$acl_m1}{}{not found}{$acl_m1}}

это фрагмент рабочего конфига.

а вот соответствующий фрагмент вывода exim -d -bh:

check set acl_m1 = ${if match{$acl_m0}{\N^RSPAMD answer: RSPAMD/(\S+) 0
EX_OK\N}{$1}{}}
                 = 1.3
check add_header = X-Rspamd-Protocol-Version: ${if eq{$acl_m1}{}{not
found}{$acl_m1}}
                 = X-Rspamd-Protocol-Version: 1.3

строки тут перенеслись, но и так видно, что при отсутствии экранирования
$1 вполне сработал.


>> 3. для не спам писем изза Action: в X-Rspamd-Report: попадал весь ответ,
>>    но в хидерах оставалась тока первая строка, остальное попадало в тело
>>    письма. Проблема оказалась в \r.
> 
> в рабочем варианте http://mta.org.ua/exim-4.70-conf/features/rspamd.m4 я
> вообще сразу удалил из ответа rspamd все \r
> 
> сегодня приведу примеры в соответствие с последними рабочими вариантами
> из конфигуратора
> 
>> 4. ответ rspamd заканчивается 2 переводами - \r\n\r\n  - в результате в
>>    конце еще добавлялся пустой хидер X-ACL-Warn:
> 
> на сколько я помню, еще одна пустая строка появилась как раз при
> переходе от версии протокола 1.1 к 1.3
> 
>> К письму прилагаю патч.
> 
> патч на configure-example-single-metric не наложился

это потому, что в патче были концы строк \r\n, а в
configure-example-single-metric - просто \n
сейчас на configure-example-single-metric наложен патч из предыдущего письма

> вечером я выложу подправленные варианты configure-example и
> configure-example-single-metric
> 
> в configure-example-single-metric перенесу изменения из
> configure-example-single-metric.diff руками, а в configure-example внесу
> последний вариант из http://mta.org.ua/exim-4.70-conf/features/rspamd.m4

скопировал в configure-example последний вариант для произвольного
количества метрик. в нем также парсятся поля Message-ID и Emails, чего
не было в более старых примерах

> полагаю, что дальше можно продолжить в листе, т. к. я уже видел
> оповещение о подписке на exim-conf на exim.org.ua

кстати, я бы таки рекомендовал использовать парсер в расчете на
несколько метрик в rspamd.xml. все равно один раз надо сделать и забыть.
а потом, если придется добавлять метрику(и) в rspamd.xml, не придется
переделывать конфиг эксима.

-- 
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