Author: hjp
Date: Tue Sep 4 15:25:52 2007
New Revision: 789
Added:
contrib/hjp/count_denies/
contrib/hjp/count_denies/count_denies
Log:
Added count_denies to repository
Added: contrib/hjp/count_denies/count_denies
==============================================================================
--- (empty file)
+++ contrib/hjp/count_denies/count_denies Tue Sep 4 15:25:52 2007
@@ -0,0 +1,59 @@
+=head1 NAME
+
+count_denies - Count denies and disconnect when we have too many
+
+=head1 DESCRIPTION
+
+Disconnect the client if it receives too many denies.
+Good for thwarting dictionary attacks.
+
+=head1 CONFIGURATION
+
+Takes one parameter, the number of allowed denies
+before we disconnect the client. Defaults to 4.
+
+=cut
+
+sub register {
+ my ($self, $qp, @args) = @_;
+ $self->register_hook("deny", "check_deny");
+ $self->register_hook("rcpt", "check_rcpt");
+
+ if (@args > 0) {
+ $self->{_deny_max} = $args[0];
+ $self->log(LOGWARN, "WARNING: Ignoring additional arguments.") if (@args >
1);
+ } else {
+ $self->{_deny_max} = 4;
+ }
+
+ $qp->connection->notes('deny_count', 0);
+
+}
+
+sub check_deny {
+ my ($self, $transaction, $plugin, $result, $message) = @_;
+
+ # Qpsmtpd::Plugin::count_denies=HASH(0x8264290)
Qpsmtpd::Transaction=HASH(0x8892a1c) aliases 901 no such user <[EMAIL
PROTECTED]>
+ $self->log(LOGDEBUG, "check_deny: @_");
+ $self->log(LOGDEBUG, "check_deny: result=$result");
+ if ($result == DENY) {
+ my $deny_count = $self->qp->connection->notes('deny_count');
+ $self->log(LOGDEBUG, "check_deny: Deny count $deny_count");
+ $self->qp->connection->notes('deny_count', $deny_count+1);
+ }
+
+ return DECLINED;
+}
+
+sub check_rcpt {
+ my ($self, $transaction, $rcpt) = @_;
+
+ my $deny_count =
+ $self->qp->connection->notes('deny_count');
+ $self->log(LOGDEBUG, "check_rcpt: Deny count $deny_count");
+ if ($deny_count >= $self->{_deny_max}) {
+ $self->log(LOGNOTICE, "Closing connection. $deny_count denied commands.");
+ return (DENYSOFT_DISCONNECT, "Closing connection. $deny_count denied
commands.");
+ }
+ return DECLINED;
+}