настройка "greylisting" для postfix (postgrey)

или борьба со спамом продолжается

Довольно спорный, но достаточно эффективный инструмент для борьбы со спамом – грейлистинг. Суть проста, не принимать почту от новых источников, отклонив письмо на несколько минут со словами "зайдите завтра". Добропорядочный почтовый сервер обязательно зайдет. Типичный бот-спаммер – нет. Так и живём.

1. Установка Postgrey для Postfix на платформе Debian

Пакет Postgrey уже имеется в репозиториях Debian, поэтому сразу приступим к его установке:

root@mail:/# apt-get install postgrey

Warning: The home dir /var/lib/postgrey you specified can't be accessed: No such file or directory
Adding system user `postgrey' (UID 111) ...
Adding new group `postgrey' (GID 112) ...
Adding new user `postgrey' (UID 111) with group `postgrey' ...
Not creating home directory `/var/lib/postgrey'.

Creating config file /etc/postgrey/whitelist_clients with new version
Creating config file /etc/postgrey/whitelist_recipients with new version
Creating config file /etc/default/postgrey with new version
[ ok ] Starting postfix greylisting daemon: postgrey.

Фактически, сразу после установки – всё готово к употреблению. Взгялнув на файл конфигурации /etc/default/postgrey, либо посмотрев через netstat, определяем порт 10023, на котором работает эта служба. Здесь же видно, что письма "откладываются" на 300 секунд и прошедшие проверку отправители запоминаются на 35 дней.

По умолчанию, Postgrey отклоняет новые сообщения на 5 минут (300 секунд), но как показывает практика имеет смысл сократить этот промежуток до одной минуты, используя опцию --delay. В дальнейшем, проанализировав лог Вы можете изменить это значение в любую сторону, по Вашему желанию.

root@mail:/# vim /etc/default/postgrey

POSTGREY_OPTS="--inet=10023 --delay=60"

Также, как видно по логу установки, создано два белых списка для перечисления доменов-отправителей и клиентов-получателей, от которых почта будет проходить без задержки. Действительно может быть логичным "отбелить" прохождение почты на ящики вида postmaster@ или abuse@ (иначе рейтинг Вашего почтового сервера может пострадать) или с почтовых серверов Gmail.

Дело осталось за малым, добавить наш инструмент в цепочку smtpd_recipient_restrictions, вот таким способом:

smtpd_recipient_restrictions =
                          permit_mynetworks
                          ...
                          reject_unauth_destination
                          # реализуем greylisting через postgrey
                          check_policy_service inet:localhost:10023

Перезапускаем Postfix и служба начинает нести бессменную вахту на страже нашего почтового сервера.

root@mail:/# service postgrey start
root@mail:/# service postfix reload

Также добавим службу Postgrey в автозагрузку:

root@mail:/# chkconfig postgrey --level=345 on 

Пример успешной работы службы можно посмотреть на примере этого кусочка лог-файла:

May 16 09:03:25 mail postfix/smtpd[1535]: connect from verifier.port25.com[96.244.219.19]
May 16 09:03:25 mail postgrey[1280]: action=greylist, reason=new, client_name=verifier.port25.com, client_address=96.244.219.19, sender=auth-results@verifier.port25.com, recipient=admin@example.com
May 16 09:03:25 mail postfix/smtpd[1535]: NOQUEUE: reject: RCPT from verifier.port25.com[96.244.219.19]: 450 4.2.0 <admin@example.com>: Recipient address rejected: Greylisted, see http://postgrey.schweikert.ch/help/example.com.html; from=<auth-results@verifier.port25.com> to=<admin@example.com> proto=ESMTP helo=<verifier.port25.com>
May 16 09:03:25 mail postfix/smtpd[1535]: disconnect from verifier.port25.com[96.244.219.19]
...
...
May 16 09:13:26 mail postfix/smtpd[1544]: connect from verifier.port25.com[96.244.219.19]
May 16 09:13:26 mail postgrey[1280]: action=pass, reason=triplet found, delay=601, client_name=verifier.port25.com, client_address=96.244.219.19, sender=auth-results@verifier.port25.com, recipient=admin@example.com
...

2. Отчеты Postgreyreport

Одновременно с установкой Postgrey, устанавливается замечательный инструмент для генерации отчётов postgreyreport. Сий инструмент парсит Ваш почтовый лог-файл и сравнивает со своей базой, выводя хосты/отправителей/получателей, так и не повторивших посылку в течении заданного времени.

Типичный пример:

root@mail:/# cat /var/log/mail.info | /usr/bin/postgreyreport --delay=300

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

root@mail:/# cat /var/log/mail.info | postgreyreport | awk '{print $1}' | sort | uniq -c | sort -nr | head -n20

Чтобы получить список 20 популярных клиентов-получателей с указанием числа "застрявших" (неподтверждённых) сообщений, используйте:

root@mail:/# cat /var/log/mail.info | postgreyreport | awk '{print $4}' | sort | uniq -c | sort -nr | head -n20

Впечатляет, неправда-ли? И вообще, почитайте справку и будет Вам щастье:

root@mail:/# postgreyreport -h

Комментарии 1

  1. Василь — Feb 01, 2016 at 04:54 PM

    Как насчёт статьи про перевод базы postgrey на mysql? Статья что я нашёл, очень старые и работать на последних версиях postgrey не будут.

  • 1
Разрешённые теги: <b><i><br>