mx-connection-limit

Global

Предел одновременных соединений к одному совпавшему MX
в конфигурации это строкаmx-connection-limitвнутри блока Global
Строка, которую вендор советует не использовать

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

Что она делает: ограничивает число одновременных соединений к MX, подходящему под образец. Образец пишется по тем же правилам, что имена в блоках получателей, — можно и звёздочкой.

Дальше три оговорки, каждая из которых меняет смысл:

Предел считается на каждый адрес отправки отдельно — не на узел и не на поток. Десять адресов отправки при пределе в пять дают пятьдесят соединений к одному MX.

При образце со звёздочкой предел применяется к каждому совпавшему MX, а не ко всем вместе.

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

Строку повторяют — по строке на правило.

Главная ловушка — предел не тот, что кажется. Число в строке — это соединения с одного адреса отправки. Узел с двадцатью адресами и пределом в пять открывает к одному MX до ста соединений, и приёмник видит именно сто.

Отсюда и совет вендора: объединение очередей по MX работает иначе — оно сводит домены в одну очередь, и пределы очереди действуют на всё, что в неё попало, а не умножаются на число адресов.

Вторая половина: со звёздочкой предел размножается по каждому совпавшему MX. Правило *.example.com с пределом пять и десятью подходящими MX — это пятьдесят соединений, а не пять.

Что делает Хаб. Не пишет — и правильно: пределы соединений он задаёт там, где их считает приёмник, — в правилах получателей и у адресов отправки, через max-smtp-out.

Объединение очередей по MX, которое вендор советует вместо этой строки, Хаб тоже не включает: auto-mx-rollup остаётся в умолчании.

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

Что ставить. Прежде значения стоит решить, нужна ли строка вообще:

Значение Когда
не писать обычный случай: пределы задаются у получателей и адресов отправки
число с точным именем MX известный приёмник жалуется на число соединений, а объединение очередей включать не хочется
число с образцом тот же случай, но MX у приёмника несколько — помня, что предел размножится

Считать надо с умножением на число адресов отправки: именно столько соединений увидит приёмник.

Совет предпочесть объединение очередей, счёт на каждый адрес отправки отдельно, размножение предела по совпавшим MX и совпадение с MX, а не с доменом получателя, — из руководства, § 3.3.1.60.1. Разбивка случаев наша.
Пример в конфигурации
# предел — на каждый адрес отправки, а не на узел
mx-connection-limit *.protection.outlook.com 5mx-connection-limit mx.example.net 2
Со звёздочкой предел применяется к каждому совпавшему MX по отдельности. Умножьте на число адресов отправки — столько соединений увидит приёмник.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
▲

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

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

Считают предел суммарным по узлу

§ 3.3.1.60.1

Чем чреватоЧисло в строке — соединения с одного адреса отправки. Узел с двадцатью адресами открывает к одному MX в двадцать раз больше, чем написано, и приёмник видит именно это число.
Как заметитьПриёмник жалуется на число соединений, хотя предел выглядит скромным.
Как правильноДелить желаемое число на количество адресов отправки — либо переходить на объединение очередей по MX.

Пишут образец, ожидая общего предела

§ 3.3.1.60.1

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

Пишут в образце домен получателя

§ 3.3.1.60.1

Чем чреватоСовпадение идёт с именем MX, а не с доменом получателя. Правило не срабатывает, и предел не действует — молча.
Как заметитьСтрока есть, число соединений не меняется.
Как правильноПосмотреть, какие MX у домена на самом деле, и писать образец по ним.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Справочные данные
Синтаксис
mx-connection-limit MX-NAME N
Значения
образец имени MX и целое число соединений; строку можно повторять
Применение
reload, перезапуск не нужен
Очередь
уже поставленное в очередь не затронет
Где писать
Global
Сколько раз
можно повторять
Всё здесь — из руководства, с разделом.
Наследование
Директива пишется в корне файла конфигурации и действует на весь узел, но считается на каждый адрес отправки отдельно. Это не наследование, а размножение: одна строка даёт столько пределов, сколько у узла адресов отправки.
Как проверить на узле
Правила видно в конфигурации, фактические соединения — в состоянии очередей:
grep -n 'mx-connection-limit\|ip-connection-limit\|auto-mx-rollup' /etc/pmta/config
pmta show queues --connected=yes --maxitems=20
Число соединений в очередях стоит сравнить с пределом, умноженным на число адресов отправки. Совпадает с одинарным пределом — значит правило не совпало по имени MX.
В Хабе
Цена ошибки
обратимо: вредит, пока стоит
Сценарии
Настроить темп под провайдера