source-ip-max-connect-rate

<domain>

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

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

Частые переподключения раздражают приёмники сильнее объёма. Крупные почтовики считают именно попытки соединения, и всплеск подключений с одного адреса — типичный повод ответить 421 и придержать отправителя. Ровный темп с длинными соединениями выглядит гораздо благополучнее рваного.

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

Главная ловушка. Лимит легко «выполнить» не тем способом, каким задумывалось. Если MTA закрывает соединения быстро, он упрётся в темп подключений при совсем небольшом потоке писем — и отправка растянется, хотя лимит писем далеко не выбран. Лечится не поднятием этого числа, а тем, чтобы соединения жили дольше: smtp-out-rampup-interval и connection-idle-timeout для того и существуют.
Что делает Хаб. Не пишет. Темп подключений в парке Хаба задаётся на уровне очереди — max-connect-rate в правиле почтовика, — а адрес отправки у каждой очереди один, разбирать по адресам нечего.

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

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

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

Знаменатель принимает множитель. 100/15m — сто подключений за пятнадцать минут; удобно, когда естественное окно не ложится на минуту или час. Множитель появился в PowerMTA 5.

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

Порядок расчёта и совет про длину соединений — наши. Из руководства здесь синтаксис с маской, грамматика темпа, умолчание unlimited и отсылка к переключателю.
Пример в конфигурации
# ровный темп подключений: столько же, сколько соединений держим
<domain hotmail.com>
    max-smtp-out 10
    source-ip-max-connect-rate 1.2.3.4 10/m    connection-idle-timeout 1m
</domain>
Десять соединений, десять новых подключений в минуту и минута ожидания перед закрытием — так соединения переиспользуются, а не открываются заново на каждое письмо.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
▲

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

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

Путают темп подключений с числом соединений

наш опыт

Чем чревато10/m здесь — это десять новых соединений в минуту, а не десять одновременных. Приёмник при этом может видеть и одно постоянное соединение, и десять коротких — поведение совсем разное, а строка выглядит похоже на source-ip-max-smtp-out.
Как заметитьОдновременных соединений мало, писем в очереди много, а отправка идёт рывками.
Как правильноРазводить две настройки по смыслу: сколько разговоров вести одновременно и как часто начинать новые. Обычно нужны обе.

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

§ 3.3.10.91

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

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

наш опыт

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