source-ip-max-data-volume-rate

<domain>

Сколько байт за интервал допускается с одного исходящего адреса
в конфигурации это строкаsource-ip-max-data-volume-rate unlimitedвнутри блока <domain>
Ограничение по объёму, а не по числу писем

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

Считает доставленное, а не попытки. Это единственная директива семьи с таким счётом: руководство говорит, что в лимит идёт объём успешных доставок. Отказы и повторы объём не расходуют — в отличие от source-ip-max-msg-rate, где попытка считается наравне с доставкой.

Первым идёт маска, число достаётся каждому адресу. Что считать адресом отправки, решает enable-source-ip-limits-on-sending-ip.

У числителя есть суффиксы размера: b — байты, k — килобайты, m — мегабайты, g — гигабайты, t — терабайты. У знаменателя — единицы времени и необязательный множитель: 10g/2h это десять гигабайт за два часа.

Главная ловушка — и она прямо в руководстве. Без суффикса число читается как байты. Пример из руководства, source-ip-max-data-volume-rate 1.2.3.4 600/m, буквально означает шестьсот байт в минуту — меньше одного письма. Он явно перенесён из соседней директивы, где 600/m значит шестьсот писем. Пишите суффикс всегда, даже когда кажется очевидным.
Что делает Хаб. Не пишет. Объём в парке Хаба не ограничивается вовсе: темп задаётся числом писем и соединений, а вес письма считается на стороне кампании. Разбирать объём по адресам тем более не требуется — у каждого адреса отправки ровно один smtp-source-host.

Директива пригодится там, где приёмник или канал ограничены по полосе, а не по числу писем: рассылки с вложениями, узкий аплинк, арендованный прокси с оплатой за трафик.

Рекомендуемые значения

Считайте от среднего веса письма. Возьмите планируемый темп писем и умножьте на средний размер: тысяча писем в час по 60 КБ — это около 60 МБ в час, то есть 60m/h. Ставить объёмный лимит, не зная веса, бессмысленно.

Ограничение по объёму — второй рубеж, а не первый. Приёмники считают письма и соединения, а не байты; объём стоит ограничивать, когда узкое место — канал или оплата трафика, а не отношение получателя.

Суффикс обязателен. Число без суффикса — байты, и такая строка останавливает отправку почти полностью.

Умолчание unlimited: ограничения по объёму нет.

Порядок расчёта — наша рекомендация. Из руководства здесь синтаксис с маской, суффиксы размера, счёт только успешных доставок и умолчание unlimited.
Пример в конфигурации
# у писем есть вложения — ограничиваем полосу, а не число писем
<domain comcast.net>
    source-ip-max-data-volume-rate 1.2.3.0/30 2g/h</domain>
Два гигабайта в час на каждый из четырёх адресов подсети — восемь суммарно. Суффикс g обязателен: без него MTA прочитает «два байта в час».
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
▲

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

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

Пишут число без суффикса размера

§ 3.3.10.94

Чем чреватоБез суффикса значение читается как байты. 600/m — это шестьсот байт в минуту, меньше одного письма: отправка с адреса практически останавливается. Ошибка тем вероятнее, что ровно так написан пример в самом руководстве — он перенесён из директивы, где число означает письма.
Как заметитьОчередь стоит, соединения открываются и закрываются, писем уходит считаное количество.
Как правильноВсегда писать суффикс: 2g/h, 60m/h, 500k/m. Проверять строку глазами после каждой правки.

Ждут, что отказы тоже расходуют лимит

§ 3.3.10.94

Чем чреватоВ объём идут только успешные доставки. Очередь, которая целыми днями получает временные отказы, объёмного лимита не выбирает вовсе, и он не защищает канал от повторных попыток.
Как заметитьТрафик на интерфейсе заметно больше, чем разрешённый объём.
Как правильноОграничивать повторы отдельно — темпом писем и параметрами backoff, а объёмный лимит держать для успешной доставки.

Считают маску, а не адреса в ней

наш опыт

Чем чреватоОбъём достаётся каждому подходящему адресу. /24 при полностью занятой подсети — это в двести пятьдесят четыре раза больше написанного.
Как заметитьРасход трафика кратно превышает расчётный.
Как правильноУмножать на число реально поднятых адресов маски и сверять с пропускной способностью канала.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Справочные данные
Синтаксис
source-ip-max-data-volume-rate CIDR { unlimited | 0 | N [{b|B|k|K|m|M|g|G|t|T}] /[X]{d|day|h|hr|m|min|s|sec} }
Значения
маска сети и объём за интервал — например 1.2.3.4 2g/h; суффиксы b k m g t, без суффикса читается как байты
Умолчание
unlimited § 3.3.10.94
Применение
reload, перезапуск не нужен
Очередь
уже поставленное в очередь не затронет
Где писать
<domain>
Сколько раз
один раз в блоке
Всё здесь — из руководства, с разделом.
Наследование
Значение сливается по блокам <domain> от общего к частному: побеждает наиболее подходящий блок, а не последний по файлу. Строку можно повторять с разными масками. Подхватывается по pmta reload, перезапуск не нужен.
Как проверить на узле
Проверять надо в первую очередь суффикс — по нему чаще всего и ошибаются. Объём, реально прошедший через очередь, виден в сводке:
grep -rn source-ip-max-data-volume-rate /etc/pmta/
pmta show queues --maxitems=20
В сводке очередей есть колонка килобайт — по ней видно, сколько данных стоит в очереди и насколько лимит близок. Если отправка почти встала, а писем в очереди много, первым делом посмотрите, есть ли в строке суффикс размера. Хаб объём по адресам не собирает.
В Хабе
Цена ошибки
обратимо: вредит, пока стоит
Сценарии
Прогрев адресов · Отправка через прокси