Перевод статьи: Postfix and Postgrey: A proactive approach to spam filtering
Серый список - это ещё один способ избежать переполнения вашего почтового ящика спамом. Известная программа для борьбы со спамом - это spamassassin, который фильтрует письма. Серый список не пытается заменить такие программы, он работает как мощный проактивный барьер, который уменьшает общее количество спама, получаемое вашим почтовым сервером.
Серый список - это хороший способ борьбы со спамом, основная идея которого состоит в том, что почтовые серверы спамеров не соответствуют спецификации стандартов RFC. Главная мысль состоит в том, что почтовый сервер должен пытаться доставить письмо позже, если его не удалось доставить сразу. Отправляя одновременно много писем, спамеры не могут тратить так много ресурсов на повторную отправку писем, если письма не могут быть доставлены сразу. Поэтому если письмо не может быть доставлено с первого раза, они не пытаются отправить его снова.
Основываясь на этой идее, серый список просто отклоняет любое письмо из недоверенного домена, выдавая код ответа 450, который означает "Я не могу ответить на ваш запрос прямо сейчас, пожалуйста, попробуйте позже".
Поскольку почтовый сервер спамера обычно не соответствует RFC, он не будет повторять попытки и поэтому вы не получите спам.
Postgrey - это сервер политики postfix, реализующий серый список.
Он действительно легко интегрируется в postfix и действительно эффективен.
Postgrey хранит записи-триплеты: IP_КЛИЕНТА / ОТПРАВИТЕЛЬ / АДРЕСАТ. Если этот триплет появился впервые или он впервые появился менее 5 минут назад, запись помещается в серый список, а письмо отбрасывается с сообщением о временной ошибке. Если тот же триплет появится через 5 минут и до истечения 35 дней, то письмо будет принято.
Отметим, что 5 минут и 35 дней - это значения по умолчанию. Позже я объясню, как их можно поменять.
Для Postgrey существуют готовые пакеты в основной поставке Debian/Ubuntu, их очень легко установить. Вам просто нужно запустить:
$ sudo apt-get install postgrey
На системах подобных Debian, postgrey работает "из коробки". По умолчанию он привязывается к интерфейсу локальной петли (127.0.0.1) на порт 60000. Поэтому, служба postgrey не доступна снаружи.
Теперь, нам нужно сообщить postfix, что он должен использовать сервер политики postgrey.
Как было сказано ранее, интегрировать postgrey в postfix действительно просто (вам потребуется postfix версии 2.1 или выше). Все необходимые настройки вносятся в /etc/postfix/main.cf. Откройте /etc/postfix/main.cf и добавьте check_policy_service inet:127.0.0.1:60000 в конец smtpd_recipient_restrictions. У вас должно получиться что-то вроде этого:
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_policy_service inet:127.0.0.1:60000
Отметим, что ваши настройки могут быть другими.
Перезагрузим postfix:
$ sudo /etc/init.d/postfix reload
и как только вы это сделаете, вы получите работающую политику серого списка и почтовый сервер postfix начнёт временно отклонять поступающие письма. Вы увидите:
Nov 23 21:42:10 mymailserver postfix/smtpd[4256]: NOQUEUE: reject: RCPT from spammerrelay.com[xxx.xxx.xxx.xxx]: 450 <recipient@spammed.com>: Recipient address rejected: Greylisted for 300 seconds (see http://isg.ee.ethz.ch/tools /postgrey/help/spammed.com.html); from=<sender@spammer.com> to=<recipient@spammed.com> proto=ESMTP helo=<spammerrelay.com>
Начиная с этого момента общее количество спама, достигшее вашего почтового ящика кардинально уменьшится.
Теперь, тем кто хочет подстроить postgrey, настало время заглянуть в него немного глубже.
Есть два главных файла в каталоге /etc/postgrey: whitelist_clients и whitelist_recipients.
В файле whitelist_clients (белый список клиентов), вы можете определить список почтовых серверов, которые вы не хотите подвергать фильтрации по серому списку. Например потому, что вы доверяете этим узлам, или потому что это узел, который имеет проблемы с серым списком.
Адреса клиентов должны быть указаны одним из следующих способов:
В файле whitelist_recipients (белый список адресатов), вы можете указать список адресатов, на которых не распространяется действие серого списка.
Адреса получателей можно указать одним из следующих способов:
Ранее я упомянул о том, что postgrey подвергает письмо фильтрации по серому списку на 5 минут, если его триплет IP_КЛИЕНТА / ОТПРАВИТЕЛЬ / ПОЛУЧАТЕЛЬ встретился первый раз или если последний раз триплет встречался больше, чем 35 дней назад.
Так вот, эти настройки могут быть изменены при запуске демона postgrey. На системах подобных Debian, эти настройки находятся в /etc/default/postgrey.
По умолчанию этот файл содержит:
POSTGREY_OPTS="--inet=127.0.0.1:60000"
Теперь представим, что вы хотите блокировать письма по серому списку на 2 минуты, и позволить известному триплету проходить через серый список, если он удачно преодолел политику серого списка менее чем 20 дней назад. Тогда вам нужно воспользоваться следующими настройками:
POSTGREY_OPTS="--inet=127.0.0.1:60000 --delay=120 --max-age=20"
Также, postgrey предлагает приятную возможность, которая позволяет помещать в белый список те триплеты, для которых более 5 раз (значение по умолчанию) были успешно приняты письма после прохождения политики серого списка и если клиент последний раз встретился до истечения срока --max-age.
Значение по умолчанию можно изменить с помощью опции --auto-whitelist-clients. Установив его в 0, вы отключите эту возможность.
Если вы захотите заменить это значение указанными выше, измените файл /etc/default/postgrey и укажите в опции --auto-whitelist-clients необходимое значение, например:
POSTGREY_OPTS="--inet=127.0.0.1:60000 --delay=120 --max-age=20 --auto-whitelist-clients=10"
Postgrey отправляет статистику с помощью утилиты postgreyreport. С помощью postgreyreport вы сможете получить отчёт о триплетах, которые не прошли серый список (означает, что разница между первым и последним разом, когда они встретились, меньше --delay=N и поэтому они могут быть спамом).
Для получения отчёта вы можете воспользоваться следующей командной строкой:
# cat /var/log/mail.log | postgreyreport \ --nosingle_line --check_sender=mx,a --show_tries \ --separate_by_subnet=":===============================================================================================\n"
Она выведет нечто вроде следующего:
:=============================================================================================== unknown XXX.XXX.XXX.XXX 1 spammer1@spammer1.com user1@host1.com 1 spammer2@spammer2.com user2@host2.com 1 spammer3@spammer3.com user3@host3.com :=============================================================================================== unknown YYY.YYY.YYY.YYY 1 spammer4@spammer4.com user4@domain1.com :=============================================================================================== unknown ZZZ.ZZZ.ZZZ.ZZZ 1 spammer5@spammer5.com user1@host1.com 1 spammer6@spammer6.com user1@host1.com 1 spammer7@spammer7.com user2@host2.com :===============================================================================================
Postgrey действительно просто установить и вы получаете очень эффективно работающую систему сразу после её включения. Обратной стороной медали является то, что первое письмо от конкретного отправителя дойдёт с задержкой по меньшей мере на 5 минут (или на значение, указанное вами в настройках --delay).
Если это является для вас проблемой, вы вольны добавить в белый список /etc/postgrey/whitelist_clients доверенные домены отправителей.
Но в любом случае, даже если вы готовы ждать 5 минут, люди, с которыми вы часто обмениваетесь письмами, скоро попадут в автоматически наполняемый белый список и вы больше не будете терпеть задержки.