ДЕНИС ГОРОДЕЦКИЙ
Kaspersky Anti-Spam 2.0 + Sendmail
Ответив на простой вопрос: «Сколько ненужных писем было удалено из почтового ящика?», вы легко можете рассчитать, какие объемы занимает трафик, создаваемый ненужной почтой. Спамеры забрасывают нас рекламой в таком количестве, что при чистке своего ящика удалить «полезное письмо» можно, даже не заметив его среди мусора.
Способов борьбы с этими преступниками довольно много. Рассматривать все сразу в одной статье смысла особого не имеет, разве что в виде краткого обзора.
Предлагаю остановиться на рассмотрении следующей схемы: Kaspersky Anti-Spam (KAS) + Sendmail.
Первое, что мне поручили, когда я пришел на новое место работы, – это борьба со спамом. Читая документацию и разбираясь в конфигурации, был приятно удивлен тем, что разработчики данного продукта на славу потрудились, до того как представить его для повсеместного использования.
Итак, что такое KAS 2.0 и каковы принципы его работы.
Как и большинство ныне действующих фильтров, KAS фильтрует почтовое сообщение в процессе приема, т.е до того как письмо попадет в почтовый ящик пользователя. KAS обрабатывает сообщение и, руководствуясь правилами и действиями, установленными администратором, может:
- доставлять получателю в неизменном виде;
- блокировать получение;
- генерировать сообщение о невозможности приема письма;
- добавлять или изменять заголовок.
Все правила и профили уже предустановлены, на этом мы остановимся чуть позже, но подробно описывать каждое из них мы не будем, т.к. эта тема отдельной статьи. Вы можете сами понять, что необходимо, а что вы не будете использовать, после того как ответите на несколько вопросов: какая информация нужна, а какая нет, критично ли потерять «полезное письмо», можно ли пропустить несколько «ненужных» писем и т. п.
Что нужно, чтобы KAS смог работать:
- Операционная система Linux или FreeBSD 4.х, 5.х (тестирование проходило на Red Hat 9.0).
- Процессор Intel Pentium III с частотой не менее 500 МГц.
- Оперативная память не менее 256 Mб.
- Наличие установленных программ wget, bzip2.
- Наличие одной из почтовых систем: Sendmail, Postfix, Exim, Qmail, Communigate Pro.
Замечание. Перед установкой я всегда рекомендую делать резервные копии тех конфигурационных файлов, которые будут затронуты, в данном случае это файлы с настройками вашего почтового агента.
Внедрение продукта не требует особенных знаний и навыков, т.к. все делается при помощи входящих в пакет инсталляторов, начиная от установки программ из состава KAS и заканчивая интеграцией в почтовую систему.
# rpm -i <имя пакета>
подразумевает:
- создание пользователя и группы mailflt;
- установку всех программ, входящих в состав KAS, создание и установку скрипта запуска всех сервисов, который выполняется при перезапуске операционной системы;
- запуск необходимых программ и сервисов;
- создание записи в crontab пользователя mailflt для автоматического запуска скрипта загрузки обновлений базы контентной фильтрации.
Затем командой:
# /usr/local/ap-mailfilter/bin/install-key <имя_ключевого_файла>
устанавливаем лицензионный ключ.
Перед началом работы необходимо создать список лицензированных почтовых адресов, для которых почта будет проверяться на наличие спама.
Интеграция в почтовую программу происходит тоже достаточно легко и безболезненно.
Запускаете:
# /usr/local/ap-mailfilter/bin/MTA-config.pl
Это универсальный скрипт, который определит тип почтового агента и изменит его конфигурацию.
Также для каждой почтовой системы существуют конкретные программы настройки. Особых отличий я не нашел, и в том случае, если ваш МТА настроен нестандартно, все равно нужно будет указать правильное размещение файлов конфигурации МТА.
Для Sendmail скрипт-интегратор запускается командой:
#/usr/local/ap-mailfilter/bin/sendmail-config.pl
Для интеграции kas-milter с Sendmail в конфигурационном файле /etc/sendmail.cf прописывается:
Xfilter1, S=local:/usr/local/ap-mailfilter/run/kasmilter.sock, F=R
O InputMailFilters=kasfi
Подробное описание настройки фильтров в sendmail.cf приведено в документации по Sendmail
На этом будем считать процесс установки законченным и перейдем к конфигурированию.
Конфигурационные файлы Kaspersky Anti-Spam находятся в каталоге /usr/local/ap-mailfilter/conf/src (далее . CONFSRC) и его подкаталогах.
Непосредственно в CONFSRC находятся файлы с фиксированными именами:
- profiles.xml – список профилей фильтрации;
- emails.xml – набор списков e-mail-адресов;
- iplists.xml – набор списков IP-адресов;
- dnsblacklists.xml – набор списков служб DNS-based RBL;
- samples.xml – список пользовательских образцов спамерских писем;
- settings.xml – файл дополнительных настроек фильтра.
В каталоге CONFSRC имеются следующие подкаталоги:
- CONFSRC/profiles – каталог, содержащий файлы с описаниями профилей;
- CONFSRC/emails – каталог, включающий файлы со списками адресов e-mail;
- CONFSRC/iplists – каталог файлов со списками IP-адресов;
- CONFSRC/dnsblacklists – каталог файлов со списками служб DNSbasedRBL;
- CONFSRC/samples – каталог, содержащий файлы с образцами спамерских писем.
Собственно говоря, разработчиками было сделано многое, чтобы упростить жизнь администратора, и все конфигурационные файлы после инсталляции, мной, были оставлены без изменения за исключением blacklist_ip.xml (о нем мы поговорим позже) и kas-thhtpd.conf (в данном файле определены настройки для доступа к конфигурации через веб-интерфейс). Здесь была изменена всего одна строка.
# document root
dir=/usr/local/ap-mailfilter/www
user=mailflt
port=2880
host=0.0.0.0 # по умолчанию значится 127.0.0.1, что означает доступ к конфигурации через веб только с локального хоста
pidfile=/usr/local/ap-mailfilter/run/kas-thttpd.pid
Конфигурирование через веб предоставляет удобный, интуитивно понятный интерфейс. В нем есть свои плюсы и минусы. Данный инструмент позволит человеку, заменяющему системного администратора, быстро и с минимальными усилиями управлять настройками фильтра, даже если он ни разу не работал с UNIX-подобными системами. Однако самому же администратору для понимания принципов функционирования системы я бы рекомендовал изменять конфигурационные файлы используя редакторы, входящие в состав ОС.
Действия с письмами, определенными как спам, могут быть как самыми жесткими (отказ принять сообщение), так и достаточно мягкими (например, приписать сообщению дополнительный заголовок-«ярлык» для последующей обработки в почтовой программе пользователя). Применение различных действий к спаму – прерогатива администратора почтового сервиса. Скажу лишь одно, в состав KAS входит несколько предустановленных профилей с определенными наборами правил и действий по этим правилам. Для тех, кто не хочет, и даже для тех, кто хочет изобретать велосипед, того, что есть, хватит с лихвой. Существующие общие профили различаются «строгостью» оценки признаков спама (профили Soft признают спамом меньше писем, а профили Hard, больше писем) , использованием или не использованием проверок по RBL (а также на наличие имени посылающего сервера в DNS).
Оставив общим профилем тот, который был по умолчанию, проблем с распознаванием спама я не обнаружил. За месяц после изменения настроек антиспамного фильтра фильтр отследил порядка 25000 спам писем (и это всего на 10 лицензированных пользователей) при этом произошло всего лишь одно ложное срабатывание.
Сделать активным профиль можно редактируя файл:
# /usr/local/ap-mailfilter/conf/src/profiles.xml
<?xml version="1.0" encoding="koi8-r"?>
<Profiles>
<Common>
<ProfileRef active="no" file="detect-standard.xml" name="Spam Detection Standard"/>
<ProfileRef active="yes" file="detect-standard-no-rbl.xml" name="Spam Detection Standard (no RBL & DNS check)"/>
<ProfileRef active="no" file="detect-soft.xml" name="Spam Detection Soft"/>
<ProfileRef active="no" file="detect-soft-no-rbl.xml" name="Spam Detection Soft (no RBL & DNS check)"/>
<ProfileRef active="no" file="detect-hard.xml" name="Spam Detection Hard"/>
<ProfileRef active="no" file="detect-hard-no-rbl.xml" name="Spam Detection Hard (no RBL & DNS check)"/>
<ProfileRef active="yes" file="syslog.xml" name="Logging"/>
</Common>
<Personal>
<ProfileRef active="yes" file="rcpt-root.xml" name="root: No Filtering"/>
<ProfileRef active="no" file="do-mark-subject.xml" name="Marking Spam - Subject"/>
<ProfileRef active="no" file="do-mark-keywords.xml" name="Marking Spam - Keywords"/>
<ProfileRef active="yes" file="do-archive.xml" name="Archiving Spam"/>
<ProfileRef active="no" file="do-archive-or-reject.xml" name="Archiving/Rejecting Spam"/>
</Personal>
</Profiles>
На выходе данного этапа в письмо добавляются следующие специальные заголовки:
- X-SpamTest-Categories – заголовок, содержащий информацию о том, какие контентные категории были присвоены письму по результатам фильтрации.
- X-SpamTest-Status – заголовок, указывающий на окончательный статус письма по результатам всех проверок: SPAM, Probable Spam, Trusted или Not detected. Данный заголовок используется при последующей обработке письма персональными профилями. Он может также использоваться для обработки письма почтовым клиентом получателя.
Как мы видим, из персональных профилей активирован тот, который пересылает спамные письма в выделенный почтовый ящик (пока это сделано в целях получения статистической информации, в дальнейшем планируется применить «Archiving/Rejecting Spam»).
В примере конфигурационного файла активного персонального профиля приводим лишь ту часть, которая претерпела изменения.
...
<Rule>
<Conditions>
<HeaderMatch header="X-SpamTest-Status" regexp="SPAM" />
</Conditions>
<Actions>
# необходимо заменить адрес на реально существующий
<DoRcptReplaceAll new="spam@domain.ru" />
<!-- Must be changed to a real address -->
<DoAccept />
</Actions>
</Rule>
...
</Profile>
Теперь пришло время остановиться на файле blacklist_ ip.xml. Выглядит он примерно вот так:
<?xml version="1.0" encoding="koi8-r"?>
<IPList description="This list contains ip-addresses of spam senders relays. Must be filled up by user." name="Spam Senders' Relays">
<IP mask="0.0.0.0"/>
<IP mask="212.185.0.0/16"/>
<IP mask="66.112.0.0/17"/>
<IP mask="62.84.0.0/16"/>
...
<IP mask="141.156.192.0/18/>
<IP mask="24.239.0.0/16/>
</IPList>
Значение атрибута mask может быть указано в двух форматах: aaa.bbb.ccc.ddd/nn или aaa.bbb.ccc.ddd (равнозначно aaa.bbb.ccc.ddd/32).
Поддерживая его в актуальном состоянии, вы можете быть уверенными, что 95% тех писем, которые нам не желательно получать, будут распознаваться, и дальнейшая их судьба будет определена в соответствии с вашими пожеланиями.
В итоге, приложив немного усилий, поэкспериментировав с профилями и правилами, получаем эффективный антиспамный фильтр.
По сравнению с решением на основе SpamAssasin понравились следующие удобные особенности KAS:
- простая установка и интеграция в почтовую систему;
- легкая и гибкая конфигурация;
- возможность применять персональные профили к отдельным пользователям или группам;
- отсутствие балловой оценки (хотя кому-то это покажется не плюсом, а минусом, поскольку не позволит проводить тонких граней в оценке письма);
- меньшая загрузка системы.
Единственное чего, как мне кажется, не хватает – отсутствие возможности самобучения распознавания спама, которое позволило бы администратору более гибко использовать фильтрацию. Фильтр, конечно, позволяет добавлять образцы спамерских писем в базу, кроме того, он ее сам регулярно обновляет, но поскольку спамеры постоянно самосовершенствуются, то и стиль написания меняется, и как следствие, некоторые письма все равно просачиваются и обычно это не одно, а сразу несколько одинаковых писем. Вот поэтому считаю необходимым добавить следущее свойство – фильтр отслеживает повторяющиеся письма и при достижении определенного количества самостоятельно добавляет их в базу. Так же дело обстоит и с IP-адресами сервера отправителя, поскольку хакерами ежедневно взламывается несколько новых, через которые идет рассылка, и они не успевают попадать в black-листы и обновления.
Особую благодарность хочу выразить Таранову Александру, ведущему инженеру ЗАО «Телепорт-ТП», за содействие и интеллектуальную поддержку при написании статьи.