Knowledge base

PMTA knowledge base›Block <domain>›Directive§ 3.3.10.86

enable-source-ip-limits-on-sending-ip

<domain>criticalrestart required

Whether to count four limits per outgoing address rather than per local one
in the configuration this is a lineenable-source-ip-limits-on-sending-ip falseinside the block <domain>
A switch that determines what four limits mean

By itself it limits nothing. It decides what counts as the sending address for the source-ip-max-* family: source-ip-max-smtp-out, source-ip-max-connect-rate, source-ip-max-msg-rate and source-ip-max-data-volume-rate.

Two different addresses. The local one is the one brought up on the node’s network interface. The outgoing one is the one the message arrives at the receiver from. Without a proxy they are the same address, and the switch affects nothing. Through a proxy they diverge: there is one local address for all, and as many outgoing ones as have been rented.

What happens by default. The default is false: limits are counted per local address — and the manual stresses that this happens regardless of whether a proxy is used or not. Behind a proxy this means that all rented addresses share one counter, and per-address limits stop meaning what they were written for.

true moves the counting to the address the receiver sees — to the proxy’s client address, and without a proxy to the same local one. So enabling it is safe both ways: where there is no proxy, the behavior does not change.

The main trap. The directive requires a service restart, not a configuration reload — the manual says so in a separate line. You changed the value, ran pmta reload, saw no errors — and decided it had been applied. It has not: the engine keeps counting the old way until a restart. Check not by the configuration but by the process uptime.
What the Hub does. It does not write it. Until Sep 15, 2026 the line sat in the general <domain *> block for the proxy gateway, but the Hub writes the source-ip-max-* limits it affects nowhere: every proxy has its own sending address, and the limits of <domain> blocks are counted per its queues. On top of that, the directive requires a service restart, while the Hub applies configuration with a reload — on the test node the line never took effect for a single day. If the Hub starts writing source-ip-max-*, the line will come back together with a restart.
Recommended values

Sending directly — leave it false. There is no difference, and a restart for nothing is not worth it.

Sending through a proxy — set true, otherwise the family’s four limits become meaningless: they will count one local address for the whole fleet of rented ones.

Better to set it right away. The value is worth setting when the node is put into service, while a restart costs nothing: on a working node it interrupts receiving and forces the spool to be reread.

From the manual here are the false default, the list of four dependent directives, the address selection rule and the restart requirement. The advice to set the value when putting the node into service is ours.
Example configuration
# the switch is written in the general block — it concerns the whole node, not a domain
<domain *>
    enable-source-ip-limits-on-sending-ip true    source-ip-max-msg-rate 0.0.0.0/0 600/m
</domain>
With the switch on, the line below counts by the address the receiver sees. With it off — by the node’s local interface, one for all rented addresses.
yellow — — directive names, blue — blocks. They are highlighted the same way in the text of the card.
▲

Common mistakes and problems

what people get wrong and how it ends2 mistakes▶

Changing the value and reloading the configuration

§ 3.3.10.86

What it costsThe manual explicitly requires a service restart. After pmta reload the configuration is accepted without errors, yet the engine keeps counting limits by the previous address — and the investigation drifts toward limits that “for some reason don’t work.”
How to spot itThe value in the configuration is new, the behavior is old, nothing suspicious in the log. The process uptime is longer than the age of the edit.
How to do it rightRestart the service instead of reloading the configuration, and check the process uptime after the edit.

Setting per-address limits while working through a proxy and leaving the switch alone

§ 3.3.10.86

What it costsWith the false default all four limits count the local address — regardless of whether a proxy is used. Behind a proxy there is one local address for the whole fleet, and the “per address” limit turns into a per-node limit.
How to spot itThe total flow hits the value calculated for one address, even though there are a dozen rented addresses.
How to do it rightEnable true and restart the service. Without a proxy enabling it is safe: the local and outgoing addresses coincide there.
Compatibility
PowerMTA 6.0
described in the manual of this version · platform: any
The vendor does not state the first version for every directive — there is no note here. The name also appears in the 5.0 edition of the manual.
Reference data
Syntax
enable-source-ip-limits-on-sending-ip <boolean>
Values
true or false (yes/no are accepted too)
Default
false § 3.3.10.86
Applying
a service restart is required
Queue
will not touch what is already queued
Where to write it
<domain>
How many times
once in the block
Everything here comes from the manual, with the section.
Inheritance
The value merges across <domain> blocks from general to specific: the best-matching block wins, not the one further down the file. A reload does not apply it — a service restart is required.
How to check on the node
There are two different facts to check: that the value is written and that the service has been restarted since. The second matters more — without a restart the first means nothing:
grep -rn enable-source-ip-limits-on-sending-ip /etc/pmta/
pmta show status | grep -i uptime
If the uptime is longer than the age of the configuration edit, there was only a reload, and the old value is still in force. The sample pmta show settings output in the manual does not contain this line: it was taken on an earlier version where the directive did not exist yet. The Hub neither writes nor reads the switch.
In the Hub
Cost of a mistake
reversible: harms only while it is set
Scenarios
Address warm-up · Sending through proxies
Priority
critical