Антиспам II. POPFile
В предыдущей заметке речь шла о программе POP3Catcher, которая проверяет приходящую почту – не была ли она отправлена через открытый релей, что на 99% означает – «спам». Тогда же я упомянул о других способах определения спама, в частности, о возможности статистического анализа пришедших писем.
Теория
Самым «модным» алгоритмом является Bayesian algorithm. В двух словах об идее алгоритма в применении к сортировке электронной почты.
Пусть приходящие письма надо рассортировывать в две папки: «OK» и «Спам». Поначалу каждое приходящее письмо классифицируется вручную. При этом накапливается статистика о словах в той и в другой папках. Через некоторое время, когда информации становится достаточно, эта статистика может быть использована для автоматической классификации писем. Программа, используя формулу полной вероятности, рассчитывает вероятности того, что очередное пришедшее письмо попадет в папку «OK» или в «Спам». Если значения близки, то пользователю предлагается вручную уточнить, какой именно вариант следует выбрать, в противном случае письмо классифицируется автоматически, попадая в ту папку, для которой рассчитанное значение вероятности оказалось выше.
Побочным, но очень приятным эффектом данного алгоритма является возможность классификации почты по нескольким папкам. Для алгоритма то все равно, сколько их будет – две или больше. Это позволяет сортировать почту, без использования сложных фильтров.
Более подробно, на английском языке, теорию этого дела можно прочитать в известной статье A Plan for Spam.
Практика
Программ, реализующих описанный алгоритм, много. Лично я остановился на программе POPFile. Выбор был продиктован несколькими причинами:
- она попалась мне одной из первых и оказалось настолько хорошей, что желания попробовать что-то еще не возникло
- автор ведет активную работу, по ходу дела добавляя новые возможности. Живенький такой проектик, постоянно входящий в десятку самых активных на www.sourceforge.net
- программа написана на perl’е причем было приложены большие усилия для того, чтобы она была кросс-платформенной.
Видимо следует более детально объяснить, почему кросс-платформенное программирование – это хорошо. Для дома – было бы достаточно, чтобы программа работала под Win2K, а остальные платформы пусть горят синим пламенем. Зато на работе – совсем другое дело. На работе у меня под рукой сервер с установленной ОС Solaris, там подобной программе самое место, незачем мне на рабочую машину лишнюю «фенечку» навешивать, и так уже POP3 Catcher место в памяти кушает.
Итак, пользователи Windows качают «POPFile for Windows«, остальные – «POPFile Cross Platform«. Последний архив значительно меньше по размерам.
Что умеет POPFile:
- Работает как POP3-proxy. То есть почтовый клиент надо перенастроить на локальный адрес. По умолчанию это 127.0.0.1:110.
- Интерфейс – через браузер, по адресу http://127.0.0.1:8080 (порт, естественно, можно сменить).
- В заголовки письма вставляется строчка вида X-Text-Classification: имя_корзины, по которой и будет фильтровать непосредственно почтовый клиент.
Установка
Вся статья будет написана с расчетом на то, что POPFile устанавливается с настройками по умолчанию (адреса серверов, порты и т.п.). Этап установки я пропускаю, никаких особенностей там нет, переходим непосредственно к конфигурированию.
Вся работа с POPFile осуществляется через браузер. Если программа запущена, то, набрав в браузере http://127.0.0.1:8080, вы увидете страничку с большим количеством настроек. Вкратце о самом главном.
Отправляемся на http://127.0.0.1:8080/buckets и создаем («Create bucket with name») нужное количество «корзин» («Buckets») по которым будет распределяться приходящая почта. Обычно две – «ok» и «spam», но никто не мешает создать и больше, например, для каждого проекта, в котором вы принимаете участие. Как говорилось выше, алгоритм допускает использование любого количества корзин.
Теперь, что надо сделать, чтобы связка POPFile + The Bat! работала максимально эффективно и эффектно. Пусть изначально The Bat! был настроен так:
POP3 сервер: pop.yandex.ru
Имя пользователя: login
Пароль: password
Считая, что при установке POPFile были выбраны предлагаемые параметры, новые настройки будут выглядеть так:

Изменения коснулись только полей User и Mail Server
Следующий этап – создание фильтров. Тут все просто, вот как выглядит мой фильтр, переносящий весь спам в одноименную папку:

собственно, на этом – все, пора проводить испытания. Жмем «F2» и… Ах да, забыли этап тренировки. Опять идем сюда – http://127.0.0.1:8080 и каждому письму меняем папку на ту, которую оно заслуживает (столбец «Should be»). Примерно так:

Когда всем письмам соответствующие папки установлены, нажимаем кнопочку Reclassify в нижней части страницы. Первоначально, операцию придется проделать несколько раз, пока POPFile не наберет достаточное количество статистики, но затем, поверьте, все будет работать на полном автопилоте
А тут описано использование POPFile на почтовом сервере [12.01.2004]
Умелые ручки
Попользовавшись программой POPFile, как было описано выше, я понял, что меня раздражает. Время от времени приходят такие письма, в которых POPFile не может распознать спам. И для того, чтобы подкорректировать поведение, необходимо переклассифицировать письмо, указав ему правильную папку. При этом приходится проделать множество мелких операций:
- запустить браузер
- открыть страницу настроек
- найти ошибочно классифицированное письмо
- выбрать нужную папку
- нажать Reclassify
Сложнее всего для меня оказалось найти письмо. Как оказалось, POPFile прямо в тело письма вставляет нужную ссылку. С учетом этого последовательность операций видоизменяется:
- включить в The Bat! режим «показывать заголовки» («Shift-Ctrl-K»)
- найти в проблемном письме строчку «X-POPFile-Link:», кликнуть на URL
- выбрать нужную папку
- нажать Reclassify
- вернуться в The Bat! и отключить показ заголовков
Если у вас заголовки показываются всегда и пункты 1 и 5 для вас не нужны, то следующие несколько абзацев можете смело пропустить.
Тем же, кто предпочитает отключать заголовки, могу порекомендовать следующий трюк, идею которого подал добрый человек, Геннадий Свиридов.
Как известно, The Bat! умеет работать с полями, которые вставляют сервера почтовых конференций (yahoogroups, и т.п.) о чем свидетельствует меню Specials/Mailing list. Нас интересует операция просмотра архива («View archive»). По идее, при выборе данного пункта, The Bat! ищет в заголовке письма строчку «List-Archive:» и открывает в браузере указанный в ней URL. Это практически то, что нужно нам, за исключением того, что имя заголовка отличается от используемого программой POPFile.
Нам нужно добиться, чтобы вместо «X-POPFile-Link:» вставлялся «List-Archive:». Способов есть несколько. Я выбрал самый простой – заменил в файле «C:\Program Files\POPFile\Classifier\Bayes.pm» два вхождения строки «X-POPFile-Link:» соответственно на «List-Archive:».
После этого в The Bat! на пункт меню Special/View Archive повесил горячую клавишу (а вы знаете, что в новом «мыше» по нажатию «Alt-F12» выскакивает редактор горячих клавиш?).
Теперь, если какое-то письмо оказалось классифицировано неправильно, я жму «Alt-S» и сразу оказываюсь в нужном месте, остается только подправить папку и нажать Reclassify.
Бочка меда
Статистика за последние три месяца такова:
- Обработано писем – 13379
- Допущено ошибок – 24
- Точность – 99.82%
- В папку spam ушло 1423 письма
Отмечу, что ни одного «нормального» письма за все время в spam не попало. То есть все 24 ошибки – это «спам», умудрившийся проскочить через жесткое сито эвристики. Результат, с моей точки зрения, более чем достойный.