source-ip-max-msg-rate

<domain>

Сколько получателей в интервал пробовать с одного исходящего адреса
в конфигурации это строкаsource-ip-max-msg-rate unlimitedвнутри блока <domain>
Темп писем, посчитанный по каждому адресу отдельно

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

Ради чего директива придумана — руководство говорит прямо. Она для тех, кто собирает несколько IP в один адрес отправки и хочет ограничить темп каждого IP по каждому получателю. Без неё есть только max-msg-rate — темп всей очереди, который IP внутри делят между собой как получится: адрес, чьи письма подхватились первыми, выберет чужую долю.

Первым идёт маска, число достаётся каждому адресу. source-ip-max-msg-rate 1.2.3.0/24 600/m — это по шестьсот писем в минуту с каждого адреса подсети. Что считать адресом отправки, решает enable-source-ip-limits-on-sending-ip.

Три уровня темпа, действуют одновременно. Очередь (max-msg-rate), адрес отправки целиком (max-smtp-msg-rate) и отдельный IP внутри очереди — это она. Срабатывает самый низкий, и в мониторе разница видна только по тексту сообщения об ограничении.

Главная ловушка. Умножается там, где этого не ждут — дважды. Число относится к каждому адресу маски и к каждому получателю: четыре адреса на десяти крупных почтовиках при 600/m — это до двадцати четырёх тысяч писем в минуту, а не шестьсот. Строка выглядит как ограничение, а на деле задаёт множитель.
Что делает Хаб. Не пишет — случай, ради которого директива написана, у него не возникает: у каждого адреса отправки ровно один smtp-source-host, и темп очереди уже и есть темп адреса. Суточный объём при прогреве Хаб держит собственным планировщиком, а MTA отдаёт темп очереди — max-msg-rate в блоке <domain> внутри адреса.

Понадобится в чужой конфигурации, где IP собраны пачками. С прокси-гейтом не понадобилась: у каждого прокси свой адрес отправки с одной строкой smtp-proxy-source-host.

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

Делите, а не назначайте. Возьмите темп, который готовы дать очереди целиком, и разделите на число адресов в маске — это и есть значение. Назначать каждому адресу «сколько не жалко» бессмысленно: получатель видит сумму.

Считайте на крупного получателя. Значение действует в пределах одной очереди, то есть отдельно для каждого почтовика. Дневной план адреса делится сперва на число приёмников, и только потом раскладывается на окно отправки.

Знаменатель принимает множитель — 100/15m, 83/5s. Появился в PowerMTA 5.

Умолчание unlimited: отдельного темпа на адрес нет, работает только темп очереди.

Порядок расчёта — наша рекомендация. Из руководства здесь назначение директивы, синтаксис с маской, грамматика темпа, счёт попыток наравне с доставками и умолчание unlimited.
Пример в конфигурации
# в одном адресе отправки четыре IP, темп очереди делим между ними
<domain comcast.net>
    max-msg-rate 2400/m
    source-ip-max-msg-rate 1.2.3.0/30 600/m</domain>
Четыре адреса по шестьсот писем в минуту дают ровно темп очереди. Если бы маска захватывала больше адресов, сумма вышла бы за него, и фактическим потолком стал бы max-msg-rate.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
▲

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

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

Считают значение общим на всю маску

§ 3.3.10.93

Чем чреватоТемп относится к каждому подходящему адресу. 1.2.3.0/24 600/m — это до шестисот писем в минуту с каждого из адресов подсети, и получатель увидит сумму по всем.
Как заметитьФактический темп кратен числу поднятых адресов и растёт при добавлении нового IP, хотя конфигурацию не трогали.
Как правильноДелить темп, задуманный для очереди, на число адресов в маске и писать результат. Пересчитывать при изменении адресного пространства.

Забывают, что лимит действует на каждого получателя отдельно

наш опыт

Чем чреватоЗначение живёт в блоке приёмника, то есть считается по каждой очереди своё. На десяти крупных почтовиках 600/m означает до шести тысяч писем в минуту с одного адреса, а не шестьсот.
Как заметитьРасчётный дневной объём адреса выбирается за часы вместо суток.
Как правильноДелить дневной план адреса сперва на число приёмников, потом раскладывать на окно отправки — и только результат писать сюда.

Полагаются на лимит, отправляя через прокси

§ 3.3.10.86

Чем чреватоПри умолчании переключателя счёт идёт по локальному адресу узла, а за прокси он один на весь парк арендованных. Темп «на адрес» становится темпом на узел.
Как заметитьСуммарный темп не растёт при добавлении арендованных адресов.
Как правильноВключить enable-source-ip-limits-on-sending-ip и перезапустить службу — перезагрузки конфигурации ему мало.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Справочные данные
Синтаксис
source-ip-max-msg-rate CIDR { unlimited | 0 | N/[M]{d|day|h|hr|m|min|s|sec} }
Значения
маска сети и темп — например 1.2.3.4 600/m; допускается unlimited, 0 и множитель в знаменателе (100/15m)
Умолчание
unlimited § 3.3.10.93
Применение
reload, перезапуск не нужен
Очередь
уже поставленное в очередь не затронет
Где писать
<domain>
Сколько раз
один раз в блоке
Всё здесь — из руководства, с разделом.
Наследование
Значение сливается по блокам <domain> от общего к частному: побеждает наиболее подходящий блок, а не последний по файлу. Строку можно повторять с разными масками — так адресное пространство разбирается на части с разными темпами. Подхватывается по pmta reload, перезапуск не нужен.
Как проверить на узле
Строка проверяется чтением конфигурации, а срабатывание — в веб-мониторе: он называет директиву, которая придержала очередь, и по имени видно, какой из трёх уровней темпа упёрся.
grep -rn source-ip-max-msg-rate /etc/pmta/
pmta show queues --maxitems=20
Если очередь стоит, а писем в ней много — сравните три темпа между собой: очереди, адреса целиком и этот. Срабатывает самый низкий. Хаб директиву не пишет; в мониторинге видна сводка по адресам, но не действующие лимиты.
В Хабе
Цена ошибки
обратимо: вредит, пока стоит
Сценарии
Прогрев адресов · Отправка через прокси