Follow-up:

I have tested dovecot's auth-policy mechanism, and I got it to work.

However, I see now that even this auth-policy mechanism doesn't give dovecot
any way to *kill* an existing connection. It can allow dovecot to reject login
attempts, and it can cause external activities to be performed based on the
results of authentication, but terminating a connection is not something which
can be accomplished via auth-policy.

I also read your other message where you referred to a stackexchange
conversation about killing existing connections. That conversation confirms what
I have observed in my own environment: that iptables offers no way to terminate
an already established connection.

Also, "conntrack" is mentioned in that discussion, but I haven't been able to get
conntrack to work on my debian-8 system.

Therefore, I think I will have to go forward with my idea of creating my own,
personal version of dovecot which optionally allows the killing of connections
after "N" failed login attempts (where "N" is configurable).

But in any case, the auth-policy mechanism allows me to deal with login
issues more efficiently than monitoring log messages, and I will now switch
some (all?) of my dovecot-based log-monitoring activites to auth-policy.

Thank you again for *all* your suggestions and help!

--
 hippoman@gmail.com
 Take a hippopotamus to lunch today.


On Wed, May 25, 2022 at 9:00 PM Hippo Man <hippoman@gmail.com> wrote:
Thank you very much!

I didn't know about auth_policy, and I can see that an auth_policy server
would be ideal for me.

I could transfer a lot of the logic to that server and dispense with most (and
maybe even all) of my logfile monitoring.

I'm already using RBL with postfix, and it will probably indeed be helpful
with dovecot, as well.

As for immediate triggering against impossible auth attempts, I guess I could
come up with some sort of dictionary of these kinds of terms.

I very much appreciate all these ideas.




--
 hippoman@gmail.com
 Take a hippopotamus to lunch today.


On Wed, May 25, 2022 at 6:03 PM Joseph Tam <jtam.home@gmail.com> wrote:
On Tue, 24 May 2022, Hippo Man wrote:

Late to this party.

> * Hacker makes numerous login attempts one after the other with various
> passwords, and without disconnecting in between attempts. I've seen 10 and
> more of these repeated attempts rapidly during a single imap or pop3
> connection.

Maybe this settings helps?

        auth_failure_delay = 5 secs

I get lots of BFD, and although they have no chance of guessing a password
this way, it produces an annoying amount of rubbish in my logs.  This slow
them down to either reduce the volume of attempts (and logs), but also
gives you ample time to enact a countermeasure.

> I will get the latest dovecot source code and modify it so that dovecot
> will disconnect after "N" failed imap or pop3 login attacks, where "N" is
> some sort of configuration variable (with a default of zero, meaning do not
> disconnect). I will then use this personal version of dovecot with "N" set
> to a fairly low value (probably 1!).

1, in my opinion, is really too low.  This can lockout a legitimate user
with a simple typo, or network hiccough.

It would be better to externalize this, rather than bake it into dovecot.
Have you considered

        https://doc.dovecot.org/configuration_manual/authentication/auth_policy/

> Furthermore, I will continue to automatically monitor the logs and
> perform the same iptables DROP actions for the failed login attempts.
> The combination of these two actions will give me the behavior that I
> desire.

You can also preempt many BFD runs without resorting to one-strike-you're-out
policy

        1) Look up connecting host in RBL and do a prememptive block
        e.g. bl.websitewelcome.com, bl.blocklist.de, dnsbl.darklist.de
        are some examples of brute force DNSRBLs.  You'll find many of
        attacking IPs are represented on one of these lists.

        2) Triggerimmediate block against authentication attempts that
        can not possibly be real (e.g. "mysql", "testuser", "nagios", etc.)

Joseph Tam <jtam.home@gmail.com>