[Dovecot] Using checkpassword to block ips?
Larry Ludwig
larrylud at gmail.com
Wed Jun 18 21:47:11 EEST 2008
> ----------------------------------------------------------------------
>
> Message: 1
> Date: Sun, 15 Jun 2008 19:04:05 -0400
> From: "Larry Ludwig" <larrylud at gmail.com>
> Subject: [Dovecot] Using checkpassword to block ips?
> To: <dovecot at dovecot.org>
> Message-ID: <000601c8cf3c$1cd11130$0605a8c0 at tank>
> Content-Type: text/plain; charset="us-ascii"
>
> Hi new to the list, but we are a long time user of Dovecot
> via DirectAdmin
> control panel.
>
> We, like everyone else, are seeing an increase in dictionary
> attacks of
> POP/IMAP. We want to block them.
>
> I've searched the mailing list and found a few recommended
> fail2ban, which
> really won't work for our case. We need to do this over many
> machines and
> not one or two. We also like to gather info at the network
> wide level.
> Hackers know about attacking specific server/ips too often
> and we've seen
> much more distributed attacks that go under the radar of one server
> monitoring setup.
>
> We've designed our own system and use a local RBL to
> distribute the blocked
> IPs. For ftp and ssh attacks it's worked very well. We
> would like to use
> the RBL to do the same with dovecot.
>
> >From my research it appears the best way to do this (and
> only currently) is
> with the checkpassword option. I haven't gotten it to work
> yet. We have:
>
> passdb checkpassword {
> args = /usr/local/bin/checkpassword
> deny = yes
> }
>
> As the first auth.. This should reject the connection if the
> IP matches.
> checkpassword can see TCPREMOTEIP enviornmental variable.
>
> In the checkpassword script we have:
>
> #!/usr/bin/perl
>
> sub read_uinfo {
> my($user,$passwd,$apop_ts);
> open X,"<&=3" or exit 111;
> $_ = <X>;
> # ugly; should use sysread instead
> ($user,$passwd,$apop_ts) = /^(.*)\0(.*)\0(.*)\0/;
> while (<X>) {};
> close X;
> return ($user,$passwd,$apop_ts);
> }
>
> ($user,$passwd,$apop_ts)=$debug?(shift,shift,shift):read_uinfo;
>
> $ipaddr=$ENV{TCPREMOTEIP};
> $result=system("/usr/sbin/checkdnsbl $ipaddr");
> if ( $result == 0) {
> @ENV{"SHELL","USER","HOME"} = ($shell,$user,$home);
> exit 0;
> }
> else {
> exit 1;
> }
>
> My questions are as follows:
> - Can the deny = yes be used with checkpassword?
> - What am I doing wrong with the script? It should reject only the
> connections that are in the RBL. It blocks all
>
Bump..
No one can help with this setup or issue?
-L
--
Larry Ludwig
Empowering Media
1-866-792-0489 x600
Managed and Unmanaged Xen VPSes
http://www.hostcube.com/
More information about the dovecot
mailing list