Registrando tentativas de acesso SSH

44

Configurei um servidor Ubuntu com o openssh para conectar-me a ele e executar comandos de um sistema remoto como um telefone ou um laptop. O problema é ... Eu provavelmente não sou o único.

Existe uma maneira de saber todas as tentativas de login feitas no servidor?

    
por UserK 01.05.2014 / 15:52

7 respostas

37

Nos servidores Ubuntu, você pode encontrar quem efetuou login quando (e de onde) no arquivo /var/log/auth.log . Lá, você encontra entradas como:

May  1 16:17:02 owl CRON[9019]: pam_unix(cron:session): session closed for user root
May  1 16:17:43 owl sshd[9024]: Accepted publickey for root from 192.168.0.101 port 37384 ssh2
May  1 16:17:43 owl sshd[9024]: pam_unix(sshd:session): session opened for user root by (uid=0)
    
por 01.05.2014 / 16:19
24

Em distros baseadas no Red Hat, como o Fedora / CentOS / RHEL, você pode verificar os usuários logados dentro do arquivo /var/log/secure .

Se você quiser mais informações, leia este SuperUser Q & A intitulado:

.

    
por 01.05.2014 / 16:09
5

No Ubuntu, você pode efetuar login via SSH e usar o comando tail do Linux para exibir o último x numero de linhas do seu arquivo /var/log/auth.log . Quando você estiver conectado via SSH, use o seguinte comando para visualizar as 100 últimas linhas do seu registro SSH:

tail /var/log/auth.log -n 100

ou mesmo mais limpo

tail -100 /var/log/auth.log | grep 'sshd'
    
por 08.04.2016 / 03:33
3

Observe que a configuração padrão no Ubuntu é NÃO registrar logins ssh no arquivo /var/log/auth . Este é o nível de registro INFO .

Se você deseja incluir tentativas de login no arquivo de log, será necessário editar o arquivo /etc/ssh/sshd_config (como root ou com sudo) e alterar o LogLevel de INFO para VERBOSE .

Depois disso, reinicie o daemon sshd com

sudo service rsyslog restart

Depois disso, as tentativas de login do ssh serão registradas no arquivo /var/log/auth.log .

    
por 21.12.2016 / 16:04
3

Minha recomendação é usar auditd . Isso é o registro usando o subsistema de auditoria do kernel do linux e, na minha opinião, a maneira correta de fazê-lo se você estiver falando sério. E, dada a natureza da questão {security related}, você deve usar PAM também. No nível padrão de apenas ter auditd e PAM instalado, você deve obter automaticamente todas as tentativas SSH bem-sucedidas e malsucedidas registradas em seu arquivo audit.log. Então você realmente não precisa configurar nada, apenas auditd e PAM instalados. Eu sei disso em primeira mão para o SLES. E apostaria que o RHEL e qualquer outra versão enterprise do linux operariam de forma semelhante.

link

dentro do registro de auditoria bruto gerado por auditd você pode usar algo como aureport para filtrar o que é descrito nas páginas do manual auditd , escrever seu próprio analisador de texto, ou apenas use VI e pesquise por palavras-chave.

aqui é uma exceção do meu arquivo /var/log/audit/audit.log comigo ssh'ing no meu servidor linux.

node=shark type=CRED_DISP msg=audit(1480622612.317:2211277): user pid=117768 uid=0 auid=23456 ses=2201 msg='op=PAM:setcred acct="ron" exe="/usr/sbin/sshd" (hostname=abc415.mycompany.us, addr=172.16.152.5, terminal=ssh res=success)'
  • do acima, o nome do meu servidor é shark .
  • muitas linhas como essa estão em audit.log, quero essa baseada em exe="/ usr / sbin / sshd"
  • o uid da conta que está sendo ssh'd é o valor de auid, que é 23456 para este exemplo
  • o nome da conta de usuário associada a auid é especificado por acct="ron"
  • na maioria das vezes, o sistema de auditoria registra o nome do host do DNS do sistema tentando se conectar, mas sempre tem seu endereço IP
  • a data da entrada que está no horário da época, então você terá que converter isso por meio de algo como date --date @1480622612.317 , o que resulta em Thu Dec 1 15:03:32 EST 2016 e é quando eu ssh'd no meu servidor.

Quando res=failed é quando você deseja investigar esses endereços IP e nomes de host para ver quais sistemas estavam tentando se conectar, sob o nome de usuário tentado. E obviamente o ssh bem-sucedido tenta entender o que está acontecendo no seu sistema - por exemplo, seu colega de trabalho bob que senta na mesma mesa todos os dias com hostname = bobscomputer e ip address = 192.168.5.5; Se você ver uma tentativa bem-sucedida de ssh às 2 da manhã de ontem sob seu nome de usuário do endereço IP 10.10.5.6, por exemplo, pode ser de seu interesse falar com Bob para investigar. Possível tentativa de hackear por outra pessoa? E logo após o su tentativas de root no log de auditoria da conta de bob?

quando você vê res=failed e auid=0 e acct=root repetitivas, isso é alguém tentando enviar sua caixa ssh para a conta raiz e é quando você modifica /etc/hosts.deny com esse endereço IP para SSHD.

    
por 04.04.2017 / 23:06
2

Eu sei que isso é antigo, mas eu escrevi algo para monitorar conexões / tentativas ssh bem sucedidas e com falha. Bem como IPs proibidos se você estiver usando o sshguard. Eu escrevi em Python e em Ruby. Ele irá enviar e-mail quando alguém se conecta com sucesso via ssh, quando alguém recebe a senha ssh errado ou quando alguém é banido devido a muitas tentativas falhadas. Espero que isso ajude alguém no futuro a pesquisar esse problema e encontrar meu código!

Implementação do Ruby:

https://github.com/amboxer21/SSHMonitor

Implementação em Python:

https://github.com/amboxer21/SSHMonitorPy

Para o script python, escrevi um script bash para monitorar o processo. Ele verifica se está sendo executado a cada minuto por meio da tarefa cron do usuário root. Se não estiver em execução, inicia outro processo.



Script de bash:

/home/anthony/.ssh/is_sshm_running.sh

#!/bin/bash

if [[ 'ps aux | egrep --color -i "root.*[0-9]*:[0-9]* sudo /usr/bin/python /usr/bin/SSHMonitor.py" | wc -l' < 1 ]]; then
  sudo /usr/bin/python /usr/bin/SSHMonitor.py -e "[email protected]" -p "password" &
fi

if [[ 'ps aux | egrep --color -i "root.*[0-9]*:[0-9]* sudo /usr/bin/python /usr/bin/SSHMonitor.py" | wc -l' > 1 ]]; then
  sudo kill -9 'ps aux | egrep --color -i "root.*[0-9]*:[0-9]* sudo /usr/bin/python /usr/bin/SSHMonitor.py" | awk '{print $2}'';
fi

O que é chamado por esta tarefa cron raiz a cada minuto:

[anthony@ghost ImageCapturePy]$ sudo crontab -l
[sudo] password for anthony: 
* * * * * /bin/bash /home/anthony/.ssh/is_sshm_running.sh
    
por 04.04.2017 / 20:44
0

A melhor coisa que já encontrei para o registro de comandos SSH é o rootsh esta ferramenta permite ao administrador obter todos os comandos de todas as sessões com um nível extenso de registro.

Eu escrevi um script para instalar e configurar o ROOTSH no Ubuntu e no CentOS / RHEL

download do github aqui é o link

https://gist.githubusercontent.com/mansurali901/e1e3acc7dca13aeca25b68a69571c60f/raw/b1b16f73ec9a974486e4c0c0d65a7d41f2eca718/setup_rootssh.sh

chmod +x setup_rootssh.sh ; sudo ./setup_rootssh.sh
    
por 21.03.2018 / 10:31

Tags