SpamAssassin — эффективное средство против спама

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

В информационной структуре современного предприятия электронная почта является одним из самых важных средств коммуникаций. Однако в последнее время ее использование серьезно затруднено из-за массового засилья спама. Разнообразные методы борьбы с этим побочным продуктом информатизации — всевозможные «черные списки» серверов беспорядочной ретрансляции (Open Relay), открытые почтовые прокси-серверы, файлы доступа (access-lists) используемые в Sendmail и Postfix, — оказались малоэффективными. Бесполезна и такая функция почтовых серверов, как фильтрация сообщений по содержанию заголовков, которая действует лишь до появления нового почтового вируса или же модификации старого.

Еще одно вредоносное детище современных технологий — почтовые «черви». Иногда случаются целые эпидемии в рамках одной организации, виновниками которых зачастую становятся сами пользователи, открывающие опасные вложения ради интереса. Всему этому должны были положить конец антивирусы-спамблокеры, которые в огромном количестве представлены на современном рынке ПО. Однако при использовании таких продуктов IT-специалисты сталкиваются с проблемами децентрализации — надо установить и обновить антивирусное ПО на всех компьютерах компании. Существуют, правда, серверные варианты данного ПО. Но и у них есть свои недостатки — низкий уровень эвристических анализаторов современных антивирусных программ делает их абсолютно беспомощными перед новыми видами почтовых «червей», а необходимость постоянного обновления ПО создает дополнительную нагрузку на интернет-канал. Кроме того, высокая стоимость корпоративных лицензий делает эти программы практически недоступными для малых и средних предприятий.
Фильтрация спама основана на взаимодействии ключевых компонентов — оценочного демона, транспортного агента и базы шаблонов писем

И все-таки есть эффективное средство против спама, которое называется SpamAssassin. Это система фильтрации почтовых сообщений, написанная в рамках Apache Foundation и распространяемая свободно. Для определения принадлежности к спаму она использует несколько методов. Традиционные «Черные списки адресов» дополнены системой оценки содержимого. Теперь при совпадении определенной части письма условию, описанному в файле конфигурации (к примеру, тело сообщения закодировано в html), письму начисляется определенное количество баллов. По прохождении полной проверки баллы суммируются. Если эта сумма равна заданному количеству баллов или же превышают пороговое значение, сообщение считается спамом. В принципе, вышеописанный механизм ничем не отличается от используемого в аналогичных продуктах, однако у SpamAssassin есть одно преимущество, выгодно отличающее его от других. Речь идет о способности к эффективному самообучению благодаря использованию в системе Bayesian-спам-анализатора. По оценкам специалистов, сегодня он является наиболее эффективным средством борьбы со спамом.
Perl-ына борцов со спамом

Программа написана примущественно на Perl. Получить исходники можно на http://spamassassin.apache.org/. Для установки понадобятся дополнительные Perl-модули – Net::SMTP, Digest::SHA1, HTML::Parser, Net::DNS, Mail::SPF::Query, IP::Country, Razor2, Net::Ident, IO::Socket::INET6, IO::Socket::SSL, DBI, LWP::UserAgent, HTTP::Date, Archive::Tar, IO::Zlib, Archive::Tar, – которые можно получить с помощью следующих команд:

$ perl -MCPAN -e shell
cpan> o conf prerequisites_policy ask
cpan> install Module::Name
cpan> quit

Также можно воспользоваться системой установки пакетов своей операционной системы. Пользователям FreeBSD 5.4, желающим установить SpamAssassin из портов, настоятельно рекомендуется обновить систему портов по причине несовместимости spamass-milter (о котором речь пойдет дальше) со стандартным системным компилятором.
Специально для борьбы со спамом компанией Zyxel и Лабораторией Касперского разработан программно-аппаратный комплекс

Также необходим BerkleyDB не ниже 4-й версии, или же, как вариант, MySQL, для хранения в базе данных образцов спам-сообщений и «благонадежных» писем. Сборка программы производится посредством команд perl Makefile.PL, make и make install в каталоге с исходными текстами. При выполнении первой из них программа попросит ввести почтовый ящик, на который будут отсылаться подозреваемые в спаме сообщения. Для этой цели лучше всего создать отдельный ящик, к примеру, что-то вроде spam@yourdomain. Такая возможность предоставляется только на этапе сборки, и впоследствии изменить данный параметр невозможно.

После сборки пользователю становятся доступными следующие программы:

* spamassasin, пользовательский агент;
* spamd, «демонизированный» (именно так его назвали сами разработчики) вариант spamassasin;
* spamc, клиент, с помощью которого можно отдавать команды демону spamd;
* sa-learn, программа обучения Bayesian-анализатора.

По умолчанию spamd запускается с root-привилегиями, тем самым создавая определенную угрозу безопасности системы. Естественно, лучше всего создать отдельного пользователя, к примеру spamd, принадлежащего к одноименной группе, и запускать демон с его правами (для этих целей используется ключ -u имя_пользователя).
Снаряжение спам-убийцы

Конфигурационный файл программы достаточно понятен и легок в освоении. Хотя опций в нем много, нет смысла использовать их все по той причине, что большинство из них относится к оценочному механизму, который полезен на начальном этапе использования программы. В это время Bayesian-анализатор еще не совсем готов к полноценной работе в силу того, что в его базе знаний еще недостаточно информации о спаме и «благонадежных» письмах. Однако после непродолжительного процесса обучения Bayesian-анализ становится основным механизмом определения, что делает оценочную систему второстепенной в процессе принятия решений. Приведем пример рабочего файла конфигурации:

rewrite_header Subject *****SPAM*****
use_bayes 1
bayes_auto_learn 1
bayes_path /etc/mail/spamassassin/bayes/bayes
lock_method flock
bayes_min_spam_num 50
bayes_min_ham_num 50
bayes_ignore_header X-Spam-Flag
bayes_ignore_header X-Spam-Status

required_score 15.0
score HTTP_USERNAME_USED 9.99
score FAKE_HELO 9.99
score FORGED_RCVD 9.99
score UNWANTED_LANGUAGE_BODY 1.02
score MLM 5.55
score RCVD_NUMERIC_HELO 4.95
ok_locales ru en

Директивы конфигурационного файла можно размещать в произвольном порядке. В приведенном примере они отсортированы и разбиты на две части исключительно для удобства чтения листинга. Из названия понятно, что директива rewrite_header предназначена для переписывания заголовка письма. В качестве ее аргументов могут использоваться параметры from, to или subject (соответственно, именно эти поля заголовка будут замещены) и произвольная текстовая строка.

В примере поле subject подозрительного письма будет перезаписано строкой «*****SPAM*****». Директива use_bayes отвечает за включение подсистемы анализа Bayesian и может принимать значение 1 или 0 соответственно. Следующая за ней директива bayes_path, задает путь к базе данных, в которой будут хранится образцы писем. Стоит обратить внимание на то, что это путь не к каталогу а именно абсолютный путь к файлу базы данных. К примеру, после задания параметра bayes_path /etc/mail/spamassassin/bayes/bayes, в каталоге /etc/mail/spamassassin/bayes будут созданы файлы с названиями bayes_prefix, соответствующие _prefix’ы файлов программа добавит сама.

Если же значение изменится на /etc/mail/spamassassin/bayes/learndb, то в вышеописанном каталоге будут созданы файлы с названиями learndb_prefix. Директивой lock_method задается способ блокировки БД: значением могут быть nfssafe – блокировка, используемая NFS, flock – стандартная UNIX-блокировка или Win32 – Windows-блокировка соответственно. Директивы bayes_min_spam_num и bayes_min_ham_num, параметрами которых являются числа, задает пороговое значение количества изученных спам сообщений и благонадежных писем (называемых разработчиками системы ham) соответственно. При его достижении включается Bayesian анализатор для классификации писем системой SpamAssassin. По умолчанию эти значения установлены в 200 писем и являются слишком уж высокими для серверов с малой нагрузкой, однако на почтовых серверах средней нагрузки (50–60 клиентов) такое количество спама можно получить и обработать в течении двух-трех дней. Директивы bayes_ignore_header X-Spam-Flag и bayes_ignore_header X-Spam-Status, заставляют Bayesian анализатор игнорировать заголовки X-Spam-Flag и X-Spam-Status, автоматически добавляемые программой SpamAssassin к сообщениям, которые после прохождения всех тестов считаются спамом.
Диаграмма распределения спам-сообщений по тематикам

Оставшиеся директивы конфигурационного файла предназначены для оценочной подсистемы. Директивой required_score 10.0 устанавливается максимальное количество баллов, при котором сообщение считается спамом. Следующие за ней директивы описывают способы, которые используются спаммерамы для форматирования сообщения, и количество баллов, которое начисляется, если во время проверки письма, какая то его часть будет отформатирована подобным способом. К примеру правило score HTTP_USERNAME_USED 9.99 описывает формат заголовка, при котором имя пользователя закодировано в HTML и в случае совпадения с данным правилом начисляет сообщению 9.99 баллов. Директива FAKE_HELO предназначена для проверки на соответствие сеанса SMTP протоколу.

В целом данный механизм очень похож на работу традиционных брандмауэров, когда пакет, проходящий по цепочке правил, сравнивается с каждым из них на соответствие. Вот еще одна причина, по которой не стоит слишком усложнять конфигурацию – при большом количестве правил на достаточно нагруженном сервере производительность может серьезно снизиться. Все средства, относящиеся к оценочной системе, после сборки программы размещаются в каталоге /usr/local/share/spamassassin для FreeBSD и /usr/share/spamassasin для Linux, в виде текстовых файлов. Их можно свободно просмотреть и выбрать то, что необходимо именно вам.

Директива ok_locales используется для установки приемлемых языков сообщений. Так если через ваш сервер проходит много спама на иностранных языках, можно установить значение директивы ok_locales в ru и en, тогда все сообщения, несоответствующие данному критерию, будут считаться спамом. Так же SpamAssassin позволяет использовать черные и белые списки доменов, почтовых и ip-адресов, однако, как уже писалось выше, эти средства являются базовыми. Кроме того использование черных списков в SpamAssassin не избавляет администратора от необходимости задействования их на почтовом сервере.
Проверка спама в транзитной почте

Однако сам по себе SpamAssassin не производит никаких действий по фильтрации, он всего лишь помечает сообщение как спам, перекладывая эту функцию на ПО сторонней разработки. Поэтому в Sendmail необходимо задействовать штатный механизм milter (milter – mail filter). Проверить собран ли Sendmail с поддержкой milter можно с помощью комманды echo a | sendmail -d | grep MILTER. Результатом ее выполнения должна быть примерно следующая строка:

Compiled with: DNSMAP LOG MAP_REGEX MATCHGECOS MILTER MIME7TO8 MIME8TO7.

В противном случае необходимо пересобрать Sendmail с опцией APPENDDEF(`conf_sendmail_ENVDEF’, `-DMILTER’).

Также необходимо собрать spamass-milter, исходники которого можно получить по адресу savannah.gnu.org/projects/spamass-milt. Для автоматического запуска фильтра используйте скрипт запуска программы (его можно найти в подкаталоге contrib каталога с исходниками spamass-milter). Во время запуска фильтр создает сокет /var/run/spamass.sock, с помощью которого и происходит взаимодействие с Sendmail. После всех вышеописанных манипуляций единственное что осталось сделать – это добавить в .mc файл строки:

INPUT_MAIL_FILTER(`spamassassin’, `S=local:/var/run/sendmail/spamass.sock, F=, T=C:15m;S:4m;R:4m;E:10m’)dnl
define(`confMILTER_MACROS_CONNECT’,`t, b, j, _, {daemon_name}, {if_name}, {if_addr}’)dnl
define(`confMILTER_MACROS_HELO’,`s, {tls_version}, {cipher}, {cipher_bits}, {cert_subject}, {cer
t_issuer}’)dnl

и перестроить файл конфигурации Sendmail. Для регистрации событий и ошибок, spamd и spamass-milter используют log-файл почтового сервера.

В отличии от Sendmail, Postfix не нуждается ни в каких модулях сторонних разработчиков — в этой системе используется связка spamd/spamc. Схема работы этой связки такова, что к деймону spamd подключается клиент spamc, на вход которому подаются все письма, а с выхода они забираются уже отфильтрованными. Для реализации данной схемы необходимо в файле master.cf почтовой системы Postfix создать следующий фильтр:

smtp inet n – n – 50 smtpd
-o content_filter=spam:dummy
spam unix — n n — - pipe
flags=R user=spamd argv=/usr/local/bin/spamc -u spamd -e /usr/sbin/sendmail -t

Следует заметить, что путь к spamc для Linux отличается от пути для аналогичного файла в FreeBSD (для Linux — /usr/bin/spamc).
Главное, чтобы SpamAssassin хорошо учился!

В состав Spamassassin входит также утилита sa-learn. Данная программа необходима для инициализации базы данных и обучения системы. Сразу после установки SpamAssassin автоматически создает базу данных согласно стандартному пути, указанному в его файле конфигурации, однако если этот параметр будет вами изменен, ее необходимо будет вручную инициализировать с помощью команды sa-learn —sync. Командой sa-learn —import производится импортирование баз данных, созданных более ранней версией программы.

Для обучения sa-learn используется с параметром —spam для спама, или —ham для образцов благонадежных писем и указанием пути к почтовому ящику, из которого будет производится чтение. К примеру, если путь к ящику со спамом /var/mail/spam, необходимо использовать комманду sa-learn —spam /var/mail/spam. Формат почтового ящика, который может быть или файлом, в котором размещаются сообщения, или же каталогом. В предыдущих версиях программы для проверки почтовых ящиков разных форматов использовались разные параметры (—file и —dir соответственно), но в версиях, начиная с 3.01 необходимость в них отпала и теперь необходимо указать лишь соответствующий путь, однако параметры —file и —dir были сохранены разработчиками для обратной совместимости.

Что касается формата сообщений, помещаемых в ящики spam и ham, то они не должны быть модифицированными, то есть иметь заголовки Re и/или Fwd. Для автоматизации процесса обучения программы можно использовать деймон cron или же periodic-систему для тех ОС, в которых она реализована.

В процессе функционирования программы было замечено, что сразу после установки, программа безошибочно определяла 80-85%p спама из всей корреспонденции. Далее, после того как начал функционировать, Bayesian анализатор, это число возросло до 95-97%p и лишь в очень редких случаях как спам отмечались письма, которые не являлись таковыми. Так что на первых порах систему все таки стоит контролировать проверяя лично содержание почтового ящика spam.

Кроме того, система безошибочно определяла и фильтровала почтовые сообщения, содержащие вирусы, даже несмотря на то, что некоторые из них не определялись антивирусом, установленном на том же сервере. В завершении стоит отметить, что польза от использования данного ПО несоизмерима со временем (для полного развертывания на почтовом сервере понадобиться всего лишь 3 часа времени), на установку и первоначальное обслуживание всей системы.

Добавить комментарий

всё о почтовых и курьерских услугах