С момента публикации статьи "
Убийство спама в The Bat!" накопился определённый опыт эксплуатации в реальных условиях описанных там антиспамных фильтров, что заставило меня вновь уткнуться в компьютер и обобщить сильные и слабые стороны предложенной в этой статье системы фильтров, а также внести в схему построения фильтров некоторые усовершенствования.
Большое спасибо всем читателям, которые откликнулись на данную статью и написали мне все свои замечания, просьбы и предложения. Ставя точку в той статье, я и не планировал писать продолжение, наивно полагая, что всё и так хорошо и будет идеально работать. Именно вопросы, возникшие при использовании фильтров в The Bat! и выявленные в результате моего личного опыта и общения по мылу с читателями, послужили стимулом к написанию продолжения.
Вся прелесть этих фильтров состоит в их полном автоматизме: нажал на кнопку “Получить новую почту” и отдыхай, пока Бат не сделает всё сам. Никаких напрягов – не надо до опупения всматриваться в заголовки сообщений и искать в них знакомые и незнакомые адреса, не надо вчитываться в темы, не надо читать всякий рекламный вздор, не надо его вручную разгребать и перетаскивать в корзину...
Вместе с тем, система фильтров, описанная в старой статье, не достаточно гибка. Принцип фильтрации основан на методе белого списка. Белый список – это вся адресная книга. Письма, пришедшие от “знакомых” адресатов (т.е. из адресной книги) пропускаются, а от незнакомых – удаляются. Последним рассылаются уведомления с предложением набрать в теме письма ключевое слово (цифровой код). Входящие сообщения с этим кодом в теме тоже проходят через фильтры.
Какие же минусы у данной схемы?
Во-первых: из 100 спамеров всегда найдётся 1, у которого реальный обратный адрес. Поэтому вполне вероятно, что спамер наберёт Ваш код и его письмо дойдёт до Вас. Лично у меня было несколько таких случаев. Не менять же код ради нескольких спамеров! Здесь сразу же напрашивается идея прикрутить чёрный список, куда можно было бы засунуть адреса прорвавшихся спамеров.
Во-вторых: при большом количестве спама некоторые читатели отметили возросший исходящий трафик, состоящий из уведомлений. Если в почтовом ящике на сервере лежит 20 сообщений от неизвестных адресатов, то им будет отослано ровно 20 уведомлений.
Конечно, за всё надо платить. Полный автоматизм, абсолютная чистота почтового ящика и экономия Вашего личного времени оплачиваются незначительным увеличением исходящего трафика. Этим можно было бы ограничиться, но нельзя не отметить, что систему фильтров можно сделать более гибкой, значительно снижающей входящий и исходящий трафики. А трафик – это время и килобайты, и, в конце концов, деньги, которые нужно отдавать провайдеру. И ведь далеко не все сидят на толстых и бесплатных каналах связи!
В-третьих: в старой конструкции слабо задействована фильтрация по заголовку письма, кроме фильтра № 1 “Спам по заголовку”, который удаляет сообщения, адресованные не Вам, сообщения с Вашего адреса и сообщения без адреса отправителя. Полномасштабный формальный анализ позволяет удалить 40-80% откровенного спама без рассылки уведомлений и при практически нулевом трафике. Выйдя на работу после отпуска, я обнаружил в ящике 304 письма (около 8Мб). С помощью чистильщика на основе формальных признаков было выделено и удалено 252 сообщения (83%)!
А если спам идёт с одного и того же адреса? Было бы неплохо запоминать адреса отправителей, чтобы не посылать многократно уведомления одному и тому же адресату, возможно несуществующему. В последнем случае (если адрес не существует), почтовые серверы разразятся руганью и возвратят Вам диагностические сообщения MAILER-DAEMON@mailserv.ru, сообщающие о несуществующем адресе или об ошибке DNS. Поэтому при отсутствии истории отправителей, придётся платить не только за лишний исходящий трафик на тупую рассылку уведомлений одним и тем же несуществующим адресатам, но и за обратный входящий трафик для обработки сообщений типа MAILER-DAEMON@mailserv.ru.
В-четвёртых: схема, описанная в статье “Убийство спама в The Bat!”, требует от получившего уведомление вручную добавлять код в тему письма, а отправителю письма обязательно нужно заносить адрес человека, которому он пишет впервые, в адресную книгу. Иначе возможна ситуация, когда два пользователя, имеющие жёсткую систему фильтров, будут бесконечно обмениваться уведомлениями (так называемый email-пинг-понг). Вы написали мне письмо и забыли занести мой адрес в адресную книгу, мой фильтр послал Вам уведомление, а в ответ на моё уведомление Ваш фильтр послал мне уведомление и так до бесконечности. Правда, этим же недостатком грешат и специальные антиспамные программы, типа WinAntispam, имеющие такую же жёсткую схему фильтрации, основанную на белых/чёрных списках и уведомлениях.
В-пятых: письма от незнакомых отправителей в старой схеме полностью удалялись, хотя предварительно скачивались на компьютер пользователя (для обработки фильтром "От неизвестного адресата"). Разумнее всё-таки некоторое время (например, 30 дней) хранить их в корзине, раз уж они скачиваются, чтобы не заставлять незнакомого адресата повторно отправлять письмо.
Таким образом, появилась потребность усовершенствовать старую конструкцию фильтров. Новая схема – это та же старая схема + чёрные списки + фильтрация по заголовку до скачивания письма. Чёрные списки – это текстовый файл "spam.txt" и спец. группы в адресной книге, где накапливаются адреса от незнакомых отправителей, не набравших Ваш код в теме письма, либо адреса спамеров, набравших проходной код. Если от этой категории отправителей продолжают идти письма, то повторные сообщения удаляются уже без посылки уведомления, что не было реализовано в старой системе фильтров.
Конструкция фильтров, основанная на методе белых-чёрных списков с подтверждением переписки для нового адресата, является очень эффективным оружием конечного пользователя. Как и всякая схема защиты, она имеет свои плюсы и минусы. Плюсы - высокая эффективность, экономичность, полный автоматизм. Минусы - достаточно сложная, трудоёмкая в настройке, требует подтверждений для новых контактов.
Она предназначена, в первую очередь для домашних пользователей, которые имеют достаточно стабильный круг знакомств с небольшим приростом новых переписчиков, для которых новые контакты не являются критически важными.
Однако жёсткая система фильтров не подходит для служебного использования, когда высока вероятность новых контактов, и не всегда допустимо требовать подтверждений, например, любой фирме, ожидающей новых клиентов. В этом случае можно воспользоваться сокращённым набором фильтров (смотрите раздел "Мягкая система фильтров" в конце статьи). В "мягкой" схеме отключен режим подтверждения переписки ценой пропуска некоторого количества спама.
Описанная ниже система фильтров было разработана и успешно испытана для версии The Bat! не ниже 1.62.
Жёсткая система фильтров.
Новая конструкция состоит из 2 групп фильтров. Первая группа в сортировщике The Bat! входит в правило “Входящая почта”. Фильтры первой группы пропускают письма от знакомых адресатов и с заданным кодом в теме, удаляют сообщения от незнакомых адресатов, рассылают им уведомления и ведут чёрные списки спамеров.
Вторая группа фильтров входит в правило сортировки “Выборочное скачивание” и осуществляет фильтрацию на основе полей заголовка письма RFC-822. Для срабатывания фильтров этой группы с сервера скачиваются только заголовки писем.
Особенностью сортировщика The Bat! является то, что первым срабатывает правило сортировки “Выборочное скачивание” (хотя оно в сортировщике стоит последним), а затем – “Входящая почта”. Это противоречие связано с тем, что правило “Выборочное скачивание” появилось в более поздних версиях (раньше его не было), т.е. было прикручено к сортировщику. Сначала Бат скачивает с сервера заголовки писем, обрабатывает их фильтрами “Выборочное скачивание” (письма, удовлетворяющие условиям фильтрации, либо удаляются с сервера, либо исключаются из списка загрузки, т.е. остаются на сервере). Затем оставшиеся в списке сообщения скачиваются с сервера, после чего обрабатываются фильтрами “Входящая почта”. Так и хочется здесь воскликнуть: “Господа, это не глюк программы, это её свойство!”. Вот почему фильтры этой группы очень существенно экономят входящий трафик. Чем больше хлама (спама) мы предварительно убьём на сервере (в “Выборочном скачивании”), тем меньше потом придётся качать и обрабатывать во “Входящей почте”. Правило сортировки “Выборочное скачивание” в старой статье вообще не было задействовано, тем не менее, схема успешно работала.
Наконец, мы подошли к описанию сути новой конструкции фильтров.
Создадим в адресной книге 3 группы адресов (открываем адресную книгу: меню [Инструменты / Адресная книга]; выделяем “Personal address book”; меню [Правка / Создать новую группу…]). Назовём их, например, так:
_Отстойник
_Сортир
_Шлюз
Символ “_” перед каждым названием стоит только для того, чтобы все три группы были рядом друг с другом в адресной книге, а не разбросаны в алфавитном порядке среди других групп.
В “_Отстойник” будут кидаться адреса писем от незнакомых отправителей, т.е. от тех, кто написал в первый раз. В результате в этой группе накопится большое кол-во спам-email-адресов, на 100% не существующих. Периодически (раз в год - в полгода) сюда нужно заходить, чтобы вычистить авгиевы конюшни :-).
В группу “_Шлюз” из “_Отстойника” будут автоматически перемещены те адресаты, кто введёт заданный нами код в теме письма. Если адрес находится в “_Шлюзе”, то письма с него будут проходить на наш компьютер. Чтобы адресат стал доверенным, его адрес нужно из “_Шлюза” вручную перетащить в любую группу (кроме этих трёх) или в корень “Personal address book”. В идеале папка “_Шлюз” должна быть пустая, т.к. там только временно хранятся адресаты, которые станут либо друзьями, либо врагами (спамерами).
Группа “_Сортир“ – это чёрный список спамеров. В _Сортир мы вручную или с помощью спец. фильтра из _ Шлюза переносим адреса прорвавшихся спамеров, т.е. тех, которые набрали наш код. Если спамер попал в _Сортир, пусть он хоть до потери пульса пишет нам письма – они будут методично удаляться, не смотря на набранный код.
Таким образом, при скачивании почты всё происходит автоматически. Как только Вы получили новое письмо от незнакомца с Вашим кодом в теме, зайдите в адресную книгу и из “_Шлюза” перетащите его либо в группу друзей, либо в “_Сортир” на вечный покой. И раз в год в “_Отстойнике” грохните все мёртвые адреса, ежели не жалко :-). Вот и все дела :-))).
Общая схема фильтров будет выглядеть так:
- На сервере правилом «Выборочное скачивание» удаляются следующие сообщения:
- без адреса отправителя в поле “From:”;
- с моим адресом в поле “From:” (от меня);
- если в поле “To:” не мой адрес (не мне);
- если в заголовке письма отсутствуют некоторые поля;
- для некоторых очень характерных для спама случаев (паранойя);
- для адресатов из стоп-листа.
- Далее оставшиеся письма скачиваются на Ваш компьютер и обрабатываются правилом «Входящая почта».
- Принимаем все письма от известных адресатов.
- Обрабатываем диагностические сообщения MAILER-DAEMON.
- Пропускаем все письма, в теме которых стоит наш код (кроме адресатов из _Сортира), а отправителей перемещаем из _Отстойника в _Шлюз.
- Удаляем в корзину спам от отправителей из _Отстойника и _Сортира.
- Обрабатываем письма от неизвестных адресатов:
- перемещаем письма от них в корзину и храним там 30 дней;
- помещаем их адреса в “_Отстойник”;
- рассылаем им уведомления с предложением ввести код в тему нового письма или автоответить на уведомление с уже введённым кодом.
- Удаляем отосланные уведомления.
Если некто (возможно полезный отправитель) не позднее 30 дней автоответит на наше уведомление, то его письмо по теме и дате отправления можно найти в корзине. Если это спамер, выделяем его письмо и нажимаем заветную комбинацию клавиш – это письмо удаляется, а его адрес перемещается в _Сортир и в стоп-лист (файл spam.txt). Письма от адресатов, попавших в стоп-лист уничтожаются прямо на почтовом сервере и не скачиваются на наш компьютер.
Более наглядно новую конструкцию фильтров можно представить в виде таблицы:
Правило сортировки
Фильтр
Действие
Входящая почта | 1. | Пропускает сообщения от известных адресатов для указанных групп адресной книги |
2. MAILER-DAEMON | Извлекает несуществующие адреса из сообщений MAILER-DAEMON и добавляет их в стоп-лист (файл spam.txt) |
3. Пропуск по ключу | Пропускает письмо с нашим кодом в теме, перемещает адресата из _Отстойника в _Шлюз |
4. Спам-отстой | Перемещает письмо от адресата из _Отстойника в корзину |
5. Спам-сортир | Удаляет письмо от адресата из _Сортира, добавляет его адрес в стоп-лист (файл spam.txt) |
6. От неизвестного адресата | Перемещает письмо в корзину, где оно хранятся 30 дней, добавляет адрес отправителя в _Отстойник, высылает ему извещение |
Отправленные письма | 7. Удаление извещений неизвестным адресатам | Удаляет отправленные извещения |
Прочитанные письма | 8. Обработка спама (ручной фильтр) | С помощью комбинации клавиш удаляем выделенное письмо от “прорвавшегося” спамера, перемещаем его адрес из _Шлюза в _Сортир и добавляем в стоп-лист (файл spam.txt) |
Выборочное скачивание | 9. Без отправителя | Удаляет письма без адреса отправителя в поле “From:” |
10. От меня | Удаляет письма с моим адресом в поле “From:” |
11. Не мне | Удаляет письма, если в поле “To:” не мой адрес |
12. Нет полей в заголовке RFC-822 | Удаляет письма, если в их заголовке отсутствуют поля "Date:", “From:”, “To:”, “Subject:”, “Message-ID:”, “X-Mailer:” |
13. Паранойя | Удаление писем по специфическим признакам, например: To: pupkin |
14. Стоп-лист | Удаляет письма от отправителей из стоп-листа из файла spam.txt |
Обработка входящей почты.
Пусть Ваш email-адрес, как в старой статье, будет pupkin@mailserver.ru.
Если у Вас старая система фильтров, то фильтр № 1, который раньше назывался “Спам по заголовку” удалим. В новой схеме его заменят правила фильтрации по формальным признакам (правило “Выборочное скачивание”, см. далее).
Теперь фильтром № 1 будет стандартное правило сортировщика (известные адресаты). Оно работает так: если к Вам пришло письмо, адрес отправителя которого находится в указанных Вами группах адресной книги, то это письмо пропускается на Ваш компьютер и по умолчанию кладётся в спец. папку [Входящие – Известные адресаты].
В принципе правило не нужно. Всё будет работать и без него. Но я считаю, что включить его надо для надёжности, чтобы гарантированно пропускать знакомых адресатов, так как система фильтров достаточно сложная и в случае ошибки в каком-нибудь фильтре дополнительная избыточность (в смысле надёжности) не помешает.
Фильтр № 1.
- Выделяем ящик pupkin@mailserver.ru
- Меню [Ящик / Настройка сортировщика писем]
- Разворачиваем [+] правило сортировки [Входящая почта]
- Выделяем правило
- Вкладка [Известные адресаты]
- Переместить письмо от известных адресатов в папку (кнопка [Выбор папки])
[Входящие] - Искать в адресных книгах:
- ставим галки напротив всех групп, кроме “_Отстойник”, “_Шлюз” и “_Сортир”
- [√] Правило активно
- [√] Продолжать обработку последующих правил
- Кнопка [Закрыть] – закрывает сортировщик и сохраняет введённый фильтр
Фильтр № 1 пропускает на Ваш компьютер письма от знакомых адресатов из всех отмеченных групп, кроме групп “_Отстойник”, “_Шлюз” и “_Сортир”. Более мягкий вариант, если в пункте 7 напротив “_Шлюза” поставить галку, тогда отправитель, один раз набрав код в теме письма, станет доверенным адресатом. При отсутствии галки – адресату из “_Шлюза” нужно каждый раз набирать код.
В пункте 6 нужно обязательно выбрать папку [Входящие] вместо стоящей по умолчанию [Входящие – Известные адресаты], если письма в дальнейшем нужно раскладывать с помощью других фильтров по папкам, иначе все письма от знакомых будут валиться во [Входящие – Известные адресаты], а нижестоящие фильтры будут игнорироваться.
Фильтр № 2 обрабатывает диагностическое сообщение MAILER-DAEMON: извлекает из него адрес несуществующего адресата и записывает этот адрес в стоп-лист.
Фильтр № 2.
- Выделяем ящик pupkin@mailserver.ru
- Меню [Ящик / Настройка сортировщика писем]
- Выделяем правило сортировки [Входящая почта]
- Кнопка [Создать]
- Вкладка [Правила]
- Название фильтра “MAILER-DAEMON”
- Переместить письмо в папку
[Корзина] - Сигнальные строки:
Строки | Наличие | Где |
MAILER-DAEMON | Отправитель | Да |
- Вкладка [Альтернативы]
- Кнопка [Добавить набор]
Строки | Наличие | Где |
Mail Delivery System | Отправитель | Да |
- Кнопка [Добавить набор]
Строки | Наличие | Где |
Mail Delivery Subsystem | Отправитель | Да |
- Вкладка [Действия]
- [√] Пометить письмо как прочитанное
- [√] Экспортировать письмо в файл
C:spam.txt
Формат [Текст] - Добавить к существующему файлу
- Кнопка [Шаблон] - вставляем в редакторе шаблонов текст:
%REGEXPTEXT="w+[-w]*@w+[-w.]+w{2,4}" %Cursor - Кнопка [Ok] – сохраняем шаблон и возвращаемся в сортировщик писем
- Остальные пункты оставляем по умолчанию.
- Кнопка [Закрыть] – закрывает сортировщик и сохраняет введённый фильтр.
Сами плюшки MAILER-DAEMON в этом фильтре перемещаются в корзину, но, если надо, можно изменить для них папку назначения и создать специальную.
Не исключено, что данный фильтр вообще никогда не сработает :-), т.к. сообщения MAILER-DAEMON по каким-либо формальным признакам будут удалены ещё раньше при “Выборочном скачивании” (см. далее “Обработка почты на сервере”, фильтр № 12).
Фильтр № 3 пропускает письма отправителей с заданным нами кодом в теме (например, 456123), кроме тех, которые уже попали в группу "_Сортир". Раньше в старой схеме этого фильтра не было. Зачем же он нужен? Именно этот фильтр перемещает адрес отправителя, набравшего код в теме, из _Отстойника в _Шлюз, откуда мы впоследствии с помощью фильтра или вручную перенесём его либо в группу друзей, либо в группу спамеров "_Сортир".
Фильтр № 3.
- Выделяем ящик pupkin@mailserver.ru
- Меню [Ящик / Настройка сортировщика писем]
- Выделяем правило сортировки [Входящая почта]
- Кнопка [Создать]
- Вкладка [Правила]
- Название фильтра “Пропуск по ключу”
- Переместить письмо в папку
[Входящие] - Сигнальные строки:
Строки | Наличие | Где |
456123 | Тема | Да |
- Вкладка [Действия]
- [√] Добавить адрес(а) в адресную книгу Элементы: [Отправитель (От)] Добавить в группы: [_Шлюз]
- [√] Удалить адрес(а) из адресной книги: Элементы: [Отправитель (От)]
- Вкладка [Дополнительно]
- [√] Адрес должен присутствовать в адресной книге: Элементы: [Отправитель] [√] Адрес должен принадлежать группам: [_Отстойник+_Шлюз]
- [√] Адрес должен отсутствовать в адресной книге: Элементы: [Отправитель] [√] Проверять только следующие группы: [_Сортир]
- Остальные пункты оставляем по умолчанию
- Кнопка [Закрыть] – закрывает сортировщик и сохраняет введённый фильтр
Следующие два фильтра № 4 и 5 удаляют спам от отправителей из _Отстойника и _Сортира. Два фильтра понадобились потому, что повторные письма от адресатов из _Отстойника накапливаются в корзине, а их адреса не заносятся в стоп-лист, иначе они заблокируются на сервере, а письма от людей из _Сортира (они же из стоп-листа) уничтожаются непосредственно на сервере. Стоп-лист – это текстовый файл "spam.txt", который в нашем примере находится на диске C:, хотя его можно положить на любой диск в любую папку. Такая схема выглядит несколько избыточной: группа _Сортир в адресной книге дублирует стоп-лист в файле "spam.txt". Если отказаться от этого файла, то нельзя будет удалять сообщения на сервере правилом “Выборочное скачивание”. Тогда, может быть, обойтись только стоп-листом без _Сортира? Конечно можно, но при случайном удалении spam.txt, последний автоматически восстанавливается благодаря _Сортиру.
Фильтр № 4.
- Выделяем ящик pupkin@mailserver.ru
- Меню [Ящик / Настройка сортировщика писем]
- Выделяем правило сортировки [Входящая почта]
- Кнопка [Создать]
- Вкладка [Правила]
- Название фильтра “Спам-отстой”
- Переместить письмо в папку
[Корзина] - Вкладка [Действия]
- [√] Пометить письмо как прочитанное
- Вкладка [Дополнительно]
- [√] Адрес должен присутствовать в адресной книге Элементы: [Отправитель] [√] Адрес должен принадлежать группам: [_Отстойник]
- Остальные пункты оставляем по умолчанию
- Кнопка [Закрыть] – закрывает сортировщик и сохраняет введённый фильтр