GetInfo.Ru – Компьютерная библиотека
Последние поступления
Как выбрать систему управления базы данных
Базы данных03/09/14
Этапы загрузки UNIX (в схеме)
Unix27/03/12
Gatewall Antispam: тотальный контроль электронной почты
Спам21/04/11
Мастер-класс: создаем Интернет-магазин (Часть 1)
Обзоры ПО20/04/11
CorelDRAW Graphics Suite X5: Что нового?
Обзоры ПО20/07/10
Добавить статью
Самые читаемые материалы
Базовая настройка SQUID(113844)
Простая и эффективная система подсчета трафика в ОС FreeBSD(50677)
Совместное использование прозрачного прокси-сервера (Squid) и биллинговой системы UTM(40477)
Настройка Squid(37584)
Настройка VPN и NetUP Radius сервера(35294)
Всего статей: 793Всего авторов: 364Подразделов: 47Добавлено за сутки: 0
Статьи  СТАТЬИ Форум  ФОРУМ Рейтинг  РЕЙТИНГ Поиск  ПОИСК Контакты  КОНТАКТЫ
» Главная » Unix » Антиспамовый фильтр (Sendmail + DrWeb + SpamAssassin)

Антиспамовый фильтр (Sendmail + DrWeb + SpamAssassin)


Сергей Тараненко
setar@trinity.spb.ru
http://www.trinity.spb.ru

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

Пред история - в нашей конторе стоит почтовый сервер который работает примерно на 20 пользователей. На реальных юзеров сыплется почта с большого количества доменов. Последнее время из почтовых ящиков каждое утро стало выгребаться 200-300 спамовых писем, причем это как direct spam по БД так и тупой спам по ящикам типа info@домен , sales@домен и т.д.

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

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

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

  • Службы фильтрации, как правило платные, когда вы почту офиса заворачиваете на определённый адрес, а на ваш почтовик приходит уже "чистая" почта. Этот метод я отмёл как слишком простой и неконтролируемый

  • Входные фильтры основаные на анализе ip адреса передающего хоста и использования общих баз данных ip спамеров (DNSBL). Практически малоэффективный способ борьбы с современными методами спама, в данный момент эту функцию sendmail я отключил вовсе.

  • фильтрация на основе постоянного пополнения access листа адресами спамеров. Использует встречный анализ подозрительности отправляющего хоста ( win|linux ; есть трояны| нет их ; уровень домена, наличие в имени домена ppp dialup и т.д.). Пробовал применять. требуется постоянный контроль, тонкая правка ручками регулярных выражений и коэффициентов подозрительности. Но самое плохое то что первое письмо от спамера этот фильтр пропускает по любому (т.к. работает на анализе лога), что делает его работу малоэффективной.

  • фильтрация по заголовкам писем с использованием очень продвинутого конфига sendmail. Хорошая статья по этому поводу http://www.anrb.ru/linux/regex.html Использовал но получил много нареканий от коллег по сбоям в работе фильтра. Требуется тонкая и вдумчивая подгонка регулярных выражений.

  • И наконец то решение на котором я остановиля - это применение внешних программ для анализа содержимого письма. Программы проверки (их может быть несколько) сидят обычными демонами и принимают информацию от sendmail по механизму milter, возвращая в почтовик свою оценку и рекомендацию к дальнейшему действию. По такому же принципу работает DrWeb Mail filter, его я тоже применяю для защиты от вирусов, почтовых бомб, и почтовых червей. Программу для защиты от спама я использовал spamassassin http://www.spamassassin.org Она имеет развутую систему контекстного лингвистического анализа, систему обучения и самообучения. Кроме того она может работать совместно с другими программами анализа.

Теперь собственно по прикручиванию spamassassin к sendmail.

Настройка Sendmail для работы с поддержкой milter

Здесь всё крайне просто: качаем последний дистрибут с www.sendmail.org распаковываем его, создаём в дистрибуте файл devtools/Site/site.config.m4 с содержимым:

APPENDDEF(`conf_sendmail_ENVDEF', `-DMILTER') 
APPENDDEF(`confENVDEF',`-DMAP_REGEX') 

первая строка включает механизм milter вторая позволяет использовать регулярные выражения в конфиге

Далее компилируем и инсталируем сам sendmail

#./Build && make all && make install 

Для RedHat я подправил скрипт запуска (что то в оригинальном мне не понравилось) вот он , только проверте пути.

Файл конфигурации cf/cf/sendmail.mc (нужно создать) лежит здесь, объяснять все опции здесь я не буду, скажу лишь что подходит он для большинства офисных почтовиков фактически без изменений. Уникальными и нестандартными здесь лишь расположение файла aliases (он вынесен в /etc/mail/), и изменённые названия директорий спулов (QUEUE_DIR и MSP_QUEUE_DIR) эти строчки можно просто закоментировать.

После пересборки конфига требуется перезапуск sendmail (проверяйте пути):

cd /usr/src/sendmail-8.12.10/cf/cf 
rm -f sendmail.cf 
make sendmail.cf 
mv ./sendmail.cf /etc/mail/sendmail.cf 
/etc/init.d/sendmail restart

Настройка DrWeb для работы по механизму milter

Последняя версия DrWeb под linux закачивается с сайта http://drweb.ru/unix/ от туда же загружается milter для sendmail (пакет drweb-sendmail-4.30-linux.tar.gz). Сам drweb настраивается стандартным образом, обращаем внимание на то чтобы демон висел на 3000 порту:
drweb32.ini

SocketMode = TCP 
DaemonPort = 3000 

Далее настраиваем антивирусный milter (drweb_smf), который из себя представляет демона, который с одной стороны проверяет содержимое у drwebd с другой стороны выдаёт рекомендации почтовику. я использую такие настройки drweb_smf.conf (я оставил только важные опции остальные по смыслу):

[DaemonCommunication] 
Address = inet:3000@localhost 
[Scanning] 
SpamFilter = on 
[Mailer] 
MailSystem = Sendmail 
Sendmail = /usr/sbin/sendmail 
MilterAddress = inet:3001@localhost 

кстати опция SpamFilter = on позволяет зарезать почтовых червей по заголовку письма :)
Как видим сам milter занимает 3001 tcp порт что и указывается при подключении в конфиге sendmail.

Разумным решением является запуск демона drweb и его milter`а (drwebd и drweb-smf) из одного стартового скрита что я и реализовал в этом файле.

Установка spamassassin

Поскольку рускоязычных материалов по установке spamassassin я не нашёл описываю этот процесс:

Закачиваем последний дистрибутив с http://spamassassin.rediris.es/downloads.html далее распаковываем архив:

#tar -xvzf ./Mail-SpamAssassin-2.60.tar.gz 

Добавляем перловый модуль для spamassassin:

        perl -MCPAN -e shell                    [as root] 
        o conf prerequisites_policy ask 
        install Mail::SpamAssassin 
        quit 

первоя строка запустит оболочку, последующие дадут команду обновить модуль (онлайн)

Далее пытаемся откомпилировать дистрибутив

#perl Makefile.PL 

Скорее всего получаем кучу ошибок о отсутствующих модулях Perl Вообще требуемые модули перечислены в INSTALL

Все перл модули добавляются в систему либо вышеописаным способом, либо качаются с http://search.cpan.org/ (там в поиске вводится название модуля например HTML::Parser) дале каждый модуль собирается и инсталируется в систему:

#perl Makefile.PL && make test && make install 

после установки всех модулей и компилируем и инсталируем саму программу spamassassin:

#perl Makefile.PL && make all && make install 

Установка spamassassin milter

Его дистрибутив я нашёл на стороннем сайте http://savannah.nongnu.org/projects/spamass-milt ( если ссылка не работает можно взять здесь)

качаем его и устанавливаем, там всё просто

#tar -xvzf ./spamass-milter-0.2.0 
#cd spamass-milter-0.2.0 
#./configure ; make ; make install 

Конфигурация и запуск spamassassin daemon + spammass-milter

Мой файл конфигурации лежит здесь, по умолчанию расположен в директории /etc/mail/spamassassin. Документация по нему (англоязычная) есть здесь.

Базы данных Баеса (результат обучения системы) я вынес в тот же каталог по умолчанию они лежат в ~/spamassassin

Самым сложным было понять как всё это запускается. Переворошив документацию я написал стартовый скрипт
Строка запуска милтера (/usr/local/sbin/spamass-milter -f -p /var/run/spamass-milter -b setar@trinity.spb.ru -r 10) содержит параметры:

  • -f запустить в фоне
  • -b мыло куда пересылаем письма распознаные как спам, к оригинальному реципиенту письма не доходят. Чтобы они доходили и одновременно дублировались на ответственного ставится опция -B
  • -r 10 самая интересная опция уровень баллов для режекта письма рекомендую в процессе обучения этот параметр не ставить вовсе.

Обучение системы

Вообще система начинает действовать сразу с заранее предустановленными параметрами и вылавливает спам с вероятностью 60-70% для того чтобы эту вероятность увеличить необходимо систему обучить - скормить ей более 200 писем с примерами "белых писем" ( ham ) и более 200 спамовых писем ( spam ).

Любое письмо после запуска системы получает в заголовок дополнительную информацию по анализу его на предмет спама:
(пример злобного спама, уровень признания письма как спам 5.0 )

X-Spam-Flag: YES 
X-Spam-Status: Yes, hits=22.0 required=5.0 tests=BAYES_99,FORGED_MUA_OUTLOOK, 
        FORGED_OUTLOOK_HTML,FROM_ILLEGAL_CHARS,HTML_FONTCOLOR_RED, 
        HTML_FONTCOLOR_UNKNOWN,HTML_FONT_BIG,HTML_MESSAGE,MIME_HTML_ONLY, 
        SUBJ_HAS_SPACES,SUBJ_ILLEGAL_CHARS autolearn=no version=2.60 
X-Spam-Orig-To:  
X-Spam-Report: 
        *  4.1 SUBJ_HAS_SPACES Subject contains lots of white space 
        *  0.1 HTML_FONTCOLOR_RED BODY: HTML font color is red 
        *  5.4 BAYES_99 BODY: Bayesian spam probability is 99 to 100% 
        *      [score: 1.0000] 
        *  0.1 HTML_FONTCOLOR_UNKNOWN BODY: HTML font color is unknown to us 
        *  0.3 MIME_HTML_ONLY BODY: Message only has text/html MIME parts 
        *  0.1 HTML_MESSAGE BODY: HTML included in message 
        *  0.3 HTML_FONT_BIG BODY: HTML has a big font 
        *  3.9 SUBJ_ILLEGAL_CHARS Subject contains too many raw illegal characters 
        *  4.1 FROM_ILLEGAL_CHARS From contains too many raw illegal characters 
        *  2.6 FORGED_MUA_OUTLOOK Forged mail pretending to be from MS Outlook 
        *  1.0 FORGED_OUTLOOK_HTML Outlook can't send HTML message only 
X-Spam-Level: ********************* 
X-Spam-Checker-Version: SpamAssassin 2.60 (1.212-2003-09-23-exp) on 
        gw.trinity.spb.ru

Оценка BAYES появляется после полного обучения системы.

Теперь как учить - в комплекте есть программа sa-learn ей нужно скормить каталог с письмами ham и spam сами письма нужно иметь в немодивицированном виде (без forward`а и прочих почтовых пересылок перенаправлений) я их получал прямым экспортом из программы TheBat в формат .MSG для удобства завёл специальные папочки в которых скидывал примеры писем, а в конце дня делал экспорт на сервер.

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

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

Обучение до включения в работу системы Баеса у меня заняло 4 дня.

Фуххх вроде всё. будут вопросы - пишите помогу.

Свежую версию статьи всегда можно найти на сайте Тринити: www.3nity.ru

 
31.01.2004
Версия для печати Версия для печати Запомнить ссылку Запомнить ссылку
Ваша оценка:  1   2   3   4   5     

 О проектеПерепечаткаАвторамПартнерыО нас пишут
Наверх
©2003—2007. GETINFO.RU. ВСЕ ПРАВА ЗАЩИЩЕНЫ.