Серые списки


Сдать анализы недорого в москве www.gemotest.ru.

Черные списки обеспечивают одностороннюю защиту против известных источников спама. Белые списки описывают известные источники доброкачественной электронной почты. Ключевое слово в обоих случаях — «известные». Защититься от неизвестного источника угрозы гораздо сложнее, чем от известного. Механизм серых списков (greylists) способен обеспечить вполне приемлемый уровень защиты и позволит отклонять почту, поступающую из известных источников спама, и принимать ее из известных доброкачественных источников, помогая при этом сортировать почту из любых других источников по этим двум категориям.

Большинство источников макулатурной почты стремятся доставить максимум сообщений максимальному числу адресатов. Для этого они используют «урезанную» версию протокола SMTP. В частности, большинство ботнетов выполняют всего одну попытку доставить почту. Настоящие почтовые серверы будут производить такие попытки в течение пяти суток, а ботнеты сразу же сдаются, как только им сообщают о необходимости выполнить повторную попытку. Механизм серых списков учитывает эту особенность, отличающую ботнеты и настоящие почтовые серверы, отвергая почту от первых и принимая от вторых.

При первой попытке почтовый сервер с настроенным механизмом серых списков, принимая соединение от ранее неизвестного почтового сервера, возвращает код ошибки, который означает: «Временный сбой, пожалуйста, попробуйте повторить попытку позднее», одновременно фиксируя IP-адрес сервера-отправителя и электронный адрес получателя почты. Если удаленный почтовый сервер повторит попытку доставить ту же самую почту еще раз через заданный интервал времени, локальный почтовый сервер примет сообщение. После этого сервер, оснащенный механизмом серых списков, добавляет отправителя и получателя в список доброкачественных операций и некоторое время принимает все почтовые отправления, соответствующие этому описанию, без задержки. Типичный источник спама, предприняв всего одну попытку или две, в течение короткого промежутка времени, прекращает дальнейшие попытки.

Безусловно, спамеры пытаются подстроиться под складывающиеся условия, и некоторые ботнеты пытаются переслать почту через несколько часов. Хорошо, если за это время учредители черных списков успеют идентифицировать новые источники спама и добавить их IP-адреса в свои черные списки. У вас есть шанс воспользоваться преимуществами механизма серых списков.

Единственный недостаток серых списков — они задерживают доставку легитимной почты. Это так, хотя и с некоторыми оговорками. Администратор почтового сервера может добавлять известные ему источники доброкачественной почты в белый список, то есть список адресов источников электронной почты, которые никогда не должны проверяться механизмом серых списков. Так можно обеспечить беспрепятственное прохождение почты от крупных клиентов и важных деловых партнеров.

В разных агентах передачи почты (МТА) можно обнаружить множество различий в реализации серых списков. По моему мнению, наиболее мощным и удобным является реализация spamd(8) из OpenBSD, разработанная Бобом Беком (Bob Beck). Эта система серых списков применяет пакетный фильтр PF и обладает множеством способов* уменьшения потока макулатурной почты, но она очень сложна в настройке. Если на вашем почтовом сервере задействован пакетный фильтр, вам следует рассмотреть возможность применения spamd(8). Ниже приведен пример с milter-greylist (/usr/port/mail/milter-greylist) — более простой в настройке программой, дающей при этом почти такие же хорошие (хотя и менее забавные) результаты, как у spamd.

Конфигурирование milter-greylist

После установки milter-greylist загляните в конфигурационный файл /usr/local/etc/mail/greylist.conf. Это типичный для UNIX конфигурационный файл, содержащий серию определений параметров и их значений, где комментарии обозначены символами решетки (#). В этом конфигурационном файле можно задать предельные времена ожидания, IP-адреса соседних почтовых ретрансляторов, «белые» адреса отправителей и получателей и множество других характеристик. Здесь мы рассмотрим только те из них, которые необходимы для средней системы. Более подробную информацию о механизме серых списков вы найдете на странице руководства greylist.conf(5). milter-greylist — очень серьезный программный продукт и наверняка пригодится вам в отдельных ситуациях.

Базовая настройка программы

В начале конфигурационного файла расположен набор базовых параметров настройки программы. Вам не следует изменять их.

pidfile "/var/run/milter-greylist.pid"
socket "/var/milter-greylist/milter-greylist.sock"
dumpfile "/var/milter-greylist/greylist.db"
user "mailnull"

Параметр pidfile — это имя файла, в котором хранится числовой идентификатор процесса (PID) запущенного демона milter-sendmail(8). Параметр socket — это сокет UNIX, посредством которого демон Sendmail взаимодействует с демоном milter-sendmail. Параметр dumpfile — это база данных для идентификации доброкачественной почты. Обнаружив новый источник доброкачественной почты, milter-greylist добавляет его в эту базу данных. Наконец, параметр user определяет непривилегированную учетную запись, с правами которой работает демон milter-sendmail.

Соседние почтовые ретрансляторы

Если в сети несколько почтовых ретрансляторов, могут наблюдаться попытки доставить легитимную почту через все ретрансляторы по порядку. Это типичное поведение легитимных ретрансляторов почты, поэтому механизм серых списков должен учитывать данную особенность. Параметр peer позволяет указать адреса других почтовых ретрансляторов, также использующих механизм серых списков, с целью обеспечить синхронизацию баз данных между ними. Допустим, у меня имеется основной почтовый сервер и три резервных почтовых ретранслятора с адресами 192.168.1.1, 172.16.18.3 и 10.19.84.3 — я мог бы перечислить их в конфигурационном файле как соседние почтовые ретрансляторы:

peer 192.168.1.1
peer 172.16.18.3
peer 10.19.84.3

Как только я добавлю соответствующие записи в конфигурацию других почтовых ретрансляторов, они автоматически начнут обмениваться между собой данными серого списка.

Списки адресов

Можно определять отдельные списки IP-адресов (ключевое слово list) и имен (ключевое слово addr). Адреса в списке нужно заключить в фигурные скобки, разделяя пробелами. Например, можно создать список с названием my network, который будет содержать IP-адреса компьютеров вашей организации:

list "my network" addr {198.22.63.0/24 192.168.0.0/16}

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

list "broken mta" addr { \
        12.5.136.141/32 \ # Southwest Airlines (unique sender)
        12.5.136.142/32 \ # Southwest Airlines
        12.5.136.143/32 \ # Southwest Airlines
...

Для каждого сервера в списке есть комментарий, облегчающий его идентификацию, — это позволяет списку бесконечно удлиняться, оставаясь удобочитаемым.

Списки доменов

Список доменов похож на список адресов. Каждый домен должен быть фактическим доменным именем почтового сервера, выполняющего входящее соединение, а не доменным именем адреса электронной почты конечного пользователя. Например, стремясь обеспечить беспрепятственное обслуживание электронной почты от моего издателя, я создал список, который включает его домен. Электронная почта от моего издателя может приходить с сервера nostarch.com или с одного из компьютеров провайдера, к чьим услугам он прибегает, из домена laughingsquid.net. Список доменов задается с помощью ключевого слова domain:

list "good domains" domain { nostarch.com laughingsquid.net}

Списки пользователей

С помощью параметра rcpt можно создавать списки своих пользователей, чтобы применять для них особые правила обработки почты:

list "spam lovers" rcpt { \
    sales@absolutefreebsd.com \
    cstrzelc@stenchmaster.com \
}

Списки управления доступом

milter-greylist обслуживает входящие соединения в соответствии с правилами, определенными в списках управления доступом (access control lists, ACL). Списки управления доступом позволяют применять механизм серых списков с той или иной степенью точности по вашему выбору, milter-greylist проверяет входящие сообщения на соответствие правилам списков управления доступом и применяет первое подошедшее правило. Чтобы определить поведение сервера для сообщений, которые не совпали ни с одним из предыдущих правил, можно использовать специальное определение acl default, что очень похоже на то, как производится прием или отклонение пакетов по умолчанию в пакетном фильтре. Например, следующие правила разрешают прием почты из локальной сети от известных почтовых серверов, для работы с которыми не должен использоваться механизм серых списков, а также от моего издателя. Некоторые из моих пользователей не нуждаются в обслуживании механизмом серых списков, поэтому они специально помещены в белый список, но вся остальная электронная почта проверяется механизмом серых списков:

acl whitelist list "my network"
acl whitelist list "good domains"
acl whitelist list "broken mta"
acl whitelist list "span lovers"
acl greylist default

Первая запись разрешает прием электронной почты, приходящей от компьютеров с IP-адресами, включенными в список my network. Вторая разрешает прием электронной почты, исходящей из доменов, перечисленных в списке good domains. Третья разрешает прием электронной почты, приходящей от компьютеров с IP-адресами, включенными в список broken mta. Четвертая запись определяет пользователей, которые не будут защищены механизмом серых списков, то есть будут получать всю почту без исключений. Наконец, вся остальная почта по умолчанию будет подвергаться дополнительной проверке, то есть отправителям придется подтвердить, что они являются нормальными почтовыми серверами, прежде чем предлагаемая ими почта будет принята.

Интервалы времени в серых списках

По умолчанию milter-greylist требует повторить передачу через три минуты. Некоторые спамботы пытаются повторить передачу макулатурной почты в течение нескольких минут, но очень немногие готовы ждать 30 минут. Поведение спамботов меняется по мере роста мощности компьютеров, и я не удивлюсь, если со временем они смогут повторять передачу через все более и более длительные интервалы. Так или иначе, вам придется настроить период временного отказа. Делается это с помощью ключевого слова delay в списках управления доступом. Для обозначения дней, часов и минут можно использовать сокращения d, h и m, соответственно. Ниже я задал интервал времени ожидания, равный двум часам, что было безумно долго для 2007 года, но, к сожалению, достаточно разумно для последующей пары лет:

acl greylist default delay 2h

Как только сервер-отправитель пройдет проверку, milter-greylist сохранит информацию о нем до следующей проверки сервера, которая состоится через трое суток. В течение этого времени вся входящая почта от этого сервера будет приниматься без задержки. Возможно, вам потребуется изменить этот интервал, это зависит от вашего окружения. Величина этого интервала задается с помощью ключевого слова autowhite. Следующая настройка предписывает milter-greylist пропускать почту от отправителей, благополучно прошедших проверку, в течение 30 суток.

acl greylist default autowhite 30d

Как правило, временные интервалы, устанавливаемые для механизма серых списков, сильно зависят от вашего окружения. Может оказаться, что для успешной борьбы со спамом вам вполне хватит пятиминутной задержки, а другим для отсева макулатурной почты может потребоваться увеличить интервал задержки до нескольких часов.

Подключение milter-greylist к Sendmail

milter-greylist исполняется за пределами Sendmail. Как же организовать взаимодействие между Sendmail и milter-greylist? Ключом к успеху является интерфейс подключения Sendmail, позволяющий внешним программам подключаться к Sendmail для обеспечения дополнительной функциональности.

При установке milter-greylist из «портов» вы увидите инструкции по подключению milter-greylist к Sendmail. Обычно для этого придется добавить несколько строк в конец файла <имя_хоста>.mc и пересобрать sendmail.cf. Например, во время написания этих строк «порт» milter-greylist предлагал добавить в файл .mc следующее:

Записи, начинающиеся с ключевого слова define, присваивают значения макроопределениям внутри Sendmail, а инструкция INPUT_MAIL_FILTER предписывает Sendmail пропускать входящую почту через фильтр, доступный через указанный сокет домена UNIX.

Я добавил эти строки в файл sendmail.mc и запустил команду make all restart. Sendmail тут же начал общаться с запущенным ранее процессом milter-greylist, и спустя 15 минут широкий и мутный от макулатурной почты поток превратился в прозрачный ручеек легитимной почты.*

Комментарии запрещены.