On Sun, Jun 05, 2011 at 10:21:38AM -0400, Wietse Venema wrote:
> /dev/rob0:
> > Jun 5 01:50:46 cardinal postfix/postscreen[15628]: CONNECT from
> > [174.37.3.121]:33695 to [216.23.247.74]:25
> > Jun 5 01:50:52 cardinal postfix/postscreen[15628]: PASS OLD
> > [174.37.3.121]:33695
> > Jun 5 01:50:52 cardinal postfix/smtpd[15816]: connect from
> > 174.37.3.121-static.reverse.softlayer.com[174.37.3.121]
>
> Host connects 01:50:46, postscreen logs "PASS OLD" at 01:50:52 and
> hands off the connection to smtpd. The six-second pause suggests
> that postscreen_greet_ttl (1d) expired (according to "postconf -n"
> your postscreen_mumble_ttl settings haven't changed).
Given the cron job flush finding in my previous post on this thread,
it's making sense why these TTL settings are expiring at around the
same time, and even between primary/secondary attempts.
To partly hijack my own thread (with a wink and a nod to my friend
and colleague Jeroen), I'd like to stop this. The sender domain,
which in the OP was not munged, is NXDOMAIN:
rob0@cardinal:~$ host -tany forums.playdom.com.
Host forums.playdom.com. not found: 3(NXDOMAIN)
Lacking what I would call a "complete" understanding of RFC 5321 and
predecessors, I have never tried setting unknown_address_reject_code
to 550. Having seen this post from Viktor:
http://permalink.gmane.org/gmane.mail.postfix.user/133564
I did that, and then turned this one away:
Jun 5 21:54:03 cardinal postfix/postscreen[3582]: CONNECT from
[174.37.3.121]:35549 to [216.23.247.74]:25
Jun 5 21:54:03 cardinal postfix/postscreen[3582]: PASS OLD
[174.37.3.121]:35549
Jun 5 21:54:03 cardinal postfix/smtpd[3808]: connect from
174.37.3.121-static.reverse.softlayer.com[174.37.3.121]
Jun 5 21:54:03 cardinal postfix/smtpd[3808]: setting up TLS
connection from
174.37.3.121-static.reverse.softlayer.com[174.37.3.121]
Jun 5 21:54:04 cardinal postfix/smtpd[3808]: Anonymous TLS
connection established from
174.37.3.121-static.reverse.softlayer.com[174.37.3.121]: TLSv1
with cipher DHE-RSA-AES256-SHA (256/256 bits)
Jun 5 21:54:04 cardinal postfix/smtpd[3808]: NOQUEUE: reject: RCPT
from 174.37.3.121-static.reverse.softlayer.com[174.37.3.121]: 550
5.1.8 <[email protected]>: Sender address rejected: Domain
not found; from=<[email protected]> to=<[email protected]>
proto=ESMTP helo=<tomcat205.playdom.com>
Jun 5 21:54:04 cardinal postfix/smtpd[3808]: disconnect from
174.37.3.121-static.reverse.softlayer.com[174.37.3.121]
And there was no followup on [216.23.247.78]:25. Looking again just
now, I see no further attempts. Good riddance!
I'll take the opportunity at this point to suggest softening the
postconf.5.html#unknown_address_reject_code warning: "Do not change
this unless you have a complete understanding of RFC 2821." There's
nothing wrong, and it seems to me, a lot *right*, about rejecting
NXDOMAIN addresses with 550.
> > Jun 5 01:50:53 cardinal postfix/postscreen[15628]: CONNECT from
> > [174.37.3.121]:52927 to [216.23.247.78]:25
> > Jun 5 01:50:53 cardinal postfix/postscreen[15628]: WHITELIST VETO
> > [174.37.3.121]:52927
>
> > It was whitelisted 7 seconds ago. Could that have expired?
>
> What 7 seconds? the "PASS OLD" action was logged 01:50:52. The
> new connection is made 01:50:53.
>
> Each postscreen test has its own TTL. Different tests have different
> costs (for sender and receiver), and therefore different tests
> expire at different times.
>
> You have the following time-dependent tests enabled:
>
> postscreen_bare_newline_action = enforce
> postscreen_dnsbl_action = enforce
> postscreen_greet_action = enforce
>
> Their expiration times are:
>
> postscreen_bare_newline_ttl = 30d
> postscreen_dnsbl_ttl = 1h
> postscreen_greet_ttl = 1d
>
> Clearly, they don't expire at the same time.
Right, I understood this, but had never thought about how the
staggered expirations interact with one another. Since the
postscreen_cache_map is shared for all tests, I guess that means
"PASS NEW" is logged only if the client is not in the map at all.
> The Postfix verify(8) daemon avoids client-visible delays by sending
> a new probe before a result expires (it has separate _refresh and
> _expire timing parameters).
>
> That trick does not work with postscreen. postscreen does not have
> separate _refresh and _expire settings because many postscreen
> tests are client-visible. For example, postscreen_greet is visible
> (6 seconds delay), postscreen_dnsbl almost invisible (less than 1
> second, usually) and postscreen_bare_newline means the client gets
> 4XX replies if it passes the test. So, in the majority of tests it
> is not possible to refresh a test without client-visible delays.
In this case it looks like we had an expired postscreen_greet_ttl for
the first (primary MX) attempt, and an expired postscreen_dnsbl_ttl
for the second (WHITELIST VETO) attempt. Interesting.
> When a test has expired, postscreen could refresh all unexpired
> tests that will expire soon. For example, all tests that will
> expire within one TTL of the expired test, or all tests that will
> expire within one hour. This will not necessarily reduce the amount
> of client-visible delays, but it will reduce the WHITELIST VETO
> logs.
Thanks for the detailed explanation. I don't think any change is
necessary, because this is an edge case hinging on the gross
misconfiguration of the client at 174.37.3.121. The expirations as
designed work well with clients who are delivering good mail, and now
that I've changed unknown_address_reject_code, it should work well
enough with this client, if it should happen to return with another
bogus sender address.
--
Offlist mail to this address is discarded unless
"/dev/rob0" or "not-spam" is in Subject: header