hashed-address

<address-list>

Хеш адреса вместо самого адреса
в конфигурации это строкаhashed-addressвнутри блока <address-list>
Список, который узел исполняет, но не может прочитать

Строка принимает не адрес, а его хеш. Правило получения точное: адрес приводится к нижнему регистру, хешируется SHA256, результат кодируется BASE64URL. При проверке MTA делает то же самое с адресом письма и сравнивает две строки.

Считать хеш вручную не надо — в поставке есть инструмент: pmtahashedAddress на Linux, hashedAddress.exe на Windows. Он же приводит адрес к нижнему регистру, так что test@FOO.com и test@foo.com дают один хеш.

Только целые адреса. Ни локальных частей, ни доменов, ни образцов: к хешам сопоставление по образцу не применяется вовсе.

Ради чего всё это. Список подавления можно хранить, передавать и класть в резервную копию, не имея в нём ни одного читаемого адреса.

Главная ловушка — ожидать от хешей гибкости обычного списка. Строка вида /^bounce@/ в хешированной форме не совпадёт ни с чем и при этом не вызовет ошибки: MTA сравнивает хеши целых адресов, а не разбирает образцы. Список выглядит настроенным и молчит.
Что делает Хаб. Не пишет: чёрный список Хаб держит в своей базе и на узел не отдаёт. Форма при этом ровно та, что понадобится в одном конкретном случае — когда клиент требует уважать своё подавление, а адреса отдавать не хочет: узел исполнит список, который не может прочитать, и ни файл конфигурации, ни его бэкап адресов не покажут.
Рекомендуемые значения

Значение — строка хеша, полученная инструментом из поставки. Выбор между открытой и хешированной формой:

Форма Гибкость Кто прочитает список
address адрес, локальная часть, образец все, у кого есть доступ к файлу и бэкапу
хеш только целые адреса никто

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

Порядок получения хеша, имена инструментов и запрет на образцы — из руководства (§ 3.3.5.2). Совет про клиентский список — наш.
Пример в конфигурации
# в файле конфигурации нет ни одного читаемого адреса
<address-list foo>
    hashed-address iZ0zh6XFp1VdUdLwoLe1Djl_5IH9mlj6-zibfclOEfY~</address-list>
Хеш из руководства — это test@foo.com. Посчитать его можно командой pmtahashedAddress test@FOO.com: инструмент сам приводит адрес к нижнему регистру, поэтому регистр в исходном адресе роли не играет.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
▲

Типичные ошибки и проблемы

что делают не так и чем это кончается2 ошибки▶

Кладут в хешированный список образец или домен

§ 3.3.5.2

Чем чреватоК хешам образцы не применяются, и целыми адресами домен не является. Строка не совпадёт ни с чем и не вызовет ошибки — список молча не работает.
Как заметитьПодавление не срабатывает ни разу, ошибок в конфигурации нет.
Как правильноВ хешированной форме — только целые адреса. Всё остальное держать в обычном списке address.

Считают хеш не тем способом

§ 3.3.5.2

Чем чреватоФорма строгая: нижний регистр, SHA256, BASE64URL. Шестнадцатеричная запись или обычный BASE64 дадут другую строку, и совпадений не будет.
Как заметитьХеш посчитан, в списке лежит, подавление молчит.
Как правильноПользоваться pmtahashedAddress из поставки: он делает все три шага сам и даёт ровно ту форму, которую ждёт MTA.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Справочные данные
Синтаксис
hashed-address <hash>
Значения
строка хеша SHA256 в кодировке BASE64URL, полученная из адреса в нижнем регистре
Применение
reload, перезапуск не нужен
Очередь
уже поставленное в очередь не затронет
Где писать
<address-list>
Сколько раз
можно повторять
Всё здесь — из руководства, с разделом.
Наследование
Наследования у строки нет: она действует внутри своего блока <address-list>. Наследуется ссылка на список — suppression-lists в <source> сливается по правилу источников, в пуле достаётся участникам, а собственная строка участника пуловую перекрывает.
Как проверить на узле
Проверять приходится через инструмент — глазами хешированный список не читается:
pmtahashedAddress test@FOO.com
Полученную строку ищут в списке точным совпадением. Если её там нет, а подавление ожидалось, вариантов два: адрес в список не попал или в списке лежит его открытая форма, а не хеш.
В Хабе
Цена ошибки
обратимо: вредит, пока стоит
Сценарии
Безопасность узла · Подавление адресов