Гид по технологиям

Как блокировать спам до попадания на сервер — Postfix

4 min read Email Обновлено 24 Nov 2025
Блокировка спама на входе в Postfix
Блокировка спама на входе в Postfix

Версия 1.0
Автор: Falko Timme

Введение

За последние недели наблюдается резкий рост объёма спама. По оценкам, спам занимает около 80–90% всей почты, и многие почтовые серверы испытывают повышенную нагрузку. Фильтры уровня контента (например, SpamAssassin) перестали распознавать часть рассылок так же эффективно, как раньше. Хорошая новость: большую долю спама можно отсекать ещё на уровне MTA (Postfix), используя чёрные списки, проверки доменов отправителя/получателя и другие механизмы. Это уменьшит количество писем, попадающих на ресурсоёмкие анализаторы.

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

Внимание: инструкции относятся к Postfix 1.x и 2.x. Перед внесением правок сделайте резервную копию конфигурации.

Ключевые понятия (одной строкой)

  • DNSBL / RHSBL — списки IP/доменов, доступные через DNS-запросы; используются для быстрой проверки репутации.
  • smtpd_recipient_restrictions — параметр Postfix, определяющий порядок проверок при приёме сообщения.

Постановка задачи

Цель — уменьшить объём нежелательной почты ещё до её доставки в систему, снизив нагрузку на спам-фильтры и почтовые ящики. Подход — комбинировать базовые RFC-проверки, отказ по несоответствию HELO/hostname, а также DNSBL/RHSBL-запросы.

1 Предварительная заметка

Этот краткий гид показывает, как настроить Postfix (версии 2.x и 1.x) для блокировки спама до входа на сервер. Руководство даёт набор конфигурационных опций и примеров; после применения изменений внимательно мониторьте логи на предмет ложных срабатываний.

Полезные ссылки для дальнейшего изучения:

2 Postfix 2.x — пример конфигурации

Откройте /etc/postfix/main.cf и добавьте/замените соответствующие строки.

vi /etc/postfix/main.cf

Пример блока конфигурации (оставлено как в оригинале; вставьте в main.cf):

[...]
smtpd_helo_required = yes
disable_vrfy_command = yes
strict_rfc821_envelopes = yes
invalid_hostname_reject_code = 554
multi_recipient_bounce_reject_code = 554
non_fqdn_reject_code = 554
relay_domains_reject_code = 554
unknown_address_reject_code = 554
unknown_client_reject_code = 554
unknown_hostname_reject_code = 554
unknown_local_recipient_reject_code = 554
unknown_relay_recipient_reject_code = 554
unknown_sender_reject_code = 554
unknown_virtual_alias_reject_code = 554
unknown_virtual_mailbox_reject_code = 554
unverified_recipient_reject_code = 554
unverified_sender_reject_code = 554

smtpd_recipient_restrictions =
            reject_invalid_hostname,
            reject_unknown_recipient_domain,
            reject_unauth_pipelining,
            permit_mynetworks,
            permit_sasl_authenticated,
            reject_unauth_destination,
            reject_rbl_client multi.uribl.com,
            reject_rbl_client dsn.rfc-ignorant.org,
            reject_rbl_client dul.dnsbl.sorbs.net,
            reject_rbl_client list.dsbl.org,
            reject_rbl_client sbl-xbl.spamhaus.org,
            reject_rbl_client bl.spamcop.net,
            reject_rbl_client dnsbl.sorbs.net,
            reject_rbl_client cbl.abuseat.org,
            reject_rbl_client ix.dnsbl.manitu.net,
            reject_rbl_client combined.rbl.msrbl.net,
            reject_rbl_client rabl.nuclearelephant.com,
            permit
[...]

Перезапустите Postfix:

/etc/init.d/postfix restart

3 Postfix 1.x — пример конфигурации

Для старых версий Postfix (1.x) добавьте похожие опции. Откройте /etc/postfix/main.cf:

vi /etc/postfix/main.cf

Вставьте/отредактируйте блок:

[...]
smtpd_helo_required = yes
disable_vrfy_command = yes
strict_rfc821_envelopes = yes
invalid_hostname_reject_code = 554
multi_recipient_bounce_reject_code = 554
non_fqdn_reject_code = 554
relay_domains_reject_code = 554
unknown_address_reject_code = 554
unknown_client_reject_code = 554
unknown_hostname_reject_code = 554
unknown_local_recipient_reject_code = 554
unknown_relay_recipient_reject_code = 554
unknown_sender_reject_code = 554
unknown_virtual_alias_reject_code = 554
unknown_virtual_mailbox_reject_code = 554
unverified_recipient_reject_code = 554
unverified_sender_reject_code = 554

maps_rbl_domains =
            multi.uribl.com,
            dsn.rfc-ignorant.org,
            dul.dnsbl.sorbs.net,
            list.dsbl.org,
            sbl-xbl.spamhaus.org,
            bl.spamcop.net,
            dnsbl.sorbs.net,
            cbl.abuseat.org,
            ix.dnsbl.manitu.net,
            combined.rbl.msrbl.net,
            rabl.nuclearelephant.com

smtpd_recipient_restrictions =
            permit_sasl_authenticated,
            permit_mynetworks,
            reject_invalid_hostname,
            reject_non_fqdn_hostname,
            reject_non_fqdn_sender,
            reject_unknown_sender_domain,
            reject_unknown_recipient_domain,
            reject_maps_rbl,
            check_relay_domains
[...]

Перезапустите Postfix:

/ etc/init.d/postfix restart

4 Дополнительные списки (DNSBL / RHSBL)

Больше списков и их описания можно найти здесь: http://spamlinks.net/filter-dnsbl-lists.htm

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

5 Практическая методология (мини-шаги для внедрения)

  1. Резервная копия: скопируйте current main.cf в safe location.
  2. Внесите минимальные изменения и перезапустите Postfix.
  3. Мониторинг: наблюдайте /var/log/mail.log (или syslog) в течение 24–72 часов.
  4. Откат: если наблюдаете массовые отказы легитимной почты — верните резервную копию и исследуйте конкретные правила.
  5. Итерация: добавляйте очередной список/правило и повторяйте мониторинг.

6 Чек-лист для ролей

  • Системный администратор:
    • Сделать резервную копию main.cf и master.cf.
    • Применить изменения в тестовой среде, если возможно.
    • Настроить логирование и алерты на рост отказов.
  • Почтовый администратор:
    • Проверить SPF/DKIM/DMARC на своем домене.
    • Проверять отчёты о доставке от пользователей.
  • Оператор службы поддержки:
    • Иметь готовый план отката и шаблон ответа для пользователей, чья почта могла быть заблокирована.

7 Когда предложенные меры могут не сработать

  • Если отправитель использует легитимные сервисы с динамическими IP или общими почтовыми реле, они могут быть в DNSBL и блокироваться.
  • Современные ботнеты часто используют распределённые IP с «чистой» репутацией, тогда базовые DNSBL-правила окажутся недостаточны.
  • Некорректная последовательность smtpd_recipient_restrictions может пропустить проверки — порядок имеет значение.

8 План отката и реагирование на инциденты

  1. Если замечены ложные отказы — моментальный откат main.cf из резервной копии.
  2. Включите детальное логирование (debug) для селективных соединений, чтобы найти причину блокировки.
  3. Добавьте белые списки (smtpd_recipient_restrictions: check_client_access или check_sender_access) для доверенных отправителей.
  4. Проведите пост-инцидентный анализ и скорректируйте набор RBL/порядок правил.

9 Модель принятия решения (диаграмма)

graph TD
  A[Входящее соединение] --> B{HELO/hostname корректен?}
  B -- Нет --> R1[Отклонить]
  B -- Да --> C{IP в DNSBL?}
  C -- Да --> R1
  C -- Нет --> D{Авторизация или mynetworks?}
  D -- Да --> Accept[Принять]
  D -- Нет --> E{Домен отправителя валиден?}
  E -- Да --> Accept
  E -- Нет --> R1
  R1 --> Z[Отправить код 554]

10 Итог и рекомендации

  • Начните с базовых проверок (HELO, hostname, strict envelopes).
  • Подключите проверку через проверенные DNSBL/RHSBL, но по одному списку за раз и с мониторингом.
  • Держите план отката и белые списки для критичных отправителей.
  • Регулярно просматривайте логи и корректируйте конфигурацию.

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

Критерии приёмки

  • После развёртывания объём отклонённых соединений увеличился без роста жалоб от пользователей.
  • Логирование показывает снижение нагрузки на спам-фильтры (меньше писем на входе).
  • Наличие процедур отката и белых списков для быстрого реагирования.

Краткое резюме

  1. Блокировка на уровне MTA эффективна и снижает нагрузку на фильтры.
  2. Применяйте изменения поэтапно и мониторьте логи.
  3. Имейте план отката и механизм белых списков.

Important: перед изменением производственной конфигурации убедитесь в наличии резервной копии main.cf и мониторинга почтовых логов.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Ограничение частоты запросов в ASP.NET Core
Backend

Ограничение частоты запросов в ASP.NET Core

Исправление лагов Android: TRIM и LagFix
Mobile

Исправление лагов Android: TRIM и LagFix

Семафоры в Bash: что это и как реализовать
Bash

Семафоры в Bash: что это и как реализовать

Что делать при перегреве PS5
Гайды

Что делать при перегреве PS5

Разбить и собрать большие файлы — лучшие инструменты
Утилиты

Разбить и собрать большие файлы — лучшие инструменты

Open Graph метатеги — полное руководство
Веб-разработка

Open Graph метатеги — полное руководство