Registrando tentativas de acesso SSH

60

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

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

UserK
fonte
Você também deve considerar executar o sshd em uma porta não padrão. Além disso, é possível configurar o iptables para negar novas tentativas de conexão se um único IP tentar uma nova conexão ssh X vezes em um minuto.
ivanivan
Para mim, a questão não foi fail2ban, mas sshguard, algo que eu nunca tinha ouvido falar #
Ray Foss

Respostas:

55

Nos servidores Ubuntu, você pode encontrar quem fez 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)
Anthon
fonte
2
Por curiosidade, o Ubuntu tem o lastbcomando ?
Bratchley
11
@JoelDavis Meu Ubuntu 12.04 funciona, mas a saída é uma única linha que não se parece com a sua saída. Talvez precise ser configurado.
Anthon
Isso é relevante ?
Bratchley
No Ubuntu Servidor 14,04 e acima, este deve ler/var/log/auth.log
Serge Stroobandt
29

Nas 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 obter mais informações, leia as perguntas e respostas do superusuário intitulado: Como registrar as tentativas de acesso ao SSH e acompanhar o que os usuários do SSH acabam fazendo no meu servidor? .

Ramesh
fonte
11
Não existe /var/log/securenenhum dos meus sistemas Ubuntu.
Anthon
@ Anthon, surpreendentemente eu não tenho /var/log/authem meus sistemas. É por isso que antes de postar a resposta, eu verifiquei se eu tinha /var/log/secureno meu sistema, que é também um servidor Ubuntu :)
Ramesh
Eu tinha verificado 14.04, 12.04 e uma máquina antiga em 8.04. Qual versão você está executando? Fez algo especial para obter esse arquivo?
Anthon
@Anton, verifica-se que o servidor em que eu testei foi RHEL. No entanto, a resposta no link que eu forneci foi para o Ubuntu, o que parece estranho, já que você verificou 3 variações do ubuntu e não há /var/log/secure.
Ramesh
6
/var/log/secureé um ismo do Fedora / CentOS / RHEL.
Slm
8

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

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

ou ainda mais limpo

tail -100 /var/log/auth.log | grep 'sshd'
WebComer
fonte
7

Observe que a configuração padrão no Ubuntu é NÃO registrar logins ssh no /var/log/autharquivo. Este é o INFOnível de log.

Se você deseja que ele inclua tentativas de login no arquivo de log, será necessário editar o /etc/ssh/sshd_configarquivo (como root ou com sudo) e alterar LogLevelde de INFOpara VERBOSE.

Depois disso, reinicie o daemon sshd com

sudo service rsyslog restart

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

Shay Walters
fonte
4

Minha recomendação é usar o auditd . Isso é feito usando o subsistema de auditoria do kernel do linux e, na minha opinião, a maneira correta de fazer isso, se você estiver falando sério. E dada a natureza da pergunta {relacionada à segurança}, você também deve usar o PAM . No nível padrão de apenas ter o auditd e o PAM instalados, você deve obter automaticamente todas as tentativas de SSH com e sem êxito registradas no seu arquivo audit.log. Então você realmente não precisa configurar nada, apenas instale o auditd e o PAM . Conheço isso em primeira mão para o SLES. E apostaria que o RHEL e qualquer outra versão corporativa do linux funcionariam da mesma forma.

http://manpages.ubuntu.com/manpages/precise/man8/auditd.8.html

no log de auditoria bruto gerado pelo auditd, você pode usar algo como aureportfiltrá-lo, descrito nas páginas do manual auditd , escrever seu próprio analisador de texto ou apenas usar o VI e procurar por palavras-chave.

aqui está uma exceção do meu /var/log/audit/audit.logarquivo 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)'
  • acima, o nome do meu servidor é tubarão .
  • muitas linhas como esta estão no audit.log, quero esta com base em exe = "/ usr / sbin / sshd"
  • o uid da conta que está sendo transferida para ssh é o valor de auid, que é 23456 para este exemplo
  • o nome da conta do usuário associado ao auid é especificado por acct = "ron"
  • Na maioria das vezes, o sistema de auditoria registra o nome do host DNS do sistema que está tentando se conectar, mas sempre tem seu endereço IP
  • a data da entrada que está na época, então você terá que convertê-la através de algo como o date --date @1480622612.317que resulta Thu Dec 1 15:03:32 EST 2016e é quando eu transferi o SSH para o 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 e com qual tentativa de nome de usuário. E, obviamente, o ssh bem-sucedido tenta entender o que está acontecendo no seu sistema - por exemplo, seu colega de trabalho que fica sentado na mesma mesa todos os dias com hostname = bobscomputer e ip address = 192.168.5.5; se você vir uma tentativa bem-sucedida do ssh às duas da manhã de ontem sob o nome de usuário do endereço IP 10.10.5.6, por exemplo, talvez seja do seu interesse conversar com bob para investigar. Possível tentativa de hack por outra pessoa? E logo após, existem tentativas de fazer root no log de auditoria da conta de bob?

quando você vê repetitivo res=failede auid=0e acct=root, em seguida, que é alguém tentando ssh em sua caixa para a conta root, e é quando você modifica /etc/hosts.denya esse endereço IP para SSHD.

Ron
fonte
2

Eu sei que isso é antigo, mas escrevi algo para monitorar conexões / tentativas ssh bem-sucedidas e com falha. Assim como IPs banidos, se você estiver usando o sshguard. O software está escrito em Python. Enviará um e-mail quando alguém se conectar com êxito via ssh, quando alguém errar a senha do ssh ou quando alguém for banido devido a muitas tentativas falhas. Espero que isso ajude alguém no futuro que procurar esse problema e encontrar meu código!

https://github.com/amboxer21/SSHMonitor

Para o script python, escrevi um script bash para monitorar o processo. Ele verifica se está sendo executado a cada minuto através da tarefa cron do root. Se não estiver em execução, inicia outro processo. Que é chamado por uma tarefa cron raiz a cada minuto.

Aguevara
fonte
-2

A melhor coisa que eu já encontrei para o log de comandos SSH é o rootsh, essa ferramenta permite que o administrador obtenha todos os comandos de todas as sessões com amplo nível de log.

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

baixar do github aqui está o link

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

chmod +x setup_rootssh.sh ; sudo ./setup_rootssh.sh
Mansur Ali
fonte
Eu acho que essa é uma maneira ruim de promover seu perfil no github ... Basicamente, você está pedindo para baixar um script da Web e executá-lo usando o root. Downvoted
UserK
Eu não estou promovendo meu perfil no github, apenas tentei simplificar as coisas, como as pessoas fazem acima, se você votar em mim por promover o perfil em votar também. além disso, no guia de regras de troca de pilhas, nada é escrito assim, não podemos compartilhar arquivos de código de repositórios pessoais.
Mansur Ali
Por favor, perdoe meu mau senso de humor. Antes de tudo, obrigado pela resposta Mansur. O voto negativo vem do fato de você estar pedindo para executar vários comandos desconhecidos como usuário root. Da última vez que fiz isso, havia uma barra rm-R dentro.
UserK 13/09
11
Tudo bem, a propósito, a troca de pilhas não me permitirá códigos tão longos que é por isso que coloquei esse script na minha resposta. Linux é muito simples.
Mansur Ali