LinuxBegin.ru - offline-версия от 26.04.2004
Главная | Все темы | Все статьи | Ссылки | Аналоги Windows-программ в Linux | Top 20

Антиспамовый фильтр (Sendmail + DrWeb + SpamAssassin)
(Серверное ПО, маршрутизация, samba, ...)


- Сергей Тараненко, 30.10.2003, Opennet.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 я подправил скрипт запуска (что то в оригинальном мне не
понравилось) http://www.3nity.ru/files/antispam/sendmail вот он, только 
проверте пути.

Файл конфигурации cf/cf/sendmail.mc (нужно создать)
http://www.3nity.spb.ru/files/antispam/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) из одного стартового скрита что я и реализовал в
http://www.3nity.ru/files/antispam/drweb этом файле 



Установка 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[/color]



Установка 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
-----------------------------------------------------------

Мой файл конфигурации http://www.3nity.ru/files/antispam/local.cf , по
умолчанию расположен в директории /etc/mail/spamassassin. Документация
по нему (англоязычная) есть http://www.spamassassin.org/doc/Mail_SpamAssassin_Conf.html

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

Самым сложным было понять как всё это запускается. 

Переворошив документацию я написал (http://www.3nity.ru/files/antispam/spam_filter) стартовый скрипт
Строка запуска милтера (/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: <info@trinity.spb.ru>
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**** и оценочное
содержимое заголовка, система их просто игнорирует.

Для автоматизации процесса обучения я написал
(http://www.3nity.ru/files/antispam/learn) маленький скриптик
который забирает файлы сообщений с файлового сервера по ftp и
скармливает их обучалке.

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

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

P.S. Постоянный адрес статьи в сети http://www.3nity.ru/viewtopic.htm?t=1459

Просмотров: 1863  |  Рейтинг статьи: 4.6 (Голосов: 5).
4.6
Дата размещения статьи: 2003-11-04 13:36:10



5 последних поступлений в раздел Серверное ПО, маршрутизация, samba, ...:

26.02.04: Настройка сервера SSH (теория и практика) (Начнем, как обычно, с теории. SSH предоставляет 3 способа аутентификации клиента: по ip адресу клиент...)
26.02.04: Бекап файловой системы Linux-сервера с помощью rsync. (rsync работает только при установке его на обоих серверах - A и B. Для начала нужно определиться, что...)
05.02.04: Инструкции по настройке аутентификации с помощью LDAP (Любая операционная система, производящая аутентификацию наподобие UNIX, нуждается в хранении такого ж...)
02.02.04: Настройка принт-сервера на базе FreeBSD (Имеем: Компьютер P-75, 16MB RAM, HDD мин. треб, 2 lpt порта (2-й порт появился путем добавления isa м...)
22.01.04: Настройка vsftpd. (Я думаю, каждый понимает о необходимости ftp сервера. И меня не миновало :). Свой выбор я остановил н...)

Комментарии:

LinuxBegin.ru © 2003-2004 Valery V. Kachurov | Условия использования материалов | О проекте