/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).

> 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.

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.

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.

        Wietse

Reply via email to