Wow, what a lot of ratelimit questions we suddenly have :)
On Tue, 2008-10-21 at 09:54 +0200, Andrew McGill wrote:
> I know that exim can control the incoming rate quite easily, but we would like
> to rate limit the *outgoing* RCPT TO: rate per authentication source when
> processing the queue, without limiting the incoming mail rate.
You need something like this in the global settings:
acl_not_smtp = acl_check_notsmtp
...and then something like this:
acl_check_notsmtp:
# You need a way to identify the sending user
# This is NOT the "MAIL FROM" necessarily, nor the From:
# If using Horde/IMP you should have a Received line of the form
# Received: from host.domain (host.domain [1.2.3.4])
# by your_mail_server (IMP) with HTTP
# for <sending_user@localhost>; Tue, 21 Oct 2008 09:36:46 +0100
# From this you can glean the originating user
...snip other bits of the ACL...
## Stick the user in $acl_m0
warn set acl_m0 = ${if match{$h_Received:}\
{\N.+<([^>@]+)@localhost>;\N}\
{$1}\
{}\
}
## At this point $acl_m0 contains the sending username
warn ratelimit = 200 / 1d / leaky / user-$acl_m0
control = freeze
log_message = Frozen by ACL - exceeded ratelimit - \
$sender_rate/$sender_rate_period (User:$acl_m0)
accept
[Thanks to Mike Cardwell, also of this parish, for most of that]
Note that snippet isn't counting RCPTs, because in the not_smtp phase
there are no RCPT TO commands - it's not SMTP, see? It's counting
messages but it should give you a base to work from.
Graeme