ShS's Blog

Just another sysadmin's weblog

Настройка Spam-фильтра в почтовом сервере Mdaemon

Posted by shs на 2010/06/07

Сегодня я хочу рассказать о настройке Spam-фильтра почтового сервера Mdaemon (достаточно популярного продукта у администраторов небольших организаций). Эта популярность вполне заслужена и одна из причин его популярности – это продвинутая система фильтрации спама, которой обладает данный продукт. Рассказ мой будет основан на настройках реального почтового сервера, с которым мне довелось работать (MDaemon v 9.5.6). Я не буду подробно описывать каждый пункт из многочисленных настроек, имеющихся в Mdaemon, т.к. смысл многих из них понятен из их названия и/или описан в документации. Остановлюсь только на ключевых моментах работы одного из компонентов защиты: SpamFilter’а. 

В основе системы фильтрации спама в Mdaemon лежит хорошо известный open source продукт – Spamassassin, который в MDaemon функционирует в виде резидентного модуля MSpamD (MDaemon’s spam processing daemon). Часть настроек, которые мы можем выполнить в GUI-интерфейсе Mdaemon’овского спам-фильтра, в конечном итоге найдут свое отражение в конфигурационных файлах Spamassasin’а. Spamassassin хорош тем, что позволяет использовать большое количество всевозможных тестов на спам, начисляя по итогам каждого из тестов определенное количество очков (причем, по итогам прохождения теста письму может быть начислено, как положительное, так и отрицательное количество очков (дефолтное количество очков, начисляемое на основании того или иного теста, можно посмотреть на сайте SpamAssassin’а)). После прохождения письмом всего набора тестов очки, набранные письмом в каждом из тестов, суммируются и сравниваются с заданным пороговым значением. На основании результата этого сравнения письмо признается спамом или легитимным почтовым сообщением. Поэтому в первую очередь нужно определить  это пороговое значение. Делается это на вкладке “Heuristics” в поле “A message is spam if its score is greater or equal” (см. рис 2). Во вторую очередь необходимо приять решение о том, что нам делать с письмами, которые после прохождения тестов будут признаны spam’ом: удалять их или нет (эта настройка выполняется на вкладке Spam Filtering в разделе If the Spam Filter determines that a message is spam then…”)? Я предпочитаю никогда не удалять сообщения, и, вот, почему: 

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

2)      получаемый сервером spam вы можете использовать для автоматического обучения  Байесовского фильтра (об этом речь чуть позже) 

 И так,  выбрав в основном меню программы Security->Spam Filter, мы увидим следующее окно (рис. 1): 

рис. 1

  

Стратегически важно принять решение по настройке, определяющей, что Mdaemon будет делать с письмом, которое было признано спамом (If the Spam Filter determines that a message is spam then…”).  Как уже было упомянуто выше, я полагаю, что «лучше перебдеть, чем недобдеть», поэтому никакие письма удаляться не должны. Ведь для того чтобы повысить эффективность фильтрации, мы будем стремиться установить порог достаточно низким, чтобы отсечь наибольший процент спама, а значит допустить возможность небольшого количества ложных положительных срабатываний.  Поэтому, IMHO, лучшим выбором будет не удаление писем, которые фильтр причисляет к спаму, а их маркировка каким-либо отличительным признаком (например, добавлением слова SPAM к теме письма). Поэтому в данном разделе  настроек я рекомендую выбирать “…flag the message but let it continue down the delivery path”

“Don’t filter messages sent from local sources” и “Don’t filter messages from trusted or authenticated sources” запрещает фильтрацию писем от локальных аутентифицированных или доверенных источников. 

A white list match subtract this may points from spam score” –  если письмо соответствует белому списку адресов, вычитать из суммарного набора очков, начисленных для письма по итогам тестирования, указанное количество очков. Если указать в этом поле заведомо большое число, то очки, начисленные такому письму по итогам тестирования, фактически не будут оказывать влияние на результат. 

A black list match adds this may points from spam score” – аналогичная настройка, но на этот раз для сообщений, подпадающих под черный список адресов.  Указанное количество очков будет добавлено к итоговому количеству, набранному письмом. Если указать в этом поле заведомо большое число, то очки, начисленные такому письму по итогам тестирования, фактически не будут оказывать влияние на результат. 

DNS-BL match adds  this many points to the spam score”- здесь необходимо указать количество очков, которые будут добавлены к итоговой оценке, если письмо перечислено в одном из черных списков DNS-BL (DNS-Black lists). Сам перечень DNS-BL Hosts, при помощи которых будет произведена проверка, задается в другом месте (Security -> DNS Black Lists… -> DNS-BL Hosts). В этом поле я задаю количество очков достаточно большое, но не превышающее пороговое значение, т.к. не хочу, чтобы решение о фильтрации письма принималось только на основании одного этого теста. С другой стороны, то, что сервер отправитель находится в одном из черных списков, достаточно симптоматично, и поэтому я выставил здесь количество очков равное 4 (что  составляет 2/3 от используемого мною порогового значения). 

Следующая вкладка “Heuristics” 

рис. 2

A message is spam if its score is greater or equal” – то самое пороговое значение для принятия решения: является ли протестированное письмо спамом или нет? Если суммарное количество очков, набранное письмом, превышает данное пороговое значение, то это письмо будет признано спамом. Как видно из пояснений к этому полю (см. скриншот), порог равный 5 является очень агрессивным (при использовании дефолтных значений, начисляемых при прохождении спам-тестов), а, значит, процент ложных положительных срабатываний будет слишком велик. После ряда экспериментов я остановился на числе 6. В моем случае это обеспечивало отсечение большей части спама при небольшом количестве ложных положительных срабатываний. 

SMTP rejects message with score greater or equal to” – пороговое значение для принятия решения о том, что письмо (признанное спамом) будет отвергнуто во время приема оного в  рамках SMTP-сессии. Если в этом поле поставить нуль, то MDaemon не будет пытаться выполнять антиспам тесты письма во время приема, и письмо будет протестировано только после того, как это оно попадет в очередь сообщений почтового сервера. В этом поле можно выставить достаточно большое пороговое значение, которое позволит вам отсекать явный спам на этапе приема сообщения. Но я предпочитаю этого не делать и принимать эти сообщения, т.к. в дальнейшем они могут быть использованы для обучения Байесовского фильтра, о котором речь пойдет далее. 

Subject tag” —  в этом поле можно задать текст, которым будет помечаться сообщение, признанное спамом. Я предпочитаю оставлять в этом поле дефолтные настройки. Благодаря этим настройкам письмо маркируется тегом, который нам позволит в дальнейшем легко отфильтровывать помеченные письма. Кроме того, в теме письма мы будем видеть, сколько очков набрало письмо в результате прохождения тестов и каково пороговое значении для принятия решения о признании письма спамом. Помеченные письма будут выглядеть следующим образом: 

Помеченные, как спам, письма в почтовом клиенте

рис. 3

Следующая вкладка “Bayesian”  (рис. 4) 

рис. 4

Эта вкладка полностью посвящена моему любимому методу фильтрации спама, так называемой фильтрации по Байесу. За этот метод фильтрации мы должны быть благодарны священнику и математику, жившему в 18 веке, Томасу Байесу (Tomas Bayes), который сформулировал теорему, названную впоследствии его именем. Преимущество этого метода состоит в том, что вы можете «тренировать» этот фильтр и обучить его распознавать тот спам, который получает именно ваш почтовый сервер. Эффективность этого метода фильтрации очень велика. Однако за все надо платить. И для того, чтобы поддерживать фильтр в тонусе, необходимо постоянно «скармливать» ему, как мусорную почту (spam), так и легитимные почтовые сообщения (ham). Делать это можно и нужно регулярно, и очень хорошо, что Mdaemon позволяет нам автоматизировать этот процесс. Для начала, нам придется создать пару общих папок, в одну из которых мы будем помещать spam, а в другую – ham. Эти папки мы будем использовать, как для первоначального обучения фильтра, так и для последующего ручного дообучения (когда  нами будут выявляться случаи ложного срабатывания фильтра). Создать общие папки легко: для этого достаточно нажать кнопку Create (см. рис 4). Затем, если вы не собираетесь обучать фильтр единолично, а хотите предоставить такую возможность каким-либо пользователям и/или другим администраторам, то вам необходимо выставить соответствующие разрешения на вновь созданные общие папки. «Коллективное» обучение фильтра позволит ему эффективнее выполнять фильтрацию, т.к. спамерные письма, приходящие в разные подразделения или даже к разным пользователям, могут достаточно сильно отличаться друг от друга. Разрешения на общие папки устанавливаются так: Setup-> Shared folders -> Public Folders -> …-> Edit access control list (см. рис5). 

рис. 5

В данном конкретном случае я дал все разрешения (lrwipcda) администратору, а дефолтные разрешения, действующие на любых других пользователей, выставил в li (List+Insert), что позволит пользователям добавлять письма в общие папки (перемещая их из папки «Входящие» в своем почтовом клиенте), но не читать их. Очень важно не давать пользователям лишних прав на эти папки, ведь через них будет проходить очень большая часть переписки вашей организации. (Вы же не хотите, чтобы кто-либо из пользователей получил возможность читать сообщения адресованные, например, генеральному директору, не так ли?) 

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

  

рис. 6

На скриншоте (рис. 6) мы видим, что значения полей “Non-spam samples required before learning starts”, так же как и “Non-spam samples required before learning starts”, по дефолту равно 200. Это означает, что до тех пор, пока вы не поместите в общие папки со spam’ом и ham’ом по 200 образцов соответствующих сообщений, то фильтр не начнет фильтрацию сообщений. 

Понятно, что ручной труд при обучении Байесовского фильтра нам придется использовать на первом этапе, когда фильтр еще не начал свою работу и в тех случаях, когда он будет ошибаться (причислять легитимные сообщения к спаму и, наоборот), в остальных же случаях хотелось бы автоматизировать процесс обучения. В этом нам могут помочь несколько настроек почтового сервера MDaemon: 

  • На той самой вкладке advanced, о которой речь шла выше (рис. 6), имеется возможность указать пороговые значения для писем, на основании которых Байесовский фильтр будет проходить самообучение. Если письмо, в результате прохождения тестов, наберет очков меньше, чем указано в поле Non-spam score threshold”, то такое письмо будет использоваться, как образец ham’а (легитимного почтового сообщения) при обучении фильтра. Если же количество очков, набранное письмом, превысит порог, указанный в поле Spam score threshold”, то такое письмо будет использовано для обучения фильтра в качестве образца spam’а.
  • Для автоматического пополнения образцов ham’а, «скармливаемых»  Байесовскому фильтру для проведения обучения, можно взвести «галку» “Update Bayesian engine with copies of white listed message” на вкладке “WhistList (auto)”. В результате все сообщения, соответствующие белым спискам, будут использованы для обучения фильтра, в качестве образцов легитимных сообщений.
  • Для автоматизации пополнения образцов spam’а в MDaemon’е имеется такая простая и эффективная вещь, как «Ловушки для спама» (Security” -> Spam traps…”). В этом пункте меню вы должны указать e-mail адреса, на которые не поступает ничего, кроме спама (подразумевается, что вы не используете эти адреса в работе, единственные отправители писем по таким адресам – спамеры). Наверняка у вас найдутся такие любимые спамерами адреса. В моем случае это были адреса вида director@…, buhgalter@…, buh@… и т.д., и т.п. Очевидно, что если такой адрес не закреплен ни за одним из пользователей, то всю поступающую на такие адреса почту можно смело направлять на обучение фильтра, т.к. это заведомый спам.

  

На вкладке Reporting” (рис. 7) можно указать MDaemon’у, каким образом он должен доставить пользователю отчет о результатах проверки письма на спам. Я предпочитаю использовать первый из предложенных вариантов – добавление отчета в заголовок письма. От двух оставшихся вариантов его отличает то, что вам никогда не удастся (специально или по злому умыслу) удалить отчет из письма, так же, как и то, что у письма, прошедшего проверку, не появится лишнего attachment’а  (содержащего отчет о проверке), который может вызвать массу вопросов у пользователей. 

рис. 7

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

Return-path: <yqejyafom1222@rr.com>
X-Spam-Flag: YES
X-Spam-Checker-Version: SpamAssassin 3.1.8 (2007-02-13)
X-Spam-Level: *******************************
X-Spam-Status: Yes, score=32.0 required=6.0 tests=BAYES_99,HTML_40_50,
	HTML_MESSAGE,MDAEMON_DNSBL,MDAEMON_SPF_SOFTFAIL,MIME_HTML_ONLY,URIBL_BLACK,
	URIBL_JP_SURBL,URIBL_SBL autolearn=spam version=3.1.8
X-Spam-Report:
	*  2.5 MDAEMON_SPF_SOFTFAIL MDaemon: soft-failed SPF verification
	*  4.0 MDAEMON_DNSBL MDaemon: marked by MDaemon's DNSBL
	*  0.5 HTML_40_50 BODY: Message is 40% to 50% HTML
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*   10 BAYES_99 BODY: Bayesian spam probability is 99 to 100%
	*      [score: 1.0000]
	*  0.0 MIME_HTML_ONLY BODY: Message only has text/html MIME parts
	*  4.0 URIBL_SBL Contains an URL listed in the SBL blocklist
	*      [URIs: eitherstick.ru]
	*  8.0 URIBL_JP_SURBL Contains an URL listed in the JP SURBL blocklist
	*      [URIs: eitherstick.ru]
	*  3.0 URIBL_BLACK Contains a URL listed in the URIBL.com blacklist
	*      [URIs: eitherstick.ru]
Authentication-Results: org.provider.ru
	smtp.mail=yqejyafom1222@rr.com; spf=softfail; ip-match=fail
Authentication-Results: org.provider.ru
	header.from=yqejyafom1222@rr.com; domainkeys=neutral (not signed); dkim=neutral (not
signed)
Authentication-Results: org.provider.ru
	smtp.helo=rr.com; ip-match=fail
X-MDDK-Result: neutral (org.provider.ru)
X-MDDKIM-Result: neutral (org.provider.ru)
X-MDSPF-Result: softfail (org.provider.ru)
Received-SPF: softfail (org.provider.ru: domain of transitioning yqejyafom1222@rr.com
	does not designate 67.240.101.38 as permitted sender)
	x-spf-client=MDaemon.PRO.v9.5.6
	receiver=org.provider.ru
	client-ip=67.240.101.38
	envelope-from=<yqejyafom1222@rr.com>
	helo=rr.com
Received: from rr.com (cpe-67-240-101-38.nycap.res.rr.com [67.240.101.38])
	by org.com (org.provider.ru)
	(MDaemon PRO v9.5.6)
	with ESMTP id md50000901038.msg
	for <i.ivanova@org.com>; Mon, 07 Jun 2010 02:08:52 +0400
From: BestMaleTablets <yqejyafom1222@rr.com>
To: i.ivanova@org.ru
Subject: [***SPAM*** Score/Req: 32.0/6.0] Mr. i.ivanova, we offer you 80% off tonight. proposition
states modern Visiting the
MIME-Version: 1.0
Content-Type: text/html; charset="utf-8"
X-RBL-Warning: mail from 67.240.101.38 refused, see http://www.spamhaus.org
	mail from 67.240.101.38 refused, see http://www.spamcop.net
	mail from 67.240.101.38 refused, see http://www.spamhaus.org
X-Lookup-Warning: MAIL lookup on yqejyafom1222@rr.com does not match 67.240.101.38
X-Lookup-Warning: EHLO lookup on rr.com does not match 67.240.101.38
X-MDRcpt-To: i.ivanova@org.ru
X-Rcpt-To: i.ivanova@org.ru
X-MDRemoteIP: 67.240.101.38
X-Return-Path: yqejyafom1222@rr.com
X-Envelope-From: yqejyafom1222@rr.com
X-MDaemon-Deliver-To: _spam_@org.com
X-Spam-Prev-Subject: Mr. i.ivanova, we offer you 80% off tonight. proposition states modern
Visiting the
X-Spam-Processed: org.provider.ru, Mon, 07 Jun 2010 02:08:52 +0400
X-MDAV-Processed: org.provider.ru, Mon, 07 Jun 2010 02:08:52 +0400

В заголовке письма, который приведен выше, можно найти следующий отчет о результатах прохождении письмом антиспам-тестов:

X-Spam-Report:
	*  2.5 MDAEMON_SPF_SOFTFAIL MDaemon: soft-failed SPF verification
	*  4.0 MDAEMON_DNSBL MDaemon: marked by MDaemon's DNSBL
	*  0.5 HTML_40_50 BODY: Message is 40% to 50% HTML
	*  0.0 HTML_MESSAGE BODY: HTML included in message
	*   10 BAYES_99 BODY: Bayesian spam probability is 99 to 100%
	*      [score: 1.0000]
	*  0.0 MIME_HTML_ONLY BODY: Message only has text/html MIME parts
	*  4.0 URIBL_SBL Contains an URL listed in the SBL blocklist
	*      [URIs: eitherstick.ru]
	*  8.0 URIBL_JP_SURBL Contains an URL listed in the JP SURBL blocklist
	*      [URIs: eitherstick.ru]
	*  3.0 URIBL_BLACK Contains a URL listed in the URIBL.com blacklist
	*      [URIs: eitherstick.ru]

В каждой строке этого отчета мы видим  название теста (например, URIBL_SBL), краткое описание этого теста (Contains an URL listed in the SBL blocklist [URIs: eitherstick.ru]) и количество очков, которое было начислено письму по итогам этого теста (4.0

Теперь мы подошли еще к одному важному и неочевидному моменту, о котором очень мало говорится в документации на MDaemon. Все вроде бы замечательно и волшебно: мы настроили антиспам защиту, периодически поглядываем за тем, насколько хорошо она справляется со своими обязанностями. Со временем, когда у нас накопится некоторая статистика, мы начнем понимать, что неплохо бы изменить количество очков, которые начисляются письму во время прохождения того или иного теста. Например, я заметил следующее, что мой Байесовский фильтр настолько хорошо натренирован, что когда он сообщает о том, что письмо не является спамом с вероятностью 99-100%, то можно было бы начислять такому письму гораздо больше очков, нежели дефолтные 3.5, если же Байес полагает, что письмо является спамом с вероятностью, стремящейся к нулю (0-1%), то было бы неплохо вычитать из общей суммы набранных очков больше, чем дефолтные 2,312. Помимо очков, начисляемых при прохождении Байеса, я хотел бы подкрутить и некоторые другие дефолтные значения для других тестов, например:  RCVD_NUMERIC_HELO (ip-адрес содержится в HELO),  по дефолту дает только 1,440 очков, что, на мой взгляд, маловато будет.  fuzzy_XPILL (Attempt to obfuscate words in spam) – вызывает огромное количество нареканий за большое количество ложных положительных срабатываний, посему, я хочу понизить количество очков, начисляемых по итогам этого теста с 2,88 до 0,1  и т.п.  Все эти настройки можно проделать, редактируя файл конфигурации SpamAssassin’а: local.cf. После внесения изменений мой файл local.cf выглядит теперь следующим образом: 

required_score 6.0
rewrite_header subject [***SPAM*** Score/Req: _SCORE(0)_/_REQD_]
report_safe 0
skip_rbl_checks 1
add_header all Report _REPORT_
add_header all Checker-Version SpamAssassin _VERSION_ (_SUBVERSION_)
local_tests_only 1
lock_method win32
use_hashcash 1
use_bayes 1
bayes_path E:\MDaemon\SpamAssassin\bayes\bayes
bayes_auto_learn  1
bayes_auto_learn_threshold_nonspam 0.1
bayes_auto_learn_threshold_spam 12.0
bayes_auto_expire  1
bayes_expiry_max_db_size 200000
bayes_min_ham_num  200
bayes_min_spam_num  200
use_auto_whitelist 0
auto_whitelist_path E:\MDaemon\SpamAssassin\auto_whitelist\auto_whitelist
#
score USER_IN_WHITELIST  -100.0
score USER_IN_WHITELIST_TO -100.0
score USER_IN_BLACKLIST  100.0
score MDAEMON_DNSBL 4.0
score FROM_ILLEGAL_CHARS 2.0
score FUZZY_XPILL 0.1
#
#
score RCVD_NUMERIC_HELO 2.0
score RCVD_FAKE_HELO_DOTCOM 2.0
#
internal_networks 10.4/16 10.3/16 10.2/16 127.0.0.1
#
# Bayesian Scores
score BAYES_99 10
score BAYES_95 3.4
score BAYES_80 3.0
score BAYES_60 2.5
score BAYES_50 2.2
score BAYES_40 1.0
score BAYES_20 0.3
score BAYES_05 -0.5
score BAYES_00 -3.0
#
auto_whitelist_factor 0.5
auto_whitelist_file_mode 0666
#
score MDAEMON_OP_SPAM_HIGH 2.5
score MDAEMON_OP_IWF 2.5

В этом файле вы найдете часть параметров, о которых я писал выше, чье значение мы выставляли при помощи GUI-интерфейса MDaemon’а и, как и было обещано, они нашли свое отражение в соответствующих строках файла конфигурации. Но, что для нас особенно ценно, мы можем вносить изменения в настройку антиспам защиты путем редактирования этого файла конфигурации, не связываясь с GUI-интерфейсом, причем можем настраивать такие параметры, которые недоступны в GUI-интерфейсе.
На этой мажорной ноте я, пожалуй, закончу свое повествование. Всем привет и «всё такое».

Реклама

Один ответ to “Настройка Spam-фильтра в почтовом сервере Mdaemon”

  1. […] shs на 2010/08/03 Как я уже писал ранее, в почтовом сервере Mdaemon существует возможность […]

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

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

 
%d такие блоггеры, как: