Como manipular o arquivo de log usando grep ou awk?

2

Estou tentando recuperar o arquivo de log / var / log / secure e mostrar somente o tipo de log "Senha com falha", que aparece pelo menos 3 vezes. Existe alguma maneira de fazer isso usando apenas comandos do Linux? awk? grep?

Um exemplo de log seguro,

Mar 20 08:38:28 localhost sshd[21895]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=mail.queued.net user=root 
Mar 20 08:38:31 localhost sshd[21895]: Failed password for root from 207.210.101.209 port 2854 ssh2 
Mar 20 15:38:31 localhost sshd[21896]: Received disconnect from 207.210.101.209: 11: Bye Bye 
Mar 20 08:38:32 localhost unix_chkpwd[21900]: password check failed for user (root) 
Mar 20 08:38:32 localhost sshd[21898]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=she

deste arquivo de log, espero que não diga nada porque há apenas 1 linha de senha com falha, mas vamos dizer que existiam 4 linhas de "Failed Password", com o mesmo IP - eu quero mostrar o endereço IP que provavelmente está tentando me forçar ..

    
por J.Dog 09.12.2016 / 17:48

2 respostas

0

Esta é apenas uma maneira de fazer o trabalho. Em vez do nome de usuário, prefiro contar quantas vezes um endereço IP específico tenta se conectar ao meu host, porque posso bani-lo.

awk '/Failed password/{ z[$11]++; } 
     END{ 
       for (i in z){ 
         if (z[i]>3) printf("%s attemps %s times.\n", i, z[i])
       }
}' /var/log/secure

(Claro que pode ser um comando oneliner, eu indentado para aumentar a legibilidade.)

Explicação:

awk lê o arquivo de log linha por linha. Se uma linha contiver a string /Failed password/ incrementa um elemento da matriz z[$11]++ index por $11 (isto é, o endereço IP): Eu uso isso como um contador. No final, pesquise na matriz z[$11] e imprima apenas os endereços IP que tentaram se conectar mais de 3 vezes.
Você pode personalizar o cheque e a mensagem impressa conforme desejar.

Se sua preocupação for com as tentativas de força bruta, sugiro que você use uma ferramenta existente como Fail2ban que verifica os arquivos de log e proíbe os IPs que mostram os sinais maliciosos (por exemplo: muitas falhas de senha, busca de explorações, etc.). É fácil de entender e configurar para atender às suas necessidades.

    
por 09.12.2016 / 22:20
0
$ awk '/Failed password/{for(i=1;i<=NF;i++)if($i~/for/)user[$(i+1)]++}END{for(j in user){if(user[j]>3){printf("%s : %s times failed\n",j,user[j])}}}' /var/log/secure
    
por 09.12.2016 / 18:00