Como formato esta regex para que funcione no fail2ban?

6

Acabei de instalar o fail2ban no meu servidor CentOS em resposta a uma tentativa de força bruta do SSH. As expressões regulares padrão no arquivo sshd.conf do fail2ban não correspondem a nenhuma entrada no audit.log, que é onde o SSH parece estar registrando todas as tentativas de conexão, portanto, estou tentando adicionar uma expressão que corresponda.

A string que estou tentando corresponder é a seguinte:

type=USER_LOGIN msg=audit(1333630430.185:503332): user pid=30230 uid=0 auid=500
 subj=user_u:system_r:unconfined_t:s0-s0:c0.c1023 msg='acct="root": exe="/usr
/sbin/sshd" (hostname=?, addr=<HOST IP>, terminal=sshd res=failed)'

A expressão regular que estou tentando usar é:

^.*addr=<HOST>, terminal=sshd res=failed.*$

Eu usei regextester.com e regexr para tentar criar o regex. Os testadores me deram uma correspondência para este regex: ^.*addr=\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}, terminal=sshd res=failed.*$ , mas o fail2ban-regex reclama se eu não usar a tag <HOST> na regex. No entanto, usar ^.*addr=<HOST>, terminal=sshd res=failed.*$ me dá 0 correspondências.

Neste momento, estou totalmente preso e agradeceria muito qualquer ajuda. O que estou fazendo de errado no regex que estou tentando usar?

    
por chapkom 05.04.2012 / 19:26

1 resposta

7

Aparentemente, este é um caso de RTFM. Depois de pesquisar por um tempo, achei uma página no site fail2ban que afirma que faz duas correspondências de regex por linha, uma para o timestamp e um para o resto da linha seguindo o timestamp. O registro de data e hora no arquivo audit.log está no formato Epoch e aparentemente falhou na primeira correspondência de expressão regular. Usar o fail2ban-regex para comparar / var / log / secure com meu arquivo fail2ban sshd.conf resultou no comportamento desejado.

A solução correta foi apontar a seção apropriada do meu jail.conf em / var / log / secure.

Para pessoas que ainda querem fazer suas próprias expressões regulares, esta seção tem muito de boa informação, incluindo este pequeno detalhe que eventualmente me ajudou a resolver isso:

In order for a log line to match your failregex, it actually has to match in two parts: the beginning of the line has to match a timestamp pattern or regex, and the remainder of the line has to match your failregex. If the failregex is anchored with a leading ^, then the anchor refers to the start of the remainder of the line, after the timestamp and intervening whitespace.

Espero que o meu momento de RTFM ajude alguém no futuro.

    
por 06.04.2012 / 12:07