I’ve moderate expertise with Postfix and sys admin in general, and after 10 
days of beating my head against this particular brick wall am posting this 
overly long, rather tedious question because I’ve exhausted my other resources 
but am not quite ready to throw in the towel.

That said…  

Here’s a simplified, sanitized description of the problem, using only two 
servers.  I run an ISP-style setup using OS X Server 10.6 and Postfix.  Each 
server should act as MX backup for the other.  Both test servers use virtual 
domains and OS X Server style aliases held in a shared Open Directory/LDAP 
domain.   

Setup

Server #1

        ip:                                     111.111.111.001
        host name:                      wheat.glutinous.com
        test virtual domain:            sourdough.com
        test account:                   bryan_sourdough_com
        test address:                   br...@sourdough.com
        virtual_alias_maps:             [none]
        virtual_alias_domains:  sourdough.com
        relay_domains:          pumpernickle.com

Server #2

        ip:                                     111.111.111.002
        host name:                      rye.glutinous.com
        test virtual domain:            pumpernickle.com
        test account:                   bryan_pumpernickle_com
        test address:                   br...@pumpernickle.com
        virtual_alias_maps:             [none]
        virtual_alias_domains:  pumpernickle.com
        relay_domains:          sourdough.com

The Problem

The hosts of br...@sourdough.com and br...@pumpernickle.com happily exchange 
mail with any server on earth except for each other.  If br...@sourdough.com 
sends mail to br...@pumpernickle.com, its host wheat.glutinous.com creates the 
account bryan_pumpernickle_com on itself, and receives the message itself.  It 
never contacts the destination host of br...@pumpernickle.com 
(rye.glutinous.com) at all.

And vice versa.  When asked to speak to each other, the two servers become 
neurotically introspective, stare into their own navels, and send test messages 
to themselves.  They believe they're responsible for domains that actually 
belong to other hosts.

There are no hidden aliases anywhere that I’ve failed to mention.  I’ve queried 
all the relevant hash files to make sure they respond with the correct 
information.

The only account aliases are held in the shared LDAP domain.  For reasons I 
don’t understand, any server with access to the LDAP directory believes itself 
solely responsible for every address it can see, without regard for entires in 
virtual_alias_domains, relay_domains, or MX precedence.  (Aside…  This behavior 
changed from OSXS 10.5 to 10.6.)

There are no log errors per se, since the hosts all believe they’re behaving 
perfectly.

DNS

DNS for all hosts and virtual domains resolve correctly.  MX records look like 
this:

sourdough.com.          3600    IN      MX      10      mail. 
wheat.glutinous.com.
sourdough.com.          3600    IN      MX      20      mail. rye.glutinous.com.

pumpernickle.com.               3600    IN      MX      10      mail. 
rye.glutinous.com.
pumpernickle.com.               3600    IN      MX      20      mail. 
wheat.glutinous.com.


A Clue

Continuing the example above, if I create the following entry in virtual_users, 
the problem vanishes and everything works.

br...@sourdough.com  br...@sourdough.com 

Unfortunately, this kludge won't scale well - it isn't something I can turn 
over to the non-geeks who will ultimately manage the day-to-day stuff.

Failed Solutions

I’ve attempted to solve the problem using transport_maps.  For example, on 
wheat.glutinous.com:

main.cf

        transport_maps = hash:/etc/postfix/transport

transport

        gurgitate.org  smtp:[mail.gilded-bat.laughingboot.net]
        .gurgitate.org  smtp:[mail.gilded-bat.laughingboot.net]

This has no effect.

I’ve also lobotimized main.cf, simplifying it as much as possible, to no avail.

The Kindness of Strangers

My reach has exceeded my grasp, my brain is fried, and I just don’t get it.  I 
particularly don’t understand why telling wheat.glutinous.com that 
br...@sourdough.com should be forwarded to itself persuades it behave itself to 
send the message of to rye.glutinous.com.

The output of postconf -n for wheat.glutinous.com is below.

I’m going take a break, repair the espresso machine, and pray I can depend on 
the kindness of strangers.

Thanks,
Bryan


postconf -n for wheat.glutinous.com:

biff = no
command_directory = /usr/sbin
config_directory = /etc/postfix
content_filter = smtp-amavis:[127.0.0.1]:10024
daemon_directory = /usr/libexec/postfix
debug_peer_level = 2
disable_vrfy_command = yes
enable_server_options = yes
header_checks = pcre:/etc/postfix/custom_header_checks
html_directory = /usr/share/doc/postfix/html
inet_interfaces = localhost
mail_owner = _postfix
mailbox_size_limit = 0
mailbox_transport = dovecot
mailq_path = /usr/bin/mailq
manpage_directory = /usr/share/man
maps_rbl_domains = 
message_size_limit = 52428800
mydomain = sourdough.com
mydomain_fallback = localhost
myhostname = wheat.glutinous.com
mynetworks = 127.0.0.0/8        111.111.111.001 111.111.111.002
newaliases_path = /usr/bin/newaliases
owner_request_special = no
permit_mx_backup_networks = $mynetworks
queue_directory = /private/var/spool/postfix
readme_directory = /usr/share/doc/postfix
recipient_delimiter = +
relay_domains = hash:/etc/postfix/relay_domains
relay_recipient_maps = 
relayhost = 
sample_directory = /usr/share/doc/postfix/examples
sendmail_path = /usr/sbin/sendmail
setgid_group = _postdrop
smtpd_client_restrictions = permit_sasl_authenticated   permit_mynetworks       
reject_rbl_client zen.spamhaus.org      permit
smtpd_data_restrictions = permit_mynetworks     reject_unauth_pipelining        
reject_multi_recipient_bounce   permit
smtpd_enforce_tls = no
smtpd_helo_required = yes
smtpd_helo_restrictions = permit_sasl_authenticated     permit_mynetworks       
check_helo_access hash:/etc/postfix/helo_access reject_non_fqdn_helo_hostname   
reject_invalid_helo_hostname    permit
smtpd_pw_server_security_options = cram-md5     login   plain
smtpd_recipient_restrictions = reject_non_fqdn_recipient        
reject_non_fqdn_sender  reject_unknown_sender_domain    
reject_unknown_recipient_domain permit_mynetworks       
permit_sasl_authenticated       permit_mx_backup        
reject_unauth_destination       reject_non_fqdn_hostname        
reject_invalid_hostname reject_unlisted_recipient       reject_rhsbl_recipient 
zen.spamhaus.org permit
smtpd_sasl_auth_enable = yes
smtpd_sender_restrictions = permit_sasl_authenticated   permit_mynetworks       
reject_non_fqdn_sender  reject_rhsbl_sender zen.spamhaus.org    
reject_unknown_sender_domain    permit
smtpd_tls_CAfile = 
/etc/certificates/wheat.glutinous.com.B5E2C62A67054B9826A2F9E30921B8812B17EA4E.chain.pem
smtpd_tls_cert_file = 
/etc/certificates/wheat.glutinous.com.B5E2C62A67054B9826A2F9E30921B8812B17EA4E.cert.pem
smtpd_tls_exclude_ciphers = SSLv2        aNULL   ADH     eNULL
smtpd_tls_key_file = 
/etc/certificates/wheat.glutinous.com.B5E2C62A67054B9826A2F9E30921B8812B17EA4E.key.pem
smtpd_tls_loglevel = 0
smtpd_use_pw_server = yes
smtpd_use_tls = yes
soft_bounce = no
tls_random_source = dev:/dev/urandom
transport_maps = hash:/etc/postfix/transport
unknown_local_recipient_reject_code = 550
virtual_alias_domains = $virtual_alias_maps     
hash:/etc/postfix/virtual_domains
virtual_alias_maps = $virtual_maps hash:/etc/postfix/virtual_users



Reply via email to