Modifique fail2ban failregex para casar autenticações de chave pública com falha via ssh

7

fail2ban não reconhece logins ssh de chave pública com falha e suponho que isso possa ser resolvido modificando failregex de /etc/fail2ban/filter.d/sshd.config para corresponder à seguinte linha:

<date> <time> <server-hostname> sshd[25917]: Connection closed by <client-ip> [preauth]

Mas não consigo encontrar uma introdução decente sobre como modificar corretamente o referido failregex. Como realmente não sei quais variáveis como ^%(__prefix_line)s incluem, é difícil obter um regex funcional.

Eu entendo que a versão mais recente 0.9.1 inclui o regex para identificar a linha "Connection closed by [preauth]", mas estou usando fai2ban do repositório Debian e a configuração de 0.9.1 não é compatível com o que eu tenho.

    
por apoc 29.04.2015 / 14:26

4 respostas

9

Esta linha faz isso:

^%(__prefix_line)sConnection closed by <HOST> \[preauth\]$

Testado com o seguinte logstring:

Apr 29 12:30:12 sendai sshd[25917]: Connection closed by 127.0.0.1 [preauth]

Testado com sucesso com:

$ fail2ban-regex ~/ssh.log sshd.conf 

Running tests
=============

Use regex file : sshd.conf
Use log file   : /home/user/ssh.log


Results
=======

Failregex
|- Regular expressions:
[...]
|  [12] ^\s*(?:\S+ )?(?:kernel: \[\d+\.\d+\] )?(?:@vserver_\S+ )?(?:(?:\[\d+\])?:\s+[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?|[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?(?:\[\d+\])?:)?\s*Connection closed by <HOST> \[preauth\]$
|
'- Number of matches:
[...]
   [12] 1 match(es)

Summary
=======

Addresses found:
[...]
[12]
    127.0.0.1 (Wed Apr 29 12:30:12 2015)
[..]

Success, the total number of match is 1
    
por 29.04.2015 / 15:04
5

Pelo menos no openssh 7.3, as mensagens de log também contêm um número de porta. Então eu tive que modificar a solução do sebix para o seguinte:

^%(__prefix_line)sConnection closed by <HOST> port \d+ \[preauth\]$
    
por 21.02.2017 / 12:48
1

Para mim, isso funciona melhor, já que recebo toneladas de entradas de log legítimas, correspondendo à regex "Conexão fechada", pelo menos nas variações do OpenSSH 6.6.1. Acredite que também cobre o novo formato de log do OpenSSH, que inclui "port":

^%(__prefix_line)sDid not receive identification string from <HOST>\s*$
^%(__prefix_line)sReceived disconnect from <HOST>: (port \d*: ){,1}11: (Bye Bye){,1} \[preauth\]\s*$

$ cat /etc/*relea* | grep -i desc
DISTRIB_DESCRIPTION="Ubuntu 14.04.5 LTS"

$ fail2ban-regex /var/log/auth.log filter.d/sshd.conf

Running tests
=============

Use   failregex file : filter.d/sshd.conf
Use         log file : /var/log/auth.log


Results
=======

Failregex: 39 total
|-  #) [# of hits] regular expression
|  12) [16] ^\s*(<[^.]+\.[^.]+>)?\s*(?:\S+ )?(?:kernel: \[\d+\.\d+\] )?(?:@vserver_\S+ )?(?:(?:\[\d+\])?:\s+[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?|[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?(?:\[\d+\])?:?)?\s(?:\[ID \d+ \S+\])?\s*Did not receive identification string from <HOST>\s*$
|  13) [23] ^\s*(<[^.]+\.[^.]+>)?\s*(?:\S+ )?(?:kernel: \[\d+\.\d+\] )?(?:@vserver_\S+ )?(?:(?:\[\d+\])?:\s+[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?|[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?(?:\[\d+\])?:?)?\s(?:\[ID \d+ \S+\])?\s*Received disconnect from <HOST>: (port \d*: ){,1}11: (Bye Bye){,1} \[preauth\]\s*$
'-

Ignoreregex: 0 total

Date template hits:
|- [# of hits] date format
|  [62412] MONTH Day Hour:Minute:Second
'-

Lines: 62412 lines, 0 ignored, 39 matched, 62373 missed
Missed line(s):: too many to print.  Use --print-all-missed to print all 62373 lines

$ grep "Did not receive identification string from" /var/log/auth.log | wc -l
16
$ grep "Received disconnect from" /var/log/auth.log | grep -v x.x.x.x | wc -l
23
    
por 03.09.2017 / 12:39
0

No Ubuntu 18.04 com OpenSSH 7.6p1 eu tive que estender as regras " cmnfailre " em /etc/fail2ban/filter.d/sshd.conf por

^%(__prefix_line)sConnection closed by authenticating user <F-USER>.+</F-USER> <HOST> port \d+ \[preauth\]$

para corresponder às tentativas de login do ssh sem a chave ssh correta:

Apr 14 15:27:15 ubuntu-server sshd[8719]: Connection closed by authenticating user root x.x.x.x port 42664 [preauth]
Apr 14 15:27:15 ubuntu-server sshd[8721]: Connection closed by authenticating user root x.x.x.x port 42666 [preauth]
Apr 14 15:27:16 ubuntu-server sshd[8723]: Connection closed by authenticating user root x.x.x.x port 42668 [preauth]
Apr 14 15:27:16 ubuntu-server sshd[8725]: Connection closed by authenticating user root x.x.x.x port 42670 [preauth]
Apr 14 15:27:17 ubuntu-server sshd[8727]: Connection closed by authenticating user root x.x.x.x port 42672 [preauth]
    
por 14.04.2019 / 16:03