source-ip-max-smtp-out

<domain>

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

Обычный max-smtp-out ограничивает очередь целиком: очередь — это пара «получатель + адрес отправки». Если внутри одного адреса отправки поднято несколько IP, все они делят этот лимит и берут из него неравномерно — кто успел, тот и занял. Эта директива задаёт потолок каждому адресу отдельно.

Первым идёт не число, а маска. Строка выглядит как source-ip-max-smtp-out CIDR N: маска говорит, к каким адресам правило относится, число — сколько соединений разрешено. Руководство формулирует предел «для заданного исходящего адреса», то есть число достаётся каждому подходящему адресу, а не делится между ними. Маска /24 — это не 10 соединений на подсеть, а по 10 на каждый её адрес.

Что считать адресом отправки, решает не эта строка. enable-source-ip-limits-on-sending-ip выбирает между локальным адресом узла и тем, который видит получатель. Без прокси они совпадают; через прокси при умолчании считается локальный — один на всех, и лимит «на адрес» перестаёт быть лимитом на адрес.

Старое имя не использовать. До появления этой директивы то же самое называлось max-smtp-out-per-source-ip; руководство помечает его как устаревшее и отсылает сюда.

Главная ловушка. Директива не отменяет лимит очереди, а живёт под ним. Действуют оба, и срабатывает тот, что ниже: max-smtp-out 20 и source-ip-max-smtp-out 1.2.3.0/24 10 при четырёх адресах в подсети дадут не сорок соединений, а двадцать — потолок очереди упрётся первым. Считать надо снизу вверх: сколько адресов × сколько каждому, и лимит очереди должен быть не меньше произведения.
Что делает Хаб. Не пишет — потому что случай, ради которого директива придумана, у него не возникает: каждому адресу отправки достаётся ровно один smtp-source-host, то есть один IP на одну очередь. Потолок соединений задаётся сразу у адреса (max-smtp-out в его блоке), и разбирать его по адресам не требуется.

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

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

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

Маска — способ не повторяться. Одна строка с /24 заменяет двести пятьдесят шесть одинаковых строк, по одной на адрес. Но помните, что число достаётся каждому адресу: расширили подсеть — выросла и сумма.

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

Порядок расчёта — наша рекомендация. Из руководства здесь синтаксис с маской, умолчание unlimited, правило «для заданного исходящего адреса» и отсылка к переключателю.
Пример в конфигурации
# у одного адреса отправки подняты четыре IP
<domain comcast.net>
    max-smtp-out 20
    source-ip-max-smtp-out 1.2.3.0/30 5</domain>
Каждому из четырёх адресов подсети достаётся по пять соединений — суммарно двадцать, ровно под потолок очереди. Поставь маска шире, произведение вышло бы за него, и лишнее просто не открылось бы.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
▲

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

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

Читают число как лимит на всю подсеть

§ 3.3.10.88

Чем чреватоПравило относится к каждому подходящему адресу, а не к маске целиком. 1.2.3.0/24 10 — это до десяти соединений с каждого из адресов подсети, то есть потенциально сотни, а не десять.
Как заметитьПолучатель отвечает «слишком много соединений» при том, что в конфигурации написано скромное число.
Как правильноУмножать на число адресов, реально поднятых в этой маске, и сверять произведение с потолком очереди.

Задают лимит на адрес, работая через прокси

§ 3.3.10.86

Чем чреватоПри умолчании переключателя считается локальный адрес узла, а он за прокси один на весь парк. Лимит «на адрес» превращается в лимит на узел, и арендованные адреса делят его между собой.
Как заметитьСколько бы адресов ни арендовали, суммарные соединения упираются в значение, рассчитанное на один.
Как правильноВключить enable-source-ip-limits-on-sending-ip и перезапустить службу — перезагрузки конфигурации для него мало.

Забывают, что лимит очереди остался

наш опыт

Чем чреватоДиректива не заменяет max-smtp-out, а работает под ним. Аккуратно расписанные лимиты по адресам не дают ничего, если потолок очереди ниже их суммы: упрётся он.
Как заметитьСуммарные соединения ровно равны потолку очереди и не растут при увеличении лимита на адрес.
Как правильноПоднимать потолок очереди вместе с суммой адресных лимитов — или не задавать адресные вовсе, если разбирать нечего.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Справочные данные
Синтаксис
source-ip-max-smtp-out CIDR N
Значения
маска сети и целое число соединений — например 1.2.3.4 10 или 10.0.0.0/24 5
Умолчание
unlimited § 3.3.10.88
Применение
reload, перезапуск не нужен
Очередь
уже поставленное в очередь не затронет
Где писать
<domain>
Сколько раз
один раз в блоке
Всё здесь — из руководства, с разделом.
Наследование
Значение сливается по блокам <domain> от общего к частному: побеждает наиболее подходящий блок, а не последний по файлу. Строку можно повторять с разными масками — они разбирают адресное пространство на части. Подхватывается по pmta reload, перезапуск не нужен.
Как проверить на узле
Действующие соединения по адресам видно в мониторе; сама строка проверяется чтением конфигурации вместе с подключаемыми файлами:
grep -rn source-ip-max-smtp-out /etc/pmta/
pmta show queues --maxitems=20
Образец вывода pmta show settings в руководстве этой строки не содержит — он снят на более ранней версии. Если соединений заметно меньше ожидаемого, сравните произведение «число адресов × лимит на адрес» с потолком очереди: срабатывает тот, что ниже. Хаб директиву не пишет и не собирает.
В Хабе
Цена ошибки
обратимо: вредит, пока стоит
Сценарии
Прогрев адресов · Отправка через прокси