DCC (Distributed Checksum Clearinghouse)
Некоторое время назад, исследуя средства, которыми сейчас борются со спамом, я натолкнулся на DCC (Distributed Checksum Clearinghouse). Основная идея этой методики заключается в том, что на каждое, приходящее на почтовый сервер письмо, вычисляется контрольная сумма (checksum). Далее эта сумма передаётся на распределённый DCC-сервер хранения этих сумм. В ответ почтовый сервер получает данные о количестве уже существующих таких же сумм на DCC-сервере. Получив этот ответ, почтовый сервер может принять решение о дальнейшей судьбе этого письма: пропустить, отвергнуть или пометить как подозрительное.
Эта технология антиспама хорошо работает, когда есть общее распределённое хранилище сумм, и много клиентов, которые сообщают в этот сервер суммы своих писем. Спам обычно рассылается большим количеством одинаковых писем. И если несколько почтовых серверов сообщили о том, что какое-то письмо с такой контрольной суммой уже прошло большое количество раз, то наш сервер может попросту отвергнуть его, как массовую рассылку. При подсчёте контрольных сумм используется несколько параметров письма, но основные и чаще всего используемые это: Body, Fuz1 и Fuz2. Body — это контрольная сумма тела письма, а для подсчёта Fuz1 и Fuz2 используется fuzzy механизм, который позволяет игнорировать некоторые аспекты письма, которыми пользуются спамеры для усложнения обнаружения таких рассылок (hashbuster).

(статистика с сайта )
Для общения MTA с DCC-сервером используется DCC-клиент, который получает на вход письмо от почтового сервера, высчитывает контрольные суммы, передаёт их DCC-серверу, получает от него ответ, анализирует ответ и сообщает MTA как поступить с письмом. DCC-клиент чаще всего устанавливается непосредственно на почтовый сервер, а DCC-сервер чаще всего удалённый. Давайте попробуем установить DCC и настроить его для разных типов работы.
Взять DCC можно на сайте и собрать так, как описано в . В результате вы получите набор всех необходимых компонент для работы DCC в разных вариантах:
1. Если у вас не большой поток сообщений (меньше 100,000 писем в сутки), то самый простой для вас вариант — это когда вы выступаете как DCC-клиент и используете публичные DCC-серверы. Для такой работы уже почти всё готово сразу после установки. Нужно только немного изменить конфигурацию и проверить, что у вас открыт к публичным DCC серверам. Включаем в конфигурационном файле dcc_conf нужный DCC-клиент (=on [для sendmail] или =on [для остальных программ]) и настраиваем пороги, после которых DCC-клиент будет отвергать сообщения (DCCM_REJECT_AT) или записывать их в log-директорию, для последующего анализа (DCCM_LOG_AT). И запускаем DCC-клиент: $ libexec/rcDCC start
Для управления и настройки работы DCC-клиента используется: . Спросив: $ cdcc «info», можно получить информацию о доступных сейчас DCC-серверах и вашем активном DCC-сервере, к которому вы подключены. А вот так: $ cdcc «status all» посмотреть статистику работы DCC-серверов. Файл map.txt содержит начальный список публичных DCC-серверов, который инициализируется при установке DCC. Этот список можно поменять через cdcc или изменить map.txt и загрузить его: $ cdcc «load -» < map.txt
На этом всё. Осталось ваш MTA научить общаться с DCC-клиентом и процесс пойдёт. Описание подключения к sendmail, smtpd, Exim, SpamAssassin, CGP, zmailer и некоторым другим фильтрам можно найти в на сайте авторов.
2. Если у вас нагруженная почтовая система (больше 100,000 писем в сутки), то рекомендуется поднять у себя локальный DCC-сервер и подключить его к распределённой сети DCC-серверов. В таком подходе есть несколько плюсов:
- вы экономите на времени ответа от DCC-сервера — локальный сервер отвечает быстрее;
- вы экономите на трафике — трафик между DCC-клиентом и DCC-сервером больше, чем обмен суммами между DCC-серверами;
- ваши запросы не нагружают публичные сервера;
- для бОльшей надёжности и распределения нагрузки, вы можете поднять несколько локальных DCC-серверов и объединить их в сеть.
Для старта DCC-сервера нужно в dcc_conf включить: DCCD_ENABLE=on, настроить его уникальный id в сети серверов SRVR_ID=, произвольное имя вашего сервера BRAND=, запустить сервер $ libexec/rcDCC start, и не забыть добавить в cron: libexec/cron-dccd, для периодической чистки базы DCC-сервера (1 раз в день). В файл ids добавить список ваших DCC-серверов и их клиентов (id и пароли), а в файле flod перечислить все ваши DCC-сервера (если у вас их несколько), для обмена контрольными суммами между ними. В настройках ваших DCC-клиентов надо указать адреса ваших DCC-серверов. Это можно сделать или через cddc или изменить map.txt и загрузить его: $ cdcc «load -» < map.txt
Тонким моментом начальной настройки этой системы является опасность заблокировать валидные системы массовой рассылки. Для предотвращения этого рекомендуется на начальном этапе настроить только DCCM_LOG_AT с достаточно большим порогом (оставив DCCM_REJECT_AT пустым) и просматривать в директории log, какие именно сообщения были бы заблокированы с таким порогом. Если проблем нет, то значение этого порога можно перенести в DCCM_REJECT_AT, а значение DCCM_LOG_AT понизить и продолжить анализировать папку log. Такими итерациями можно подобрать оптимальный порог для вашей системы, когда ложных срабатываний будет минимум.
Известные системы массовых рассылок или ваши системы, которые рассылают большое количество одинаковых сообщений, рекомендуется занести в whitelist'ы. whitelist'ы бывают как серверные, так и клиентские. Рекомендуется использовать клиентские, это позволит сэкономить на обращении к DCC-серверу, DCC-клиент не будет сообщать такие суммы на сервер, а будет сразу пропускать письмо.
DCC Greylists
В существующей системе DCC так же реализован механизм greylisting. Для использования механизма greylist, поднятие локального greylist-сервера обязательно, так как это будет исключительно ваш greylist. Для его работы надо: включить в dcc_conf GREY_ENABLE=on, рекомендуется использовать GREY_DCCD_ARGS=-Gweak-IP. Внести в файл ids список ваших greylist-серверов (id и пароли), а в файле grey_flod перечислить все ваши greylist-сервера (если у вас их несколько), для обмена контрольными суммами между ними. Запустить сервер $ libexec/rcDCC start. В настроки DCC-клиента нужно добавить список ваших Greylist-серверов. Это можно сделать или через cddc или изменить map.txt и загрузить его: $ cdcc «load -» < map.txt
Более подробное описание как работает DCC greylisting есть на .









Оставить комментарий