Como recuperar endereços IP de possíveis invasores ssh?

17

Eu tenho apenas cat /var/log/auth.log log e vejo que há muitos | grep "Failed password for" registros.

No entanto, existem dois tipos de registros possíveis - para usuário válido / inválido. Isso complica minhas tentativas de | cut deles.

Gostaria de criar uma lista (arquivo de texto) com endereços IP de possíveis invasores e número de tentativas para cada endereço IP. Existe alguma maneira fácil de criá-lo?

Além disso, em relação apenas a ssh : O que todos os registros de /var/log/auth.log devo considerar ao criar uma lista de possíveis invasores?

Exemplo do meu 'auth.log' com números ocultos:

cat /var/log/auth.log | grep "Failed password for" | sed 's/[0-9]/1/g' | sort -u | tail

Resultado:

Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user ucpss from 111.11.111.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user vijay from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user webalizer from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user xapolicymgr from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user yarn from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user zookeeper from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user zt from 111.11.111.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for mysql from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for root from 111.11.111.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for root from 111.111.111.1 port 11111 ssh1
    
por kravemir 18.03.2015 / 09:22

4 respostas

19

Você poderia usar algo assim:

grep "Failed password for" /var/log/auth.log | grep -Po "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" \
| sort | uniq -c

Ele solicita a string Failed password for e extrai ( -o ) o endereço IP. Ele é classificado e uniq conta o número de ocorrências.

A saída ficaria assim (com o seu exemplo como arquivo de entrada):

  1 111.111.111.1
  3 111.11.111.111
  6 111.111.11.111

O último na saída tentou 6 vezes.

    
por 18.03.2015 / 10:10
6

Pode ser uma solução inchada, mas sugiro que você instale algo como Fail2Ban

Ele é feito para esse tipo de log + adiciona o bônus de poder adicionar regras (temporárias) em seu firewall para bloquear infratores recorrentes. Certifique-se de whitelist seu próprio ip, porém, eu consegui me trancar temporariamente em algumas ocasiões

    
por 18.03.2015 / 10:07
0

Isso funcionou muito bem para mim. (IPs foram alterados para proteger os culpados)

$ awk '/Failed/ {x[$(NF-3)]++} END {for (i in x){printf "%3d %s\n", x[i], i}}' /var/log/auth.log | sort -nr
 65 10.0.0.1
 14 10.0.0.2
  4 10.0.0.3
  1 10.0.0.4
    
por 19.03.2015 / 01:08
0
grep "Failed password for" /var/log/auth.log |
    awk -F"from" {'print $2'} |
    awk {'print $1'} |
    sort -u
    
por 18.03.2015 / 09:54