приветствую

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

теперь о результатах

>>> баги сабмитит в основном один пользователь, плюс несколько анонимусов,
>>> т. е. пока rspamd скорее всего мало кем используется
>>
>> Увы, да - rspamd получился довольно сложным в развертывании, что
>> зачастую отталкивает пользователей.
> 
> на самом деле из портов FreeBSD ставится почти без проблем. правда порт
> нормальный в официальном дереве появился только второго февраля. до
> этого приходилось свой делать из тех обломков, что есть в рипозитарии
> исходников. худо-бедно, но развернуть можно было.

при установке rspamd из порта FreeBSD настройки дефолтового конфига
согласованы с дефолтовыми настройками стартового скрипта. в стартовый
скрипт добавлена переменная rspamd_flags для указания доп. параметров
демона в /etc/rc.conf

так что из коробки rspamd уже вполне юзабелен.
нужно только обучить статистический фильтр.

>>> уровень false positives и false negatives выше, чем у SpamAssassin,
>>> правда ситуация немного выравнивается после дообучения местного Bayes
>>> фильтра.
>>
>> Думаю, что статистика SA, использующая униграммы (то есть, одиночные
>> слова) намного хуже, чем статистика rspamd, которая использует алгоритм
>> OSB на окне из 5-ти слов (то есть, анализируются не только слова, но и
>> их сочетания).
> 
> в данном случае я совсем не сравнивал статистику статистических
> фильтров. в SA реализация Bayes мне нравится меньше всего.

как и ожидалось, эффективность статистического фильтра выше, чем у Bayes
фильтра SpamAssassin. больше напоминает работу DSPAM и Mailreaver из
состава CRM114. впечатления чисто субъективные, специальных
сравнительных тестов я не проводил.

>>> свои правила писать не то чтобы сложнее, скорее неудобней. само правило
>>> лежит в одном месте, его подключение и вес в другом, проверка
>>> корректности синтаксиса считает синтаксис некорректным, если
>>> правило описано, а вес не указан. и если приходится использовать
>>> несколько метрик, при этом в тестовых целях нужно одну закомментировать,
>>> то нужно в других файлах закомментировать и все правила, которые
>>> используются только в этой метрике.
>>
>> На самом деле такой подход появился в результате следования логике
>> разбиения правил в SA. Кроме того, была потребность повесить на
>> некоторое правило функцию lua (например, правило EMPTY_IMAGE в примере
>> конфигурации).
> 
> в SA свои правила можно оформлять, не разнося описания правил и
> соответствующие баллы в разные файлы. поэтому если мне нужно что-то
> отключить, я могу или файл просто убрать из соответствующего каталога,
> или закомментировать несколько подряд идущих строк.

благодаря возможности описывать привязку правил к метрикам прямо в lua
теперь можно правила полностью оформлять в отдельных файлах, не трогая
rspamd.xml. также можно в lua переопределять описание и вес правил,
описанных в rspamd.xml.

> в RSPAMD для отключения метрики мне нужно кроме правки
> /usr/local/etc/rspamd.xml еще найти все описания правил и
> закомментировать их.
> 
> спасет только генерация и rspamd.xml и инклудов для
> /usr/local/etc/rspamd/lua/rspamd.lua из предопределенных блоков. с
> помощью чего-нибудь типа m4. поэтому для меня это менее критично.

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

пока же в файл /usr/local/etc/rspamd/lua/rspamd.lua опционально
включается содержимое файла /usr/local/etc/rspamd/lua/rspamd.local.lua

а уже в файл /usr/local/etc/rspamd/lua/rspamd.local.lua можно включать
свои правила и другие файлы с правилами.

>>> для правил нет строки описания, как в SpamAssassin, т. е. в ответе
>>> демона фигурируют лишь названия правил, без весов и описания. как в этом
>>> отношении ведет себя rspamd работая по протоколу SPAMC, я не проверял,
>>> т. к. работа по протоколу SPAMC подразумевает, что контент сканер сам
>>> получает информацию об адресе клиента, HELO, адресе отправителя и адресе
>>> получателя из заголовков письма. а в случае использования протокола
>>> RSPAMC эти данные передаются демону в явном виде.
>>
>> Вообще, добавить описания к правилам - хорошая, годная, а главное -
>> легко реализуемая идея, например, сделав в описании правил атрибут
>> description:
>> <symbol weight="1.0" description="Some symbol">SYMBOL</symbol>
> 
> вполне приемлемый вариант. позволит для разных символов в разных
> метриках делать отличающиеся описания. не знаю, пригодится ли это, но
> тем не менее...

описания правил можно указывать или в rspamd.xml или в файлах lua в
/usr/local/etc/rspamd/lua/

>>> синтаксис регексповых правил отдаленно напоминает используемый в
>>> SpamAssassin, вплоть до того, что можно написать конвертор.
>>>
>>> в регекспах не работают конструкции \1, \2 и т. д.
>>> моих знаний программирования на C не хватило, чтобы понять, виноват
>>> rspamd или pcre.
>>
>> Просто для ускорения работы отключены capture group. Опять же можно
>> добавить крыжик в конфигурацию, чтобы их можно было включать.
> 
> _очень_ нужно. у меня для SA достаточно много правил строится не только
> на поиске повторений фрагментов строк в полях, но и на поиск повторений
> в комбинациях полей.

использование capture group включено

> для SA мне пришлось писать патч для проверки комбинаций полей заголовков.
> надеюсь, что для RSPAMD писать самому не придется, раз автор на связи ;-)
> 
> т. е. интересует что-то типа такого:
> 
> local MAILMAN_MSGID =
> 'From,Message-ID=/<([^\\@]+\\@[^>]+)>,<mailman\\.\\d+\\.\\d+\\.\\d+\\.\\1>$/'
> 
> т. е. интересует проверка наличия адреса из header From внутри header
> Message-ID.
> 
> запятая в качестве разделителя имен полей заголовков для примера
> приведена (в SA я использую "|"), а значения полей лучше и не запятой
> разделять. запятая опять же для примера приведена.
> 
> конечно, можно писать плагины на LUA для каждого такого случая. но тогда
> количество плагинов может быстро увеличиться до неразумого количества.

для проверки комбинаций полей заголовков можно использовать pcre в
функциях на lua. синтаксис получается более громоздким, чем при проверке
одного поля простым регекспом. но т. к. в непатченном SpamAssassin'е
такого функционала вообще нет, то особым недостатком это не является.

также в lua фукциях можно использовать родной для lua поиск по
pattern'ам. он не такой гибкий, как поиск с помощью перловых регекспов,
но для не особо сложных случаев вполне приемлем. и как и в случае
использования функций pcre, с помощью pattern'ов можно проверять
комбинации полей заголовков.

в функциях lua также можно использовать функцию rspamd_regexp.match.
годится для проверки регекспом одного поля (является полным аналогом
простых правил rspamd). преимущества использования rspamd_regexp.match в
кешировании выражений и результатов сравнения.

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

>>> плагины написаны на LUA. в принципе, синтаксис получается более
>>> компактным, чем в плагинах на Perl для SpamAssassin.
>>>
>>> в плагине check_forged_headers есть ошибки, из-за чего правило
>>> FORGED_RECIPIENTS ложно срабатывает время от времени.
>>
>> Был бы признателен за подробности: в каких случаях оно ложно срабатывает?
> 
> проблемное письмо сейчас возможно и не найду.
> 
> если в двух словах, то функция string.find(mr, sr) не всегда срабатывала
> при поиске адреса получателя из envelope RCPT в строке header To/Cc.
> было это из-за разного регистра символов или из-за симвлов пунктуации,
> присутствующих в адресе, сейчас уже не скажу.

недоработка в этом плагине исправлена, адреса сравниваются корректно

>>> я наткнулся уже на пару писем, при обработке которых возникаются
>>> проблемы при описании более одной метрики в rspamd.xml.
>>> демон пишет в сокет ответ с данными по первой метрике и начинает
>>> потреблять около 90% процессорного времени.
>>> тестирование проводилось в виртуалке, на физической машине может меньше
>>> начнет отжирать, но от этого не легче. после этого приходилось демона
>>> убивать по kill -9.
>>> пока отложил проблему в сторону, т. к. вторая метрика была создана в
>>> тестовых целях и для штатной работы пока вполне хватит одной метрики.
>>
>> Спасибо за репорт, я попробую создать такую конфигурацию.
> 
> я завтра или послезавтра выложу на mta.org.ua и пример конфигурации и
> проблемные письма.

вышеописанные проблемы также исправлены

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

Content-Transfer-Encoding: 8bit

от

Content-transfer-encoding: 8bit

также добавлена фукнция get_header_strong для получения в функциях lua
значения поля заголовка с учетом регистра символов.


для исключения из простых правил можно использовать функцию
string.format (это и раньше было).

для исключения из правил, вычисляемых с помощью фукнций lua, можно
исключение делать или внутри функции (что весьма неудобно), либо
использовать вместо локальных функций глобальные, а уже их использовать
в качестве параметров для string.format

для исключения из правил, вычисляемых с помощью плагинов, можно
использовать композитные символы. теперь их можно описывать не только в
rspamd.xml, но и в коде lua.

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

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


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

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


правил мы тоже немного добавили. так что вполне можно ставить rspamd и
пробовать.


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

_______________________________________________
Exim-users mailing list
Exim-users@mailground.net
http://mailground.net/mailman/listinfo/exim-users

Ответить