Como obtenho o Linux para me notificar sobre tentativas de login com falha?

3

Eu já vi isso quando você logar em uma caixa do Linux errado, quando você logar com sucesso, ele avisa que alguém tentou fazer logon como você e não teve sucesso. O que eu preciso fazer para que isso aconteça na minha caixa aqui?

    
por Syseng 20.03.2015 / 19:32

1 resposta

3

Para o SSH em particular, você provavelmente precisará garantir que o registro em log esteja ativado em /etc/ssh/sshd_config .

Caso contrário, é uma pergunta vaga que depende de como você deseja ser alertado e os detalhes do seu sistema e sua configuração, até mesmo como eles se conectam. Você pode simplesmente seguir um arquivo de log: tail -f /var/log/messages é comum ou journalctl -f em alguns sistemas Linux. Um segmento de soluções para alertas de e-mail está no ServerFault.

Na maioria dos sistemas GNU / Linux modernos, você deve obter um resumo de cada tentativa malsucedida com SSH ou TTY na última hora:

journalctl --since="$(date -d -1hours +\%F\ \%H):00:00" --until="$(date +\%F\ \%H):00:00" | grep -iE "Failed (pass|log)"

Na verdade, isso abrange a última hora até a hora atual. Você poderia criar um processo para recuperar a cada hora e enviá-lo por e-mail para você.

As entradas seriam semelhantes:

Mar 21 06:16:23 yourhostname sshd[29477]: Failed password for root from 103.41.125.20 port 35243 ssh2
Mar 21 06:16:33 yourhostname login[317]: FAILED LOGIN 1 FROM tty4 FOR bolwerk, Authentication failure
Mar 21 06:22:29 yourhostname sshd[29695]: Failed password for invalid user poo from ::1 port 60139 ssh2

Aqui está um script que você pode colocar no crontab para coletar isso:

#!/bin/sh

# gather journal information in time frame
export CRUFT=$(journalctl --since="$(date -d -1hours +\%F\ \%H):00:00" --until="$(date +\%F\ \%H):00:00" | grep -iE "Failed (pass|log)")

#email settings
export EMAILFROM="From: Security Alert <[email protected]>"
export EMAILSUBJECT="Subject: Failed login Summaries from $(date -d -1hours +\%H):00 to $(date +\%H):00"
export EMAILALERTTO="[email protected]"

if [ "x$CRUFT" != "x" ]; then
        echo -e "$EMAILFROM\n$EMAILSUBJECT\n\nFailed logins:\n$CRUFT" | ssmtp "$EMAILALERTTO"
fi

Você assume que deseja enviar as tentativas fracassadas da última hora a cada hora. Também assume que você tenha journalctl, provavelmente requer uma área de usuário GNU (a maioria dos distrobs tem isso).

Para que funcione, você precisará configurar o SSMTP corretamente. Aqui é um link que fala sobre fazer isso com o gmail. Leia sobre segurança também no SSMTP; configurando errado exponha sua senha, se você tiver um sistema compartilhado. Você pode querer incluir esta linha na configuração ssmtp.conf :

FromLineOverride=yes

Ele fará um resumo dos eventos de login com falha durante a última hora e os enviará por e-mail para você. Em uma rede pública com a porta padrão, as pessoas / bots estão constantemente tentando usar caixas inseguras de força bruta. Não é uma grande ameaça se você definir suas senhas corretamente, etc.

Se eu puder fazer uma sugestão geral, os logins bem-sucedidos poderão ser mais interessantes. Em uma rede pública com a porta padrão, as pessoas / bots estão constantemente tentando usar caixas inseguras de força bruta. Não é uma grande ameaça se você definir suas senhas corretamente, etc ... Mas colocar um script de alerta de algum tipo em / etc / profile para detectar qualquer login bem-sucedido provavelmente seria uma tarefa fácil.

Notas: Aqui está a documentação do CentOS em journalctl; deve ser semelhante em muitos outros sistemas operacionais GNU / Linux. Outros exemplos de subtração de comando de data, dependendo de como você deseja sincronizar os relatórios.

    
por 21.03.2015 / 18:51