Необходимость защиты
Электронная почта является одним из основных способов коммуникации как между сотрудниками издательского дома, так и между внештатными авторами, а также для общения с читателями. Специфика применения электронной почты состоит в том, что адреса почтовых ящиков публикуются как в печатных, так и в электронных СМИ. Для спамеров не составляет труда добавить адреса в свои базы и использовать их в дальнейшем.
Впервые проблема борьбы со спамом остро возникла четыре года назад. Наша компания использовала MS Exchange в качестве MTA, количество почтовых адресов было чуть больше тысячи. Фильтрация входящих писем отсутствовала полностью. Более того, одним из побочных эффектов использования MS Exchange было то, что письма на несуществующие адреса принимались сервером и потом отправлялись обратно как часть DND сообщений.
Использование sendmail и модуля milter-sender для фильтрации спама
Первым шагом в борьбе с нежелательной почтой явилась установка дополнительных релеев, через которые бы проходила вся почта. В качестве ОС использовалась одна из разновидностей UNIX систем с открытым кодом FreeBSD, в качестве MTA — всем известный sendmail.
Указанный MTA имеет возможность подключения дополнительных фильтров через программный интерфейс milter (mail filter), что и было сделано — к нему был подцеплен milter-sender. Назначение фильтра вытекает из его названия. Фильтр осуществляет проверку отправителя письма, в частности, проверяется следующее:
- IP-адрес отправителя не должен принадлежать к блоку зарезервированных адресов (из RFC 3330 и 3513);
- IP-адрес отправителя не должен числиться в RBL;
- IP-адрес отправителя должен иметь PTR запись в обратной зоне;
- адрес отправителя должен иметь правильный формат;
- домен отправителя должен существовать;
- хотя бы один из MX серверов отправителя должен быть доступен и готов принимать почту на адрес отправителя.
Стандартная конфигурация MTA также была изменена следующим образом: при приеме писем из Интернета происходила проверка существования получателя в Active Directory.
После запуска релеев в эксплуатацию объем входящего почтового трафика значительно уменьшился. Количество спама сократилось, но оно все еще оставалось достаточно высоким. Таким образом, можно было констатировать, что подход, основанный только на проверке отправителя, не эффективен против спама.
Использование SpamAssassin для фильтрации спама
Вторым шагом стала установка системы анализа содержимого и заголовков письма. После ознакомления с существующими на тот момент продуктами, было принято решение использовать SpamAssassin и модуль milter-spamc для взаимодействия с sendmail.
Принцип работы SpamAssassin следующий: все письмо, включая заголовки, подвергается анализу. Его цель — поиск определенных признаков спама. Учитываются как «неправильные» и/или «фальсифицированные» заголовки, так и присутствие определенных слов, фраз и их сочетаний. Далее происходит сложение весов всех признаков. Если сумма больше определенного значения, которое устанавливается администратором, то письмо считается спамом.
Тестовые прогоны SpamAssassin показали, что предложенная схема деления всего потока на спам и не-спам не подходит. Частично это было связано с тем, что SpamAssassin не рассчитан на русскоязычных пользователей, и слишком велики были пропуски спам-писем даже после коррекции весов и добавления компенсирующих признаков. Более того, регулярные выражения для поиска ключевых слов и фраз необходимо было писать дважды (первый раз для кодировки koi8-r, второй — для windows-1251), что также усложняло процесс конфигурирования.
В результате доработки весь поток стал делиться на три группы (соответственно, существовало не два, а три диапазона, на попадание в которые проверялась общая сумма весов признаков):
- хорошие письма — письмо доставлялось адресату без изменений;
- подозрительные письма — письмо доставлялось адресату с пометкой «СПАМ» и попадало в специальный ящик для подозрительных писем, содержимое которого использовалось в дальнейшем администратором почтового сервера для подстройки фильтров SpamAssassin;
- спам — в этом случае письмо конечному адресату не доставлялось, а попадало в другой специальный ящик, доступ к которому был только у администратора почтовой системы.
В первые два месяца с начального момента запуска указанной схемы средний диапазон (с подозрительными письмами) постепенно сужался путем добавления новых признаков и подстройки весов. В итоге, данная схема успешно работала и показала высокое качество фильтрации нежелательной почты. Количество ложных срабатываний и пропущенных писем также было приемлемым.
Основным недостатком описанной выше схемы являлась постоянная необходимость анализа подозрительных писем с целью выделения общих признаков и подбора весов. Процесс этот довольно трудоемкий и не отличается оперативностью. Разбор и анализ одного письма отнимал до получаса, в зависимости от уловок, используемых спамерами. Если же возникали более приоритетные задачи, то процесс разбора откладывался. Таким образом, в начале спам-рассылок нескольким письмам обычно удавалось прорываться до того, как конфигурация SpamAssassin менялась соответствующим образом. Более того, некоторые нежелательные письма отфильтровать оказалось невозможно.
Greylisting как альтернативное решение защиты от спама
Протокол SMTP, который используется для передачи электронных писем, имеет возможность в случае временного отказа в приеме письма предпринять попытку отправить его позже. Если письмо не удалось отправить в первый раз, то оно попадает в очередь и хранится там, при этом сервер периодически предпринимает попытки отправить его повторно.
Спамеры обычно пытаются решить задачу рассылки писем как можно большему количеству адресатов. При этом они используют самодельный софт, работающий на их же машине, не утруждая себя тонкостями реализации протокола SMTP и обработкой нестандартных ситуаций, возникших во время SMTP-сессии. Частично это связано с тем, что количество адресатов в рассылке исчисляется миллионами, а соответствующими объемами устройств хранения спамеры не располагают. Аналогичная ситуация наблюдается и в случае, когда рассылающая спам или зараженные письма машина является частью зомби-сети.
Типичный самодельный «отправляльщик» работает по принципу «соединился, выдал в канал заранее сформированную последовательность SMTP-команд (зачастую не дожидаясь даже приветствия сервера, — позже мы к этому вернемся) и закрыл соединение». Повторных попыток отправить письмо адресату не предпринимается, а очередь отсутствует за ненадобностью.
Подход к приему писем, когда первая попытка заканчивается временным отказом, получил название «greylisting» (серый список). Но отказы в приеме каждого нового письма с первого раза ведут к увеличению почтового трафика и вносят значительные задержки в доставке писем, поэтому современные реализации используют два списка: серый список и список разрешенных. Если не вдаваться в детали, то алгоритм работы такого модифицированного серого списка можно представить следующим образом:
- В начале каждой новой SMTP-сессии происходит поиск триплекса «IP-адрес отправителя, почтовый адрес отправителя и почтовый адрес получателя» в списке разрешенных. Если он там существует, то письмо проходит без задержек.
- Далее происходит поиск триплекса в сером списке. Если он там найден, то письмо также проходит, а триплекс переносится в список разрешенных.
- В противном случае триплекс запоминается в сером списке, а удаленной стороне возвращается сообщение о временной недоступности сервиса (обычно еще указывается, через какое время можно предпринять повторную попытку отправить письмо).
Администратор сервера задает время жизни триплекса в сером списке и списке разрешенных, по истечении этого времени запись из списка удаляется. Такой подход позволяет значительно сократить объемы служебного почтового трафика, обусловленного работой серого списка. Более того, только первое письмо доходит до адресата с задержкой, остальные же доставляются сразу (в случае, когда существует соответствующий триплекс в списке разрешенных).
В качестве программной реализации описанного выше алгоритма был выбран свободно распространяемый код milter-greylist. Указанное ПО является фильтром, который через milter-интерфейс получает от sendmail и анализирует команды SMTP-сессии. Помимо модифицированного серого списка milter-greylist обладает следующими дополнительными возможностями:
- При наличии двух и более почтовых релеев возможно настроить milter-greylist таким образом, чтобы серый список и список разрешенных синхронизировались между серверами; это позволяет отслеживать как попытки обхода системы, так и осуществлять корректную обработку случая, когда один из принимающих почтовых серверов недоступен (например, находится на техническом обслуживании).
- При правильно настроенной SPF-записи у отправителя возможно автоматическое занесение триплекса в список разрешенных, что позволяет свести к нулю задержки для «правильных» доменов.
- Возможно ручное управление списком разрешенных — добавление определенных получателей и/или отправителей, их доменов или IP-адресов в список разрешенных, что бывает необходимо для «борьбы» с неправильно настроенными почтовыми серверами, а также для обработки исключений (например, адресов abuse и postmaster, которые должны иметь возможность принимать всю почту).
Одновременно с запуском серого списка конфигурация sendmail была модифицирована следующим образом: введено ограничение на одновременное количество SMTP-сессий с одного IP-адреса, и добавлена задержка между открытием SMTP-соединения и выводом приветствия сервером. Если с первым все понятно, то второе требует небольших комментариев.
В RFC 2821, раздел 4.3.1, сказано, что отправляющая сторона после установления соединения должна ждать до тех пор, пока сервер получателя не выдаст приветствие. Честные почтовые сервера так и поступают, чего нельзя сказать о самодельном программном обеспечении, предназначенном для массовых рассылок или распространения вирусного кода. Как было сказано выше, такие отправители не анализируют ответы принимающего сервера, а, следовательно, не проверяют, было ли это приглашение или нет, нарушая требования стандарта.
Задержка приветствия позволяет отказать подобным клиентам в обслуживании. В начале SMTP-соединения sendmail ждет определенное время, прежде чем выдать приветствие клиенту. Если в этот период времени от клиента что-то пришло, то sendmail выдает предупреждение и блокирует прием письма.
Отказ от SpamAssassin и замена его на milter-greylist позволила добиться высокого уровня отсева нежелательной входящей почты. При этом временные затраты на поддержку системы были сведены к минимуму. Необходимость в постоянном анализе и модификации конфигурации SpamAssassin при этом отсутствует.
Результаты
Подводя итоги, обратимся к цифрам. На настоящий момент входящий почтовый трафик составляет порядка трех Гигабайт в день. Весь этот объем распределяется между тремя тысячами электронных ящиков. Результаты разбора лог-файлов почтовых серверов представлены в таблице ниже (только входящая почта, логи на одни сутки):
писем, шт | писем, %% | комментарий |
140960 | 100.0 | всего попыток передать почту |
16194 | 11.5 | принято и доставлено |
61968 | 44.0 | отказано в приеме; причина — отправитель или получатель не существуют (milter-sender) |
25866 | 18.3 | отказано в приеме; причина — активность клиента до выдачи приглашения |
23399 | 16.6 | отказано в приеме; причина — IP-адрес клиента не имеет записи в обратной зоне |
7981 | 5.7 | временно отказано в приеме; причина — триплекс добавлен в серый список (milter-greylist) |
5229 | 3.7 | SMTP-сессия прервана по тайм-ауту |
323 | 0.2 | отказано в приеме; причина — письмо содержит вирус |
Как видно из таблицы, примерно одной трети входящих SMTP-сессий отказывается в приеме писем в момент установления соединения, а половине всех входящих сессий позже: после проверок, которые требуют обращения во внешний мир. Низкий процент временных отказов в приеме обусловлен тем, что большинство писем отбрасывается раньше и очередь до проверок milter-greylist не доходит. Этим же обусловлен низкий процент писем с вирусами.
Что касается прошедших все фильтры и доставленных в ящик писем, то из них примерно 2-7% являются спамом. В последнее время наметилась печальная тенденция — этот процент неуклонно растет, что свидетельствует о появлении новой технологии рассылки спама.
Заключение
После четырех лет эксплуатации разнообразных систем фильтрации почты я могу сказать, что ни один из методов не являлся абсолютным фильтром, но все они с переменным успехом спасали от спама.
В самом начале все ограничивалось использованием списков запрещенных, которые были просты в настройке, не требовали обслуживания, и, что самое важное, имели высокий показатель отсева нежелательных писем. Сейчас же система фильтрации почты состоит из нескольких компонентов, каждый из которых является независимой от других подсистемой, со всеми вытекающими отсюда последствиями. Поддержка такого «зоопарка» является не простым занятием, но главная проблема в другом. Спамеры уже перешли на новый качественный уровень. Они научились создавать письма, которые обходят все используемые фильтры. Подробный разбор заголовков выявил следующие закономерности: либо письма идут с существующих почтовых адресов, либо для рассылки используются бесплатные почтовые сервера. Поймать подобные письма возможно только в случае использования систем анализа содержимого письма. Одной из подобных систем является SpamAssasin, но он не подходит для фильтрации русского спама, а также для спама, в котором информация подается в виде рисунка.
Спамеры постоянно совершенствуют свои программы, что-то изобретая и модифицируя. Следовательно, для победы в борьбе с ними необходимо постоянно совершенствовать систему фильтрации, постоянно следить за технологиями, используемыми как спамерами, так и для борьбы с ними. Противостоять сообществу спамеров один человек уже не в состоянии.
В чем выход? Я полагаю, что настало время применения специализированных антиспам-продуктов, которые используют комбинированные методы отсева нежелательной почты, дополняя их уникальными технологиями анализа содержимого письма.
Антиспам «своими руками»: плюсы и минусы