Антиспам-система Боярского почтового сервера
Добавлено: Сб, 25 июл 2009, 03:45
В процессе масштабного обновления Боярского почтового сервера было принято решение установить на него многоуровневую систему борьбы со спамом.
Мы до последнего старались избежать этого неоднозначного шага, потому что на сегодняшний день не существует ни одной антиспам-системы, которая бы на 100% гарантировала, что ни одно из нужных вам писем не будет ошибочно признано спамом. Тем не менее, количество спама, распространяемого в настоящий момент, уже не оставляет выбора, пользоваться антиспам-системой или нет: выбирать можно лишь тип такой системы.
В данном постинге я постараюсь описать принципы построения нашей системы защиты от спама, чтобы продвинутым пользователям было легче вести предварительную диагностику возможных проблем, которые могут возникать в процессе ее работы. Я надеюсь на вашу помощь в оптимизации работы нашей антиспам-системы.
Как я уже писал, система многоуровневая, т.е. все сообщения проходят не один фильтр, а несколько.
Сделано это для того, чтобы каждый отдельный фильтр можно было сделать максимально мягким и свести к минимуму количество ложных сработок.
При описании этих уровней я буду указывать количество писем, прошедших через эту систему за последние 24 часа, чтобы было проще сориентироваться в "агрессивности" и эффективности того или иного фильтра.
Итак, за последние сутки внешние хосты попытались прислать нам 35528 писем.
На первом этапе все входящие сообщения встретили систему Spam Repellent. Принцип ее работы состоит в том, чтобы формировать специальным образом подобранные задержки в процессе получения входящий писем. Эта самый простой, и в то же время самый эффективный способ фильтрации. Дело в том, что большинство спам-ботов очень сильно спешат. Их задача - успеть отправить как можно больше писем, пока используемый ими ip не попадет в блок-листы. Поэтому у них всегда стоит достаточно жесткий лимит на время оправки каждого отдельного письма. Если за это время сервер получателя не успел до конца принять письмо, спам-бот разрывает соединение и переходит к следующей жертве: каким бы количеством потоков он не отправлял письма, а долго ждать он все равно не сможет.
В отличии от спам-ботов, нормальные почтовые сервера обычно готовы к довольно длительным таймаутам. Например, максимальная задержка приветствия обычно составляет не менее 30 секунд. Наш сервер задерживает приветствие на 25 секунд...
В результате работы Spam Repellent, за последние сутки не дождались завершения приема нашим сервером писем и отказались от отправки отправители 21210 сообщений! Это очень хороший результат, учитывая что ложные "сработки" здесь бывают крайне редко и в худшем случае приводят к повторной попытке отправки легальным сервером не прошедшего с первого раза письма.
Во время задержки приветствия начинает работать второй фильтр - система анти-бомбинга. Она проверяет по своей базе предыдущую активность ip-адреса по рядку критериев (отправка множественных сходных сообщений за последний час, отправка писем не существующим пользователям в наших доменах и т.д.). В случае обнаружения серьезных признаков спамерской активности со стороны данного ip-адреса, соединение с таким ip разрывается по инициативе сервера. За последние сутки таким образом было отказано в приеме 2359 писем.
Если соединение установлено и адрес получателя лежит за пределами наших доменов, отправителю предлагается пройти smtp-аутентификацию. После всех этих проверок, сервер согласился целиком принять к дальнейшему рассмотрению чуть больше четверти изначально направленных к нам писем: 9808.
24 письма были сразу же убиты, так как имели некорректный формат (например, в них вообще не было поля темы). Все остальные были направлены на анализ содержимого по принципу набора баллов. Я отказался от прямого блокирования писем на основании того, что какой-то из дальнейших фильтров однозначно признает его спамом. Вместо этого, штрафные баллы от каждого из фильтров складываются и только если их сумма превышает определенное пороговое значение, данное письмо признается спамом - таким образом я постарался максимально снизить вероятность ложных сработок.
В качестве антиспам-баз я использую SORBS DNSBL и SpamHaus Zen - они показали максимальную практическую эффективность. От всевозможные SpamCop'ов и иже с ними я пока отказался - мне не понравилось, как они работают. Также мне не понравились при тестировании технологии Caller ID и SPF - на данный момент они практически бесполезны.
Окончательную фильтрацию сообщений проводит SpamAssassin.
В результате, спамом были признаны 7358 писем. Таким образом, полный цикл антиспам-проверки прошли лишь 2426 писем: это около 7% от их изначального числа. Хочу дополнительно заметить: среди этих 7% по-прежнему содержится немало спама, но дальнейшая фильтрация неизбежно приведет к резкому увеличению числа ложных сработок. Единственный способ, с помощью которого можно дополнительно уменьшить количество спама - обучение спам-фильтров самими пользователями. Для этого вам нужно просто помечать письма как "спам" через веб-интерфес нашего сервера. А те письма, которые были признаны спамом ошибочно - наоборот помечать как "не спам". Пока что такая возможность есть, так как признанные спамом сообщения не удаляются, а лишь получают соответствующую отметку. При использовании web-интерфейса они автоматически попадают в нужную папку. Если для доступа к почте вы используете локальный почтовый клиент, то обязанность сортировки на основании пометок сервера ложиться на него. В дальнейшем, после того как число ложных сработок снизится до приемлемого, спам-сообщения начнут автоматически удаляться.
P.S.: Вложения всех принятыех сервером сообщений прошли проверку антивирусом. За последние сутки в них было найдено и удалено 115 вирусов.
Мы до последнего старались избежать этого неоднозначного шага, потому что на сегодняшний день не существует ни одной антиспам-системы, которая бы на 100% гарантировала, что ни одно из нужных вам писем не будет ошибочно признано спамом. Тем не менее, количество спама, распространяемого в настоящий момент, уже не оставляет выбора, пользоваться антиспам-системой или нет: выбирать можно лишь тип такой системы.
В данном постинге я постараюсь описать принципы построения нашей системы защиты от спама, чтобы продвинутым пользователям было легче вести предварительную диагностику возможных проблем, которые могут возникать в процессе ее работы. Я надеюсь на вашу помощь в оптимизации работы нашей антиспам-системы.
Как я уже писал, система многоуровневая, т.е. все сообщения проходят не один фильтр, а несколько.
Сделано это для того, чтобы каждый отдельный фильтр можно было сделать максимально мягким и свести к минимуму количество ложных сработок.
При описании этих уровней я буду указывать количество писем, прошедших через эту систему за последние 24 часа, чтобы было проще сориентироваться в "агрессивности" и эффективности того или иного фильтра.
Итак, за последние сутки внешние хосты попытались прислать нам 35528 писем.
На первом этапе все входящие сообщения встретили систему Spam Repellent. Принцип ее работы состоит в том, чтобы формировать специальным образом подобранные задержки в процессе получения входящий писем. Эта самый простой, и в то же время самый эффективный способ фильтрации. Дело в том, что большинство спам-ботов очень сильно спешат. Их задача - успеть отправить как можно больше писем, пока используемый ими ip не попадет в блок-листы. Поэтому у них всегда стоит достаточно жесткий лимит на время оправки каждого отдельного письма. Если за это время сервер получателя не успел до конца принять письмо, спам-бот разрывает соединение и переходит к следующей жертве: каким бы количеством потоков он не отправлял письма, а долго ждать он все равно не сможет.
В отличии от спам-ботов, нормальные почтовые сервера обычно готовы к довольно длительным таймаутам. Например, максимальная задержка приветствия обычно составляет не менее 30 секунд. Наш сервер задерживает приветствие на 25 секунд...
В результате работы Spam Repellent, за последние сутки не дождались завершения приема нашим сервером писем и отказались от отправки отправители 21210 сообщений! Это очень хороший результат, учитывая что ложные "сработки" здесь бывают крайне редко и в худшем случае приводят к повторной попытке отправки легальным сервером не прошедшего с первого раза письма.
Во время задержки приветствия начинает работать второй фильтр - система анти-бомбинга. Она проверяет по своей базе предыдущую активность ip-адреса по рядку критериев (отправка множественных сходных сообщений за последний час, отправка писем не существующим пользователям в наших доменах и т.д.). В случае обнаружения серьезных признаков спамерской активности со стороны данного ip-адреса, соединение с таким ip разрывается по инициативе сервера. За последние сутки таким образом было отказано в приеме 2359 писем.
Если соединение установлено и адрес получателя лежит за пределами наших доменов, отправителю предлагается пройти smtp-аутентификацию. После всех этих проверок, сервер согласился целиком принять к дальнейшему рассмотрению чуть больше четверти изначально направленных к нам писем: 9808.
24 письма были сразу же убиты, так как имели некорректный формат (например, в них вообще не было поля темы). Все остальные были направлены на анализ содержимого по принципу набора баллов. Я отказался от прямого блокирования писем на основании того, что какой-то из дальнейших фильтров однозначно признает его спамом. Вместо этого, штрафные баллы от каждого из фильтров складываются и только если их сумма превышает определенное пороговое значение, данное письмо признается спамом - таким образом я постарался максимально снизить вероятность ложных сработок.
В качестве антиспам-баз я использую SORBS DNSBL и SpamHaus Zen - они показали максимальную практическую эффективность. От всевозможные SpamCop'ов и иже с ними я пока отказался - мне не понравилось, как они работают. Также мне не понравились при тестировании технологии Caller ID и SPF - на данный момент они практически бесполезны.
Окончательную фильтрацию сообщений проводит SpamAssassin.
В результате, спамом были признаны 7358 писем. Таким образом, полный цикл антиспам-проверки прошли лишь 2426 писем: это около 7% от их изначального числа. Хочу дополнительно заметить: среди этих 7% по-прежнему содержится немало спама, но дальнейшая фильтрация неизбежно приведет к резкому увеличению числа ложных сработок. Единственный способ, с помощью которого можно дополнительно уменьшить количество спама - обучение спам-фильтров самими пользователями. Для этого вам нужно просто помечать письма как "спам" через веб-интерфес нашего сервера. А те письма, которые были признаны спамом ошибочно - наоборот помечать как "не спам". Пока что такая возможность есть, так как признанные спамом сообщения не удаляются, а лишь получают соответствующую отметку. При использовании web-интерфейса они автоматически попадают в нужную папку. Если для доступа к почте вы используете локальный почтовый клиент, то обязанность сортировки на основании пометок сервера ложиться на него. В дальнейшем, после того как число ложных сработок снизится до приемлемого, спам-сообщения начнут автоматически удаляться.
P.S.: Вложения всех принятыех сервером сообщений прошли проверку антивирусом. За последние сутки в них было найдено и удалено 115 вирусов.