Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
Всеволод Стахов
https://rspamd.com
Часть I: Знакомство
Зачем нужен rspamd?
SpamAssassin → rspamd в “Рамблер-Почте”
Какой бывает спам
Актуальные виды
Какой бывает спам
Актуальные виды
• Мошеннические письма (scam):
Какой бывает спам
Актуальные виды
• Мошеннические письма (scam):
• “Нигерийские” письма
Какой бывает спам
Актуальные виды
• Мошеннические письма (scam):
• “Нигерийские” письма
• Фишинг (банки, соцсети)
Какой бывает спам
Актуальные виды
• Мошеннические письма (scam):
• “Нигерийские” письма
• Фишинг (банки, соцсети)
• Реклама:
Какой бывает спам
Актуальные виды
• Мошеннические письма (scam):
• “Нигерийские” письма
• Фишинг (банки, соцсети)
• Реклама:
• Традиционная текстовая
Какой бывает спам
Актуальные виды
• Мошеннические письма (scam):
• “Нигерийские” письма
• Фишинг (банки, соцсети)
• Реклама:
• Традиционная текстовая
• Картинки, сложный html и другие методы обфусикации
Какой бывает спам
Актуальные виды
• Мошеннические письма (scam):
• “Нигерийские” письма
• Фишинг (банки, соцсети)
• Реклама:
• Традиционная текстовая
• Картинки, сложный html и другие методы обфусикации
• Подделки под сообщения соцсетей
Scam: типичный пример
Реклама: примеры
Реклама: примеры
Методики борьбы
Принципы
Методики борьбы
Принципы
• Политики (особенно эффективны против Scam’a)
• DNS списки (ip адреса, URL)
• SPF, DKIM, DMARC
• Репутация отправителя
Методики борьбы
Принципы
• Политики (особенно эффективны против Scam’a)
• DNS списки (ip адреса, URL)
• SPF, DKIM, DMARC
• Репутация отправителя
• Контент фильтрация (поиск заданных паттернов
в письмах)
Методики борьбы
Принципы
• Политики (особенно эффективны против Scam’a)
• DNS списки (ip адреса, URL)
• SPF, DKIM, DMARC
• Репутация отправителя
• Контент фильтрация (поиск заданных паттернов
в письмах)
• Статистический анализ (например, bayes)
Методики борьбы
Трудности
Методики борьбы
Трудности
• Политики:
• Требуют сетевых запросов, которые могут долго выполняться
• Ложные срабатывания
Методики борьбы
Трудности
• Политики:
• Требуют сетевых запросов, которые могут долго выполняться
• Ложные срабатывания
• Контент фильтрация:
• Затратна в плане CPU
• Быстро устаревает
Методики борьбы
Трудности
• Политики:
• Требуют сетевых запросов, которые могут долго выполняться
• Ложные срабатывания
• Контент фильтрация:
• Затратна в плане CPU
• Быстро устаревает
• Статистический анализ:
• Неточен
• Сложно сканировать в многопользовательских системах
Пример работы rspamd
Особенности rspamd
Особенности rspamd
• Нормализация текста (snowball stemmer)
Особенности rspamd
• Нормализация текста (snowball stemmer)
• Конвертирование всех писем в utf-8
Особенности rspamd
• Нормализация текста (snowball stemmer)
• Конвертирование всех писем в utf-8
• Поддержка настроек пользователей
Особенности rspamd
• Нормализация текста (snowball stemmer)
• Конвертирование всех писем в utf-8
• Поддержка настроек пользователей
• Возможность создания нескольких метрик для писем
Особенности rspamd
• Нормализация текста (snowball stemmer)
• Конвертирование всех писем в utf-8
• Поддержка настроек пользователей
• Возможность создания нескольких метрик для писем
• Web интерфейс для управления
Особенности rspamd
• Нормализация текста (snowball stemmer)
• Конвертирование всех писем в utf-8
• Поддержка настроек пользователей
• Возможность создания нескольких метрик для писем
• Web интерфейс для управления
• Совместимость с правилами SpamAssassin’а
Особенности rspamd
• Нормализация текста (snowball stemmer)
• Конвертирование всех писем в utf-8
• Поддержка настроек пользователей
• Возможность создания нескольких метрик для писем
• Web интерфейс для управления
• Совместимость с правилами SpamAssassin’а
• OpenSource (BSD 2-clause)
Методы фильтрации
Политики
Методы фильтрации
Политики
• Поддержка SPF, DKIM, DMARC
Методы фильтрации
Политики
• Поддержка SPF, DKIM, DMARC
• Плагин DNSBL - работа с DNS блок-листами
Методы фильтрации
Политики
• Поддержка SPF, DKIM, DMARC
• Плагин DNSBL - работа с DNS блок-листами
• Плагин SURBL - работа с DNS листами URL
Методы фильтрации
Политики
• Поддержка SPF, DKIM, DMARC
• Плагин DNSBL - работа с DNS блок-листами
• Плагин SURBL - работа с DNS листами URL
• Плагин репутации (IP, подсети, автономной сети
и страны)
Методы фильтрации
Политики
• Поддержка SPF, DKIM, DMARC
• Плагин DNSBL - работа с DNS блок-листами
• Плагин SURBL - работа с DNS листами URL
• Плагин репутации (IP, подсети, автономной сети
и страны)
• Универсальный плагин для обработки списков
Методы фильтрации
Анализ контента
Методы фильтрации
Анализ контента
• Регулярные выражения
Методы фильтрации
Анализ контента
• Регулярные выражения
• Быстрый поиск по шаблону (trie)
Методы фильтрации
Анализ контента
• Регулярные выражения
• Быстрый поиск по шаблону (trie)
• Совместимость с существующими правилами
SpamAssassin
Методы фильтрации
Анализ контента
• Регулярные выражения
• Быстрый поиск по шаблону (trie)
• Совместимость с существующими правилами
SpamAssassin
• Специализированные плагины (maillist, one
received, chartable)
Методы фильтрации
Статистические методы
Методы фильтрации
Статистические методы
• Bayes фильтр с sqlite/mmap бэкэндами
Методы фильтрации
Статистические методы
• Bayes фильтр с sqlite/mmap бэкэндами
• Нечеткие хеши
Интеграция rspamd
milter
Интеграция rspamd
milter
• rmilter + postfix/sendmail:
Интеграция rspamd
milter
• rmilter + postfix/sendmail:
• поддерживает все возможности rspamd (например,
выборочный грейлистинг)
Интеграция rspamd
milter
• rmilter + postfix/sendmail:
• поддерживает все возможности rspamd (например,
выборочный грейлистинг)
• умеет разделять входящие и исходящие потоки почты
Интеграция rspamd
milter
• rmilter + postfix/sendmail:
• поддерживает все возможности rspamd (например,
выборочный грейлистинг)
• умеет разделять входящие и исходящие потоки почты
• умеет хранить информацию об ответах на
собственные письма
Интеграция rspamd
milter
• rmilter + postfix/sendmail:
• поддерживает все возможности rspamd (например,
выборочный грейлистинг)
• умеет разделять входящие и исходящие потоки почты
• умеет хранить информацию об ответах на
собственные письма
• дополнительные проверки: clamav, dcc
Интеграция rspamd
milter
• rmilter + postfix/sendmail:
• поддерживает все возможности rspamd (например,
выборочный грейлистинг)
• умеет разделять входящие и исходящие потоки почты
• умеет хранить информацию об ответах на
собственные письма
• дополнительные проверки: clamav, dcc
• умеет подписывать исходящие письма (DKIM)
Интеграция rspamd
Другие способы
Интеграция rspamd
Другие способы
• exim - встроенная поддержка (с версии 4.86)
Интеграция rspamd
Другие способы
• exim - встроенная поддержка (с версии 4.86)
• haraka - встроенная поддержка
Интеграция rspamd
Другие способы
• exim - встроенная поддержка (с версии 4.86)
• haraka - встроенная поддержка
• любые MTA - LDA режим, когда клиент rspamd
проверяет письмо и вызывает через pipe LDA
для доставки письма (не работает грейлистинг)
Часть II: Архитектура
Rspamd в двух словах
Rspamd в двух словах
• Написан на plain C
Rspamd в двух словах
• Написан на plain C
• Использует неблокирующую (событийную)
модель обработки данных
Rspamd в двух словах
• Написан на plain C
• Использует неблокирующую (событийную)
модель обработки данных
• Плагины и правила написанны на языке Lua
Rspamd в двух словах
Приоритеты разработки
Rspamd в двух словах
Приоритеты разработки
• Производительность и масштабируемость
Rspamd в двух словах
Приоритеты разработки
• Производительность и масштабируемость
• Качество фильтрации и расширяемость
Rspamd в двух словах
Приоритеты разработки
• Производительность и масштабируемость
• Качество фильтрации и расширяемость
• Портабельность и интеграция с MTA
Rspamd в двух словах
Приоритеты разработки
• Производительность и масштабируемость
• Качество фильтрации и расширяемость
• Портабельность и интеграция с MTA
• Безопасность
Rspamd в двух словах
Приоритеты разработки
• Производительность и масштабируемость
• Качество фильтрации и расширяемость
• Портабельность и интеграция с MTA
• Безопасность
• Простота, работа “из коробки” и документация
Событийная модель
Никогда не блокируется*
*почти никогда
Событийная модель
Никогда не блокируется*
• Плюсы:
✅ Может обрабатывать сетевые запросы независимо
✅ Посылает все сетевые запросы одновременно
✅ Обрабатывает сразу много сообщений и хорошо сканируется
*почти никогда
Событийная модель
Никогда не блокируется*
• Плюсы:
✅ Может обрабатывать сетевые запросы независимо
✅ Посылает все сетевые запросы одновременно
✅ Обрабатывает сразу много сообщений и хорошо сканируется
• Cons:
📛 Очень сложная работа с callback’ами
⛔ Сложно ограничить потребление памяти
*почти никогда
Последовательная обработка
Традиционный подход
Rule 1 Rule 2 Rule 3
DNS Hashes
Ожидание Ожидание
Обработка
Событийная модель
Подход rspamd
Rule 1 Rule 2 Rule 3
DNS Hashes
Ожидание
Обработка
Rule 1
Rule 1
Rules
DNS Hashes
Ожидание
Событийная модель
Что происходит на самом деле
Событийная модель
Несколько наблюдений
• Rspamd может генерировать множество
параллельных сетевых запросов: 

time: 5540.8ms real, 2427.4ms virtual, dns req: 120543
Событийная модель
Несколько наблюдений
• Rspamd может генерировать множество
параллельных сетевых запросов: 

time: 5540.8ms real, 2427.4ms virtual, dns req: 120543
• Для коротких сообщений (которые составляют
99% от всех сообщений) ожидание занимает в
сотни раз больше времени, чем обработка: 

time: 996.140ms real, 22.000ms virtual,
Обработка сообщения в rspamd
RulesRules
Filters
RulesRules
Pre-filters
RulesRules
Post-filters
📩 Сообщение
📬 Результат
Ожидание
Ожидание
Ожидание зависимостей
Процессы rspamd
✉
Scanning processes
Scanning processes
Scaner processes Controller
Сервисные
процессы
Main process
✉✉
HTTP
📬 ✉✉✉
Обучение
Сообщения Результаты
Статистика в rspamd
Статистика в rspamd
• Использует цепи Маркова из статистических
токенов
Статистика в rspamd
• Использует цепи Маркова из статистических
токенов
• Использует метаданные в письме 

(mime структуру, вложения, заголовки)
Статистика в rspamd
• Использует цепи Маркова из статистических
токенов
• Использует метаданные в письме 

(mime структуру, вложения, заголовки)
• Статистические данные хранятся в sqlite3
Статистика в rspamd
• Использует цепи Маркова из статистических
токенов
• Использует метаданные в письме 

(mime структуру, вложения, заголовки)
• Статистические данные хранятся в sqlite3
• Синхронизация: обучение всех серверов вместе
(есть защита от повторного обучения)
Структура токенов
Quick brown fox jumps over lazy dog
1
2
3
4
1
2
Пример работы статистики
Сложный случай - спам в картинках
Процентписем
0%
25%
50%
75%
100%
Spam Ham
8%5%
92%95%
Правильно распознано Не распознано
Нечеткие хеши
Общие данные
Нечеткие хеши
Общие данные
• Используются для поиска похожих писем
Нечеткие хеши
Общие данные
• Используются для поиска похожих писем
• Сочетают обычные хеши для вложений и
алгоритм шинглов для текста
Нечеткие хеши
Общие данные
• Используются для поиска похожих писем
• Сочетают обычные хеши для вложений и
алгоритм шинглов для текста
• Хранилище хешей - sqlite3
Нечеткие хеши
Общие данные
• Используются для поиска похожих писем
• Сочетают обычные хеши для вложений и
алгоритм шинглов для текста
• Хранилище хешей - sqlite3
• Синхронизация: обучение всех серверов вместе
(есть защита от повторного обучения)
Алгоритм шинглов
Quick brown fox jumps over lazy dog
w1 w2 w3
w2 w3 w4
w3 w4 w5
w4 w5 w6
w1 w2 w3
w2 w3 w4
w3 w4 w5
w4 w5 w6
N хешей
h1
h2
h3
h4
h1’
h2’
h3’
h4’
Алгоритм шинглов
h1 h2 h3
h1’ h2’ h3’
h1’’ h2’’ h3’’
h1’’’’’ h2’’’’ h3’’’’
…
…
…
…
…
min
min
min
min
…
N шингловN наборов хешей
Алгоритм шинглов
Алгоритм шинглов
• Однозначный вероятностный алгоритм
Алгоритм шинглов
• Однозначный вероятностный алгоритм
• В качестве хеш-функции - siphash с разными
ключами
Алгоритм шинглов
• Однозначный вероятностный алгоритм
• В качестве хеш-функции - siphash с разными
ключами
• Ключи генерируются при помощи
криптографической хеш-функции
Алгоритм шинглов
• Однозначный вероятностный алгоритм
• В качестве хеш-функции - siphash с разными
ключами
• Ключи генерируются при помощи
криптографической хеш-функции
• Размер окна - 3 слова, число хешей - 32 

(больше - медленно)
Часть III:
Производительность
Общие принципы
Общие принципы
• Думать о производительности. Всегда.
Общие принципы
• Думать о производительности. Всегда.
• Если что-то можно не делать, то не делать это
Общие принципы
• Думать о производительности. Всегда.
• Если что-то можно не делать, то не делать это
• Если есть более оптимальное частное решение
задачи, то использовать его (ассемблерные
вставки, конечные автоматы)
Общие принципы
• Думать о производительности. Всегда.
• Если что-то можно не делать, то не делать это
• Если есть более оптимальное частное решение
задачи, то использовать его (ассемблерные
вставки, конечные автоматы)
• Если можно сделать примерно, но быстро, или
очень точно, но долго, то делать быстро
Оптимизация правил
Глобальная оптимизация
Оптимизация правил
Глобальная оптимизация
• Останавливать проверки, если письмо уже набрало
порог очков
Оптимизация правил
Глобальная оптимизация
• Останавливать проверки, если письмо уже набрало
порог очков
• Обрабатывать правила с отрицательным весом в
первую очередь (для избежания ошибок второго рода)
Оптимизация правил
Глобальная оптимизация
• Останавливать проверки, если письмо уже набрало
порог очков
• Обрабатывать правила с отрицательным весом в
первую очередь (для избежания ошибок второго рода)
• Выполнять правила, которые можно выполнить
быстрее, в первую очередь:
• Учитывается среднее время выполнения, вес и
частота срабатывания
• Жадный алгоритм сортировки
Оптимизация правил
Локальные оптимизации
Оптимизация правил
Локальные оптимизации
• Каждое правило оптимизируется при помощи
абстрактного синтаксического дерева (AST):
дало прирост в 3-4 раза для больших писем
Оптимизация правил
Локальные оптимизации
• Каждое правило оптимизируется при помощи
абстрактного синтаксического дерева (AST):
дало прирост в 3-4 раза для больших писем
• Элементы в дереве упорядочиваются по
аналогичному “жадному” алгоритму
Оптимизация правил
Локальные оптимизации
• Каждое правило оптимизируется при помощи
абстрактного синтаксического дерева (AST):
дало прирост в 3-4 раза для больших писем
• Элементы в дереве упорядочиваются по
аналогичному “жадному” алгоритму
• Регулярные выражения компилируются при
помощи PCRE JIT (+100-150% скорости)
Оптимизация правил
Локальные оптимизации
• Каждое правило оптимизируется при помощи
абстрактного синтаксического дерева (AST):
дало прирост в 3-4 раза для больших писем
• Элементы в дереве упорядочиваются по
аналогичному “жадному” алгоритму
• Регулярные выражения компилируются при
помощи PCRE JIT (+100-150% скорости)
• Код на Lua компилируется LuaJIT
Оптимизации AST
Исключение лишних ветвей
&
|C
! B
A
A = 0, B = 1, C = 0
0
1
10
1
0
Порядок обработки
4/6 ветвей пропущено
Оптимизации AST
N-арные операции
>
+ 2
! B
A
Порядок обработки
C D E
Что мы сравниваем?
Here is our limit
Останавливаем обработку
Оптимизации библиотеки C
Оптимизации библиотеки C
• Собственное API для ведения логов:
• умеет работать с syslog/file/console
• фильтрует повторяющиеся сообщения и сообщения с не-
ASCII символами
Оптимизации библиотеки C
• Собственное API для ведения логов:
• умеет работать с syslog/file/console
• фильтрует повторяющиеся сообщения и сообщения с не-
ASCII символами
• Собственная реализация printf:
• работает со структурами rspamd (строки фиксированной
длины, int*_t)
• не зависит от локалей
• не пытается вычислять требуемую длину буфера
Оптимизации библиотеки C
Строковые функции
Оптимизации библиотеки C
Строковые функции
• Оптимизированные функции работы с base32/
base64:
• работа с выровненными данными;
• оптимизация циклов для 64-х битных платформ
Оптимизации библиотеки C
Строковые функции
• Оптимизированные функции работы с base32/
base64:
• работа с выровненными данными;
• оптимизация циклов для 64-х битных платформ
• Реализация приведения текста к нижнему
регистру (ASCII и UTF8 версия)
Оптимизации библиотеки C
Строковые функции
• Оптимизированные функции работы с base32/
base64:
• работа с выровненными данными;
• оптимизация циклов для 64-х битных платформ
• Реализация приведения текста к нижнему
регистру (ASCII и UTF8 версия)
• Использование строк фиксированной длины
Оптимизации библиотеки C
Оптимизации библиотеки C
• Быстрые хеш функции (xxhash и blake2)
Оптимизации библиотеки C
• Быстрые хеш функции (xxhash и blake2)
• Быстрое шифрование (ассемблерные
реализации)
Оптимизации библиотеки C
• Быстрые хеш функции (xxhash и blake2)
• Быстрое шифрование (ассемблерные
реализации)
• Выравнивание данных
Оптимизации библиотеки C
• Быстрые хеш функции (xxhash и blake2)
• Быстрое шифрование (ассемблерные
реализации)
• Выравнивание данных
• Поддержка инструментов анализа
производительности и возможность оценки
скорости работы каждого правила
Хранение IP адресов
Несжатое radix дерево
IP1 IP2
01
01
01
01
Уровень на каждый бит: 32 уровня для IPv4
128 уровней для IPv6
Хранение IP адресов
Компрессированное radix дерево
010
IP1 IP2
01
01
Часть IV: Безопасность
Основные принципы
Основные принципы
• Писать безопасный код на plain C трудно
Основные принципы
• Писать безопасный код на plain C трудно
• Основные угрозы:
• Взаимодействие с DNS
• Прослушивание трафика (шифровать надо все
данные, передаваемые по сети)
• Вредоносные сообщения
Примеры проблем
Примеры проблем
• В письме может содержаться очень много
данных для проверки в DNS (например, сотни
тысяч URL)
Примеры проблем
• В письме может содержаться очень много
данных для проверки в DNS (например, сотни
тысяч URL)
• SPF записи могут иметь бесконечную рекурсию
Примеры проблем
• В письме может содержаться очень много
данных для проверки в DNS (например, сотни
тысяч URL)
• SPF записи могут иметь бесконечную рекурсию
• Нужны лимиты на число запросов для одного
письма
Защита DNS
Защита DNS
• Криптографический генератор DNS id
Защита DNS
• Криптографический генератор DNS id
• Пул сокетов с постоянной ротацией
Защита DNS
• Криптографический генератор DNS id
• Пул сокетов с постоянной ротацией
• Рандомизация портов для запросов
Защита DNS
• Криптографический генератор DNS id
• Пул сокетов с постоянной ротацией
• Рандомизация портов для запросов
• Фильтрация входных данных (+ IDN
кодирование)
Шифрование трафика
Шифрование трафика
• Безопасность -> скорость -> простота
Шифрование трафика
• Безопасность -> скорость -> простота
• TLS сложно интегрировать в non-blocking IO
Шифрование трафика
• Безопасность -> скорость -> простота
• TLS сложно интегрировать в non-blocking IO
• TLS делает много ненужного, увеличивая CPU
load и latency
Протокол HTTPCrypt
Установление соединения
ClientHelo
ServerHelo
Certificates⚠
ClientChangeCipher
ServerChangeCipher
Data
TLS handshake
ClientPK
Encrypted request
Encrypted reply
Validation (optional)
HTTPCrypt handshake
Пропускная способность
Шифрование кэшированных соединений
Пропускная способность
Шифрование новых соединений
Пропускная способность
Шифрование новых соединений
Задержка соединения
Шифрование кэшированных соединений
Задержка соединения
Шифрование новых соединений
Анализ производительности
Почему HTTPCrypt работает быстро
Анализ производительности
Почему HTTPCrypt работает быстро
• Более быстрая асимметричная криптография
(ECDH)
Анализ производительности
Почему HTTPCrypt работает быстро
• Более быстрая асимметричная криптография
(ECDH)
• Отсутствие подписи и ее проверки 

(как требуется в TLS)
Анализ производительности
Почему HTTPCrypt работает быстро
• Более быстрая асимметричная криптография
(ECDH)
• Отсутствие подписи и ее проверки 

(как требуется в TLS)
• Шифрование без промежуточного копирования
(на месте)
Анализ применимости
Анализ применимости
• HTTPCrypt применяется для работы с клиентами
сканера
Анализ применимости
• HTTPCrypt применяется для работы с клиентами
сканера
• Есть проект JavaScript реализации для защиты Web
интерфейса
Анализ применимости
• HTTPCrypt применяется для работы с клиентами
сканера
• Есть проект JavaScript реализации для защиты Web
интерфейса
• Аналогичный метод применяется для работы с
хранилищем хешей
Анализ применимости
• HTTPCrypt применяется для работы с клиентами
сканера
• Есть проект JavaScript реализации для защиты Web
интерфейса
• Аналогичный метод применяется для работы с
хранилищем хешей
• Библиотека rdns, используемая для работы с DNS,
поддерживает DNSCurve, который позволяет
шифровать DNS запросы теми же конструкциями
Выводы
Выводы
Выводы
• Rspamd спроектирован, чтобы обеспечивать
высокую производительность
Выводы
• Rspamd спроектирован, чтобы обеспечивать
высокую производительность
• Rspamd обладает большим набором правил и
плагинов, поставляемых “из коробки”
Выводы
• Rspamd спроектирован, чтобы обеспечивать
высокую производительность
• Rspamd обладает большим набором правил и
плагинов, поставляемых “из коробки”
• Весь трафик, отправляемый rspamd по сети,
можно шифровать
Вопросы?
Всеволод Стахов
https://rspamd.com
Дополнительные
материалы
Администрирование rspamd
Основы
• Rspamd устанавливается из пакетов/портов для
большинства систем и работает “из коробки”
• Предоставляется сервис нечетких хешей,
обучаемый из honeypot’ов
• Web интерфейс для большинства повседневных
задач
Администрирование rspamd
Ручная настройка
• Секции
• Массивы
• Переменные
• Макросы
• Комментарии
section {
key = “value”;
number = 10K;
}
upstreams = [
“localhost:80”,
“example.com:8080”,
]
static_dir = “${WWWDIR}/“;
filepath = “${CURDIR}/data”;
.include “${CONFDIR}/workers.conf”
.include (glob=true,priority=2) “${CONFDIR}/conf.d/*.conf”
.lua { print(“hey!”); }
key = value; // Single line comment
/* Multiline comment
/* can also be nested */
*/
Администрирование rspamd
Компоненты конфигурации
Глобальные опции
Настройки процессов
Настройки весов
Конфигурация плагинов
Опции статистики
• Основные правила, веса и другие
настройки используются по умолчанию
после установки
• rspamd.local.conf используется для
добавления опций
• rspamd.override.conf используется для
переопределения опций
• rspamd.local.lua содержит локальные
правила на языке lua
Администрирование rspamd
Обучение
• Для обучения статистики нужно примерно
равное количество примеров спама и хама
• Обучение статистики и хешей делается сразу
для всех серверов (защита от повторного
обучения)
• Утилитой rspamadm можно выполнять слияние
баз статистики и баз хешей
Администрирование rspamd
Правила регулярных выражений
-- Outlook versions that should be excluded from summary rule
local fmo_excl_o3416 = 'X-Mailer=/^Microsoft Outlook, Build 10.0.3416$/H'
local fmo_excl_oe3790 = 'X-Mailer=/^Microsoft Outlook Express 6.00.3790.3959$/H'
-- Summary rule for forged outlook
reconf['FORGED_MUA_OUTLOOK'] = string.format('(%s | %s) & !%s & !%s & !%s',
forged_oe, forged_outlook_dollars, fmo_excl_o3416, fmo_excl_oe3790, vista_msgid)
Администрирование rspamd
Правила на Lua
rspamd_config.R_EMPTY_IMAGE = function(task)
local tp = task:get_text_parts() -- get text parts in a message
for _,p in ipairs(tp) do -- iterate over text parts array using `ipairs`
if p:is_html() then -- if the current part is html part
local hc = p:get_html() -- we get HTML context
local len = p:get_length() -- and part's length
if len < 50 then -- if we have a part that has less than 50 bytes of text
local images = hc:get_images() -- then we check for HTML images
if images then -- if there are images
for _,i in ipairs(images) do -- then iterate over images in the part
if i['height'] + i['width'] >= 400 then -- if we have a large image
return true -- add symbol
end
end
end
end
end
end
end

More Related Content

Rspamd — высокопроизводительная система фильтрации спама / Стахов Всеволод (University of Cambridge / Mimecast