Greylisting с Postfix и Postgrey — простая и эффективная защита от спама

Спам — это как пыль: вроде и не страшно, но постоянно раздражает и требует внимания. Особенно, если вы администрируете почтовый сервер. Хотите навести порядок на входе и не перегружать антиспам-фильтры? У нас есть простой и проверенный метод — greylisting.




Что такое greylisting и зачем он вам нужен?

Greylisting — это метод фильтрации входящих писем, при котором сервер временно отклоняет письмо от незнакомого отправителя с предложением «попробовать позже». Нормальные (RFC-соответствующие) почтовики через некоторое время повторят попытку — и письмо дойдёт. А вот спам-боты, как правило, на этом этапе сдаются.

Почему это работает?

  • Спам-софт часто не умеет (или не хочет) повторно отправлять письма.
  • Большая часть мусора отсеивается до попадания в очередь Postfix.
  • Вы разгружаете SpamAssassin, ClamAV и прочие тяжёлые фильтры.

Преимущества:

  • Меньше спама — чище логи и спокойнее жизнь.
  • Меньше нагрузки на CPU — не надо гонять каждый подозрительный заголовок через тонны регулярных выражений.
  • Простая реализация — никаких сложных конфигураций.

Недостатки (но не критичные):

  • Первое письмо от нового отправителя задерживается (обычно на 1–5 минут).
  • Если отправляющая сторона плохо настроена — письмо может потеряться. Но это, больше, проблема той стороны, а не greylisting.

Как реализовать greylisting с помощью Postgrey

Будем использовать связку Postfix + Postgrey. Работает на любом современном Linux-дистрибутиве, где доступен Perl и сам Postfix.

Установка Postgrey

Для начала убедитесь, что у вас уже установлен и настроен Postfix.

Установка через пакетный менеджер:

Debian/Ubuntu:

Bash
sudo apt install postgrey

RHEL/Fedora/CentOS (если есть в репах или EPEL):

Bash
sudo dnf install postgrey

Или соберите из исходников — Postgrey написан на Perl, и его зависимости довольно стандартны:

  • Perl ≥ 5.6.0
  • Модули: Net::Server, IO::Multiplex, BerkeleyDB
  • Библиотека Berkeley DB ≥ 4.1

Настройка Postgrey

Обычно Postgrey запускается с параметром:

--inet=127.0.0.1:10023

Также можно указать задержку (в секундах), через сколько разрешить повторную доставку:

Bash
postgrey --inet=127.0.0.1:10023 --delay=60

💡 Оптимально ставить задержку 60–300 секунд. Чем выше — тем больше шансов отсеять спам, но тем больше раздражения у легитимных отправителей.

Postgrey можно запустить вручную, через systemd unit, supervisord — как вам удобно.

Настройка Postfix

Открываем конфиг:

Bash
sudo nano /etc/postfix/main.cf

И в секции smtpd_recipient_restrictions добавляем вызов Postgrey:

INI
smtpd_recipient_restrictions =
    permit_sasl_authenticated,
    permit_mynetworks,
    reject_unauth_destination,
    check_policy_service inet:127.0.0.1:10023

Сохраняем, выходим, перезагружаем Postfix:

Bash
sudo postfix reload

Проверка

  • Отправьте тестовое письмо с нового адреса — должно быть отложено.
  • Через минуту — повторная попытка, письмо дойдёт.
  • Посмотрите логи: /var/log/mail.log или journalctl -u postfix + journalctl -u postgrey

Заключение

Greylisting — это не серебряная пуля, но как первая линия обороны работает просто отлично. С минимальными затратами вы отсекаете значительную часть мусора на входе. Особенно в связке с другими мерами: SPF, DKIM, RBL, SpamAssassin, ClamAV и т.д.

Если вы обслуживаете корпоративную почту или просто не хотите тратить ресурсы на обработку каждой попытки впихнуть вам Viagrа-рекламу — внедряйте смело.


Дополнительные материалы.


Полезные ссылки:

Was this helpful?

0 / 0

Добавить комментарий 0