Ruth Ivimey-Cook wrote:
> Folks,
> 
> I found the discussion on spam filtering interesting. One thing I'm wondering
> about doing is to permanently deny connections from hosts that fail various
> tests - e.g. hosts that send me my own IP on HELO, or that don't have rDNS.
> 
> I can see that including an IP in a condition of the connect acl would work. 
> In
> fact I already have this in my setup, although the list I use here is a hand
> maintained one for irritating hosts, rather than spam per-se:
> 
> acl_check_connect:
>   deny    message       = mail not permitted from your IP: $address
>           hosts         = lsearch;/etc/exim/blacklist_host
> 
> I'm wondering if there is a way to automatically add items to, and perhaps 
> even
> expire older items from, the list that is searched on connect. This suggests
> some kind of mysql lookup rather than the cdb or lsearch approach. Mostly it
> would involve adding/expiring as a result of some other acl failure, I think. 
> 
> Has anyone done this and if so is there any experience or code you can share?
> 
> Thanks
> 
> Ruth
>  
> 
> 

Yes to both methods, code snippets (watch out for MUA line-wrapping):

SQL:

  set acl_c19 = ${lookup pgsql{INSERT into brownlist (pg_when, pg_why, \
               pg_ip, pg_host, pg_where) VALUES \
('$tod_log','MBL','$sender_host_address','$sender_host_name','$dnslist_domain')}}

# where $tod_log can be some other format of timestamp, and/or you can let the
# DB do a timestamp.  $dnslist_domain can be soemthing other as well.



.csv file (pulled into a spreadsheet):

     logwrite    = :panic:,NVR,$sender_host_address,$tod_epoch,$sender_host_name

## where the data is .csv formatted and written to /var/log/exim/paniclog
## 'NVR' is No Valid Recipient from an acl with !verify = recipient


Both methods, incidentally can then be used immediately as well, but a 
different 
format is better for the paniclog if you are going to do that.

For merely 'irritating' hosts, a brownlist entry delays each phase of their 
conection to just short of RFC defaults. Many give up and wander off in the 
first 30 seconds or just over.

For more serious offenders, a regexp list holds partial strings that are 
checked 
against by hostname, HELO, From: header, and envelope-from.

lsearch and wildlsearchused for that, not 'hosts' which likes to use DNS 
callouts/cache. No point in callouts when you already know the offender has no 
records.

Likewise IP-block lists, these searched with iplsearch, as some may contain 
/24's

'Proper' HELO by IP (brackets) is acceptable, but not by 'raw' IP.  Arrivals 
that HELO as our own box are dropped without further ado.

Action on rDNS fail, dynamic-IP, HELO mismatch, etc. is held-off until 
acl_smtp_rcpt where we pull per-recipient prefs. 'sales', 'info', marketing' 
and 
such normally allow lots of bad news, accounting, executive suite, engineering 
staff are ordinarily far less forgiving.

HTH,

Bill




-- 
## List details at http://www.exim.org/mailman/listinfo/exim-users 
## Exim details at http://www.exim.org/
## Please use the Wiki with this list - http://www.exim.org/eximwiki/

Reply via email to