On 06/13/2015 06:06 AM, Viktor Dukhovni wrote:
> If the expected maximum downtime for the backend system is well
> below the positive cache time on the frontend, you can ignore the
> possibility of backend downtime. Once the cache is primed with
> all the addresses that routinely receive email, the backend system
> is not needed to validate incoming email.

> Otherwise, there's only one correct solution: Automate replication
> of recipient validation tables from the backend system to the
> front-end system. Stop using recipient verification probes, and
> just use local (replicated) tables on both systems. Anything else
> has warts. You can tweak the exact manner in which you lose, but
> you can't not lose.
>

On 06/13/2015 06:08 AM, Wietse Venema wrote:
> Question: an up-stream server must not reject unverified recipients
> when the down-stream server is unavailable.
>
> Answer: let the address verification cache (address_verify_map) in
> the up-stream server work for you.
>
> Once an address is stored in the address verification cache (this
> requires that the down-stream mail server is sometimes available)
> the address remains cached for 31 days.
>
> Also, when the down-stream mail server is available, the up-stream
> server will "refresh" a cached address that is older than 15 days.
> This refresh happens only when an address receives mail; an inactive
> address will be dropped from the cache when it is older than 31 days.
>
> If you are really worried that a "new" or "inactive" user isn't
> cached, you could use a small program that runs on the down-stream
> server and that sends "rcpt to" commands to the up-stream mail
> server. That script has to respect the smtpd_recipient_limit setting
> (default: 1000).

Useful reminders.

Particularly "You can tweak the exact manner in which you lose, but you can't 
not lose."

I'd missed the 31/15 days cache expiry durations.  That helps evaluate risk.

At those cache times, the 'healing & recovery' mechanisms inherent in recipient 
validity caching and sender redelivery appear more than adequate.

For this particular implementation, however, the backend is considered 
unreliable.  I'd rather deploy a standalone, higher-availability solution, but 
will have to leave that for other deployments.

I prefer the 'clean & simple' nature of remote address verification, and have a 
general reticence to complicating the front-end with yet another database or 
sync process for table replication.

However, a periodically sync'd list of users appears to ameliorate the problem.

Of the 2 simplest options

        (1) warming the already in-place 'address verification cache 
(address_verify_map) in the up-stream server', by sending emails from the 
backend to the frontend clustered into recipient lists < its 
smtpd_recipient_limit
&
        (2) rsync-ing a simple list of known users from the backend to the 
frontend in/as a regularly postmap'd lmdb table or a no-reload-needed pcre 
table, either replacing, or complementing (not sure yet if that's wise), 
recipient verification

both are trivial scripts.

Is there any particular preference for using one over the other?

Reply via email to