There is nothing in your pre-existing filters which matches. Only one line caters for "conn unix:auth-worker" and that looks malformed as it does not have the "%(__prefix_line)s" bit. It would then fail as there is no match for "(pid=1754,uid=94):" and it fails again after matching the IP address <HOST> as it expects a close bracket and not a comma, random set of characters then a close bracket.

I've "cheated" by globbing (".*) most of it and delineating the <HOST> just with a comma either side of it. I also made a small mistake simplifying it in that I left in a ": " after the last glob but is does not matter.

Now, if you want, you can build more into the filter to make it more precise, but if you are not getting false positives, it then just becomes an intellectual exercise in regex construction rather than anything practical.

Nick

On 26/01/2023 07:52, Robby Pedrica wrote:
Yip that's gone and done it! Thank you Nick.

The question is why? All the other regex's should be good too ...

Anyway, no looking gift horses in the mouth. Who are we to question? : )

Thanks once again,

Regards, Robby


On Wed, 25 Jan 2023 at 14:29, Nick Howitt via Fail2ban-users <fail2ban-users@lists.sourceforge.net> wrote:

    On 25/01/2023 11:05, Robby Pedrica wrote:
    > Hi all,
    >
    > I'd appreciate some help with a regex on dovecot that I can't
    seem to
    > get right. Config is ...
    >
    > patform: slackware 15 64bit
    > fail2ban: v0.9.4
    >
    > dovecot.conf:
    >
    > [INCLUDES]
    >
    > before = common.conf
    >
    > [Definition]
    >
    > _daemon = (auth|dovecot(-auth)?|auth-worker)
    >
    > failregex =
    >
    ^%(__prefix_line)s(%(__pam_auth)s(\(dovecot:auth\))?:)?\s+authentication

    > failure; logname=\S* uid=\S* euid=\S* tty=dovecot ruser=\S*
    > rhost=<HOST>(\s+user=\S*)?\s*$
    >             ^%(__prefix_line)s(pop3|imap)-login: (Info: )?(Aborted
    > login|Disconnected)(: Inactivity)? \(((auth failed, \d+
    attempts)( in
    > \d+ secs)?|tried to use (disabled|disallowed) \S+ auth)\):(
    > user=<\S*>,)?( method=\S+,)? rip=<HOST>
    >             ^%(__prefix_line)s(Info|dovecot:
    > auth\(default\)|auth-worker\(\d+\)): pam\(\S+,<HOST>\):
    > pam_authenticate\(\) failed: (User not known to the underlying
    > authentication module: \d+ Time\(s\)|Authentication failure
    \(password m
    >            ^%(__prefix_line)s(auth|auth-worker\(\d+\)):
    > (pam|passwd-file)\(\S+,<HOST>\): unknown user\s*$
    > #       ^%(__prefix_line)s(auth|auth-worker\(\d+\)):
    > (pam|passwd-file)\(\S+,<HOST>\): unknown user\s*$
    >         ^conn unix:auth-worker \([^)]*\): auth-worker<\d+>:
    > passwd\(\S+,<HOST>\): unknown user\b
    >         ^%(__prefix_line)s(?:auth|auth-worker\(\d+\)):
    > passwd\(\S+,<HOST>\): unknown user\s*$
    >         ^%(__prefix_line)s(auth-worker\(\d+\)):
    > passwd\(\S+,<HOST>,\S+\): unknown user\b
    >         ^%(__prefix_line)s passwd\(\S+,<HOST>,\S+\): unknown
    user\s*$
    >         ^%(__prefix_line)spasswd\(.*\,<HOST>\)\: (unknown
    user|Password
    > mismatch)\s$
    >
    > ignoreregex =
    >
    > [Init]
    >
    > # journalmatch = _SYSTEMD_UNIT=dovecot.service
    >
    > Per above, I've tried a number of variations on the regex (the
    last 5
    > regex's) but no matches. The matched entry should be found in
    the log:
    >
    > Jan 24 22:32:11 xxx dovecot: auth-worker(1755): conn
    unix:auth-worker
    > (pid=1754,uid=94): auth-worker<35>:
    > passwd(aaronn,41.193.245.243,<hAkXaQjzKO0pwfXz>): unknown user
    > Jan 24 22:32:11 xxx dovecot: auth: Error:
    > passwd(aaronn,41.193.245.243,<hAkXaQjzKO0pwfXz>): user not found
    from userdb
    > Jan 24 22:32:11 xxx dovecot: imap(1804): Error: auth-master: login:
    > request [1420820481]: Login auth request failed: Authenticated
    user not
    > found from userdb, auth lookup id=1420820481 (auth connected 0
    msecs
    > ago, request took 0 msecs, client-pid=1802 client-id=1)
    > Jan 24 22:32:11 xxx dovecot: imap-login: Disconnected: Internal
    login
    > failure (pid=1802 id=1): user=<aaronn>, method=PLAIN,
    > rip=41.193.245.243, lip=172.16.64.253, mpid=1804, TLS,
    > session=<hAkXaQjzKO0pwfXz>
    >
    > More specifically I"m trying to match on the first line ending in
    > "unknown user".
    >
    > My general config for dovecot:
    >
    > [dovecot]
    >
    > enabled = true
    >
    > port    = pop3,pop3s,imap,imaps,submission,465,sieve
    > #logpath = %(dovecot_log)s
    > logpath = /var/log/maillog
    > #backend = %(dovecot_backend)s
    > backend = polling
    >
    > Note I've also trieds the default backend of gamin.
    >
    > Regex test:
    >
    > fail2ban-regex /var/log/maillog /etc/fail2ban/filter.d/dovecot.conf
    > --print-all-matched
    >
    > Running tests
    > =============
    >
    > Use   failregex filter file : dovecot, basedir: /etc/fail2ban
    > Use         log file : /var/log/maillog
    > Use         encoding : UTF-8
    >
    >
    > Results
    > =======
    >
    > Failregex: 1 total
    > |-  #) [# of hits] regular expression
    > |   2) [1] ^\s*(<[^.]+\.[^.]+>)?\s*(?:\S+ )?(?:kernel: \[
    *\d+\.\d+\]
    > )?(?:@vserver_\S+
    >
    
)?(?:(?:\[\d+\])?:\s+[\[\(]?(auth|dovecot(-auth)?|auth-worker)(?:\(\S+\))?[\]\)]?:?|[\[\(]?(auth|dovecot(-auth)?|auth-worker)(?:\(\S+\))?[\]\)]?:?(?
    > :\[\d+\])?:?)?\s(?:\[ID \d+ \S+\])?\s*(pop3|imap)-login: (Info:
    > )?(Aborted login|Disconnected)(: Inactivity)? \(((auth failed, \d+
    > attempts)( in \d+ secs)?|tried to use (disabled|disallowed) \S+
    > auth)\):( user=<\S*>,)?( method=\S+,)? ri
    > p=<HOST>(, lip=(\d{1,3}\.){3}\d{1,3})?(, TLS( handshaking(:
    > SSL_accept\(\) failed: error:[\dA-F]+:SSL
    > routines:[TLS\d]+_GET_CLIENT_HELLO:unknown protocol)?)?(:
    > Disconnected)?)?(, session=<\S+>)?\s*$
    > `-
    >
    > Ignoreregex: 0 total
    >
    > Date template hits:
    > |- [# of hits] date format
    > |  [170366] (?:DAY )?MON Day
    24hour:Minute:Second(?:\.Microseconds)?(?:
    > Year)?
    > `-
    >
    > Lines: 170366 lines, 0 ignored, 1 matched, 170365 missed
    > [processed in 54.97 sec]
    >
    > |- Matched line(s):
    > |  Jan 23 09:53:21 xxx dovecot: pop3-login: Disconnected:
    Inactivity
    > (auth failed, 1 attempts in 0 secs): user=<r...@surgcare.co.za
    > <mailto:r...@surgcare.co.za>>, rip=45.82.65.138, lip=172.16.64.253,
    > session=<bA23punyMLMtUkGK>
    > `-
    > Missed line(s): too many to print.  Use --print-all-missed to
    print all
    > 170365 lines
    >
    > So not matching on any of my regex's. I've tried regextester with:
    >
    > passwd\(\S+,,\S+\): unknown user\s*$
    >
    > And that matches (I removed the IP as fail2ban with substitute with
    > <HOST>) on the following log:
    >
    > Jan 24 22:32:11 xxx dovecot: auth-worker(1755): conn
    unix:auth-worker
    > (pid=1754,uid=94): auth-worker<35>:
    *passwd(aaronn,,<hAkXaQjzKO0pwfXz>):
    > unknown user*
    >
    > But the same regex (my 2nd last entry) in fail2ban doesn't work.
    Not
    > sure where to go from here. Any help is appreciated.
    >
    >
    > --
    > Robby

    Totally untested, but in the same style as the other filters:
    ^%(__prefix_line)s.*,<HOST>,.*: unknown user\s*$

    This is a very lazy version and you can build it up from there if you
    want a more precise match. Note I have no idea why all the filters
    end
    "\s*$". It just allows for any number of spaces at the end of the
    line.
     From your test line you can leave out the "\s*" as there aren't any
    spaces and the "$" is also unnecessary.

    Nick


    _______________________________________________
    Fail2ban-users mailing list
    Fail2ban-users@lists.sourceforge.net
    https://lists.sourceforge.net/lists/listinfo/fail2ban-users



--
Robby Pedrica
XStore
c: +27 82 416 8696
f: +27 86 538 5810
m: rpedr...@xstore.co.za
w: http://wwww.xstore.co.za/


_______________________________________________
Fail2ban-users mailing list
Fail2ban-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/fail2ban-users
_______________________________________________
Fail2ban-users mailing list
Fail2ban-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/fail2ban-users

Reply via email to