On Sep 24, 2010, at 8:43 AM, Noel Jones <njo...@megan.vbhcs.org> wrote:
> On 9/24/2010 2:37 AM, Michael Orlitzky wrote: >> On 09/24/10 01:10, Sahil Tandon wrote: >>> On Thu, 2010-09-23 at 21:37:40 -0400, Michael Orlitzky wrote: >>> >>>> check_client_access pcre:/<fudged>/generic_rbl_clients.pcre, >>>> >>>> The content of generic_rbl_clients.pcre: >>>> >>>> # sutton-partners.com >>>> /^64\.191\.79\.245$/ public_rbls >>>> >>>> # mabel.ca >>>> /^70\.38\.108\.42$/ public_rbls >>>> >>>> # dsnews.com >>>> /^209\.172\.40\.21[157]$/ public_rbls >>>> >>>> # Default: check these lists. >>>> # >>>> /./ all_rbls >>>> >>>> However, 64.191.79.245 is still being subjected to the private RBL check: >>>> >>>> Sep 23 10:05:42 mx1 postfix/smtpd[12164]: connect from >>>> unknown[64.191.79.245] >>> ^^^^^^^ >>> >>> % host 64.191.79.245 >>> 245.79.191.64.in-addr.arpa domain name pointer sutton-partners.com. >>> % host sutton-partners.com >>> sutton-partners.com has address 64.202.189.170 >>> >>> /./ is greedy! Explore check_reverse_client_hostname_access; and if >>> it suits your needs, thank Noel Jones. :) >>> >> >> Ok, I see what's going on. 'unknown' gets looked up first, and so /./ >> matches it before the client IP address gets looked up. Wouldn't >> check_reverse_client_hostname_access suffer the same fate? I think >> switching to a CIDR map probably avoids matching the 'unknown'; I'll >> give that a try. > > > Yes, that's your problem and the correct solution. > > I made this same mistake once upon a time... > > With all the *access tests, the map is searched first for the hostname, then > for the IP. This is documented in the access(5) man page, but maybe could be > improved. > > Stan Hoeppner wrote: >> /\[([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})\]/ all_rbls >> >> It only matches on a dotted quad enclosed in []. It won't match on the >> rdns name, or lack thereof (unknown). > > No, the table is searched twice; first with the hostname (or unknown) and > then with the bare IP -- no brackets. Carefully read access(5) several times. > > For a pcre IP catchall unlikely to match on a real hostname you could use > /^[0-9.]+$/ all_rbls > > a cidr table -- which can never match a name -- is the cleaner solution. > > Sahil Tandon wrote: >>> > Wouldn't check_reverse_client_hostname_access suffer the same fate? >> No, because then Postfix passes the unverified reverse client hostname >> to the access(5) map, rather than 'unknown'. > > If the intent is to match on the IP, check_reverse_client_hostname_access > would indeed behave in the same way; search once for the reverse hostname (or > unknown if no rDNS), then a second time for the IP. So that tool wouldn't > solve this particular problem. Woops, your are of course correct! I'm allergic to catch-alls! OP should stick to my first advice of explicitly matching an IP rather than anything and everything. -- Sahil Tandon <sa...@tandon.net>