Защита от NDR-спуфинга (backscatter)
Спамеры подставляют адреса вашего домена в поле «отправитель» своих рассылок. Чужие почтовые серверы не могут доставить такие письма и присылают вам уведомления о недоставке (NDR, bounce) на письма, которых вы никогда не отправляли. Шлюз распознаёт такие уведомления и не пропускает их к пользователям.
Как это работает
- Исходящие письма запоминаются. Когда пользователь отправляет письмо через шлюз, шлюз сохраняет в Redis идентификатор письма (Message-ID) на заданное число дней. Сами адреса и текст не сохраняются, хранится только хэш идентификатора.
- Входящее уведомление проверяется. Уведомлением считается письмо с пустым адресом отправителя или письмо типа
multipart/report(отчёт о доставке, квитанция о прочтении, автоответ). Шлюз берёт из него идентификаторы исходного письма: заголовкиIn-Reply-ToиReferencesсамого уведомления, а такжеMessage-IDиOriginal-Message-IDв процитированной части. Собственный Message-ID уведомления не учитывается, его создал чужой сервер. - Решение. Если хотя бы один идентификатор известен шлюзу, уведомление настоящее: ваше письмо действительно ушло и не дошло. Если ни один не найден, уведомление относится к письму, которого вы не отправляли, то есть это backscatter.
Режимы
Режим выбирается в «Настройки → Уведомления о недоставке (NDR) → Защита от NDR-спуфинга».
| Режим | Что происходит с поддельным уведомлением |
|---|---|
| Наблюдение (по умолчанию) | Письмо доставляется, в него добавляется заголовок X-SPZ-NDR: unmatched, событие пишется в журнал. Подтверждённые уведомления получают X-SPZ-NDR: matched. |
| Карантин | Шлюз принимает письмо (SMTP 250) и кладёт его в карантин. Пользователь его не видит, администратор может просмотреть и при необходимости выпустить. |
| Отклонение | Шлюз отвечает SMTP 5xx. У уведомления пустой отправитель, поэтому отказ не порождает новых писем. Копия остаётся в карантине. |
| Выключена | Проверка не выполняется, исходящие письма не запоминаются. |
Начните с режима «Наблюдение» и подождите срок хранения (по умолчанию 14 дней). За это время шлюз накопит идентификаторы ваших исходящих писем. Затем посмотрите в журнале события «NDR … отправлено не отсюда» и переходите на «Карантин» или «Отклонение». Если включить блокировку сразу, настоящие уведомления о недоставке писем, отправленных до включения защиты, будут восприняты как поддельные.
Настройка
| Параметр | Значение |
|---|---|
| Защита от NDR-спуфинга | Режим: выключена, наблюдение, карантин, отклонение. Хранится в control/spamorez/ndr_mode. |
| Сколько дней помнить исходящие письма | От 1 до 365, по умолчанию 14. Должно быть не меньше, чем время, за которое чужие серверы успевают сообщить о недоставке (до 5 дней для большинства серверов). Хранится в control/spamorez/ndr_ttl. |
Изменения вступают в силу для следующих писем, перезапуск не нужен.
Что отражается в журнале
| Код | Событие |
|---|---|
| 636 | Уведомление подтверждено: оно отвечает на письмо, ушедшее через шлюз. |
| 635 | Поддельное уведомление, режим наблюдения: доставлено с пометкой. |
| 634 | Поддельное уведомление помещено в карантин. |
| 596 | Поддельное уведомление отклонено. |
События передаются и в SIEM. В системном журнале шлюза строки начинаются с ndr:.
Ограничения
- Защита знает только о письмах, которые прошли через шлюз. Если часть пользователей отправляет почту мимо шлюза (напрямую с почтового сервера или с других сервисов), уведомления на их письма будут считаться поддельными. В этом случае оставьте режим «Наблюдение» или направьте всю исходящую почту через шлюз.
- Если Redis недоступен, шлюз ничего не блокирует: уведомление доставляется, а в журнале остаётся запись о недоступности хранилища.
- Уведомление, в котором нет идентификатора исходного письма (сервер прислал только текст без цитаты), в режимах «Карантин» и «Отклонение» тоже считается неподтверждённым.
- Исходящие письма без заголовка Message-ID не запоминаются.