On 10/24/2013 2:47 PM, btb wrote: > On 2013.10.22 09.56, Noel Jones wrote: >> On 10/22/2013 8:41 AM, btb wrote: >>> On 2013.10.21 17.54, Noel Jones wrote: >>>> On 10/21/2013 3:53 PM, btb wrote: >>>>> i have a scenario in which certain email is sent using envelope >>>>> senders that contain host names that are known only on the local >>>>> lan/network, and unknown on the internet. most mail expressing >>>>> that >>>>> characteristic stays local, but occasionally, some is legitimately >>>>> destined for the public internet. to that end, with such mail, >>>>> i'd >>>>> like to change the sender domain part to @example.com, but only if >>>>> the recipient domain part does not end in example.com [both the >>>>> sender and recipient domain part may be @example.com, >>>>> @foo.example.com, @bar.foo.example.com, etc]. >>>>> >>>>> what is the right method for doing this? given >>>>> ADDRESS_REWRITING_README, it seem to possibly be a fit for either >>>>> masquerade_domains or smtp_generic_maps, but i'm not certain, and >>>>> i'm not sure how to apply selectively. >>>>> >>>>> -ben >>>> >>>> smtp_generic_maps will do that nicely. Add the rewriting on the >>>> "smtp" outgoing transport in master.cf to limit rewriting to >>>> non-local recipient domains only. >>>> >>>> #master.cf >>>> # find the existing "smtp unix ... smtp" transport and add to it: >>>> -o smtp_generic_maps=regexp:/etc/postfix/generic.regexp >>>> >>>> >>>> # generic.regexp >>>> /^(.*)@some\.fantasy\.invalid$/ $1...@example.com >>> >>> thanks. wrt limit rewriting to non-local recipient domains only, >>> by "stays local", i meant local in terms of the local network, >>> not in terms of postfix. postfix is responsible for only >>> systems.example.com: >>> >>> virtual_mailbox_domains = >>> ldap:$table_directory/virtual_mailbox_domains.cf >>> >>>> postmap -q 'systems.example.com' >>>> ldap:./tables/virtual_mailbox_domains.cf >>> systems.example.com >>> >>> while everything else leaves via smtp and is delivered via mx >>> records - some of which is for other recipients ending in >>> @example.com or .example.com [delivered to other hosts on the >>> local network], and the rest of course out onto the internet. >>> how can i apply smtp_generic_maps selectively, for only certain >>> recipient domains [ones not ending in @example.com or >>> .example.com] leaving via smtp - the goal being to rewrite the >>> sender to @example.com for mail destined for the internet? >>> >>> -ben >>> >> >> Postfix doesn't have a specific feature to rewrite the sender based >> on the recipient. >> >> Arrange for internal network traffic to use a specific transport, >> such as the "relay" transport, and let internet traffic use the >> default "smtp" transport. > > thanks for this guidance. i have what [given my testing so far] > appears to be a setup working as desired, but would appreciate any > critiques or feedback wrt considerations i may have overlooked. > > # transport used by mail leaving the local network > smtp unix - - - - - smtp > -o smtp_helo_name=msa.example.com > -o smtp_generic_maps=regexp:$table_directory/generic.regexp > > # transport used by mail not leaving the local network > example-internal unix - - - - - > smtp > -o syslog_name=postfix/example-internal > >>cat transports > # handled by postfix virtual(8) > foo.example.com : > # valid/known on the internet > bar.example.com : > > example.com example-internal: > .example.com example-internal: > >>cat generic.regexp > # rewrite everything that ends in .example.com, except bar.example.com > if !/^(.*)@bar\.example\.com$/ > /^(.*)@.*\.example\.com$/ $1...@example.com > endif > > -ben
I don't see any problems. -- Noel Jones