On Wed, Jun 09, 2021 at 07:20:43PM -0500, Russell Jones wrote:

> I have check_recipient_mx_access setup to route mail for certain providers
> through a relay. This has been working well, until I discovered it is
> breaking delivery to local users that get CC'd in an email that is being
> routed through this relay.

Yes, deciding routing (FILTER, ...) based on a single recipient MX is
not sound on input.  This can only work correctly in a multi-instance
setup where you first split recipients by domain, before a backend
Postfix instance then uses MX-based FILTER directives for recipients
that are sure to be non-local.

> smtpd_recipient_restrictions =
>   check_recipient_mx_access hash:/etc/postfix/mxrelay
> 
> [root@main log]# cat /etc/postfix/mxrelay
> outlook.com FILTER relay:[in-v3.mailjet.com]:587
> prodigy.net FILTER relay:[in-v3.mailjet.com]:587
> yahoodns.net FILTER relay:[in-v3.mailjet.com]:587
> google.com FILTER relay:[in-v3.mailjet.com]:587

There is no solution of this sort.

> How can I do MX filtering and relaying, while telling Postfix to never send
> a local domain through the relay?

The "check_recipient_mx_access" feature is not designed for routing
decisions, it is for accepting or refusing mail, ...

Postfix does not have a variant of "FILTER" that affects only the
default transport, and even then some recipients could be misrouted.

If you had a sufficiently programmable nameserver (unbound with the
built-in python extension), you could rewrite the MX RRsets of domains
that resolve to google/outlook/... to a name that resolves to something
like "127.0.0.2", where you could run a Postfix instance that forwards
everything to the given relay.

Postfix can only IGNORE DNS records at present, there's no fancy RRset
rewriting:

    http://www.postfix.org/postconf.5.html#smtp_dns_reply_filter

-- 
    Viktor.

Reply via email to