Como parar / impedir a força bruta do SSH [fechado]


22

Sou muito novo em administração de redes, por isso, tenha em mente que ainda não sou tão experiente.

Eu tenho um servidor raiz Ubuntu com painel plesk.

Ontem, meus amigos e eu percebemos que a qualidade da fala no nosso TS3 ficou muito ruim. Enviei alguns pings para o servidor e houve uma perda muito grande de pacotes. Depois disso, pesquisei um pouco e descobri que existe um auth.log. Eu baixei e rolei um pouco, então achei o seguinte:

May 13 10:01:27 rs204941 sshd[9351]: input_userauth_request: invalid user student [preauth]
May 13 10:01:27 rs204941 sshd[9351]: pam_unix(sshd:auth): check pass; user unknown
May 13 10:01:27 rs204941 sshd[9351]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=112.220.198.102 
May 13 10:01:29 rs204941 sshd[9351]: Failed password for invalid user student from 112.220.198.102 port 39806 ssh2
May 13 10:01:29 rs204941 sshd[9351]: Received disconnect from 112.220.198.102: 11: Bye Bye [preauth]
May 13 10:01:31 rs204941 sshd[9353]: Invalid user student from 112.220.198.102

Parece que alguém tentou fazer logon no SSH várias vezes. Rolei um pouco e vi que esse alguém tenta usar muitos nomes de usuário diferentes:student, tech, psi, news,...

Centenas desses logons foram exibidos no arquivo.

Procurei as estatísticas de tráfego no site do meu datacenter. Foi apenas a 17 MB por hora. Eu tenho um Backbone de 100Mbit, então a transferência de dados em si não parece ser o problema.

No momento, não consigo acessar o servidor de forma alguma.

Minha pergunta é: como posso obter acesso novamente, como posso suprimir esse ataque e impedir os seguintes ataques?


Ainda estou aprendendo minhas coisas neste departamento .... Mas isso não seria um bom uso para bater na porta?
Mjrider


Respostas:


37

Como obter acesso?

Não está claro por que você não pode acessar sua conta.

Se a sua máquina estiver sob ataque ou com muita carga, você deve conversar com seu provedor sobre a restrição de acesso (restrições de IP) ou o desligamento do servidor (desconectado da Internet).

Você também pode precisar de acesso fora da banda, com o qual seu provedor poderá ajudar.

Se alguém comprometer seu servidor, talvez seja necessário restaurar os backups ou usar uma imagem de recuperação.

Como evitar ataques ao seu servidor, em particular o SSH

melhor maneira de evitar logons de força bruta?

Não os deixe chegar à sua máquina em primeiro lugar! Existem várias maneiras de interromper as tentativas de força bruta antes que elas cheguem ao seu host ou mesmo no nível SSH.

Dito isto, proteger o sistema operacional com algo como fail2ban é uma ótima idéia. http://en.wikipedia.org/wiki/Fail2ban

Fail2ban é semelhante ao DenyHosts ... mas, diferentemente do DenyHosts, que se concentra no SSH, o fail2ban pode ser configurado para monitorar qualquer serviço que grave tentativas de logon em um arquivo de log e, em vez de usar /etc/hosts.deny, apenas para bloquear endereços / hosts IP , fail2ban pode usar Netfilter / iptables e TCP Wrappers /etc/hosts.deny.

Há várias técnicas importantes de segurança que você deve considerar para ajudar a impedir logins de força bruta:

SSH:

  • Não permitir que o root efetue login
  • Não permita senhas ssh (use autenticação de chave privada)
  • Não escute em todas as interfaces
  • Crie uma interface de rede para SSH (por exemplo, eth1), diferente da interface para a qual você atende solicitações (por exemplo, eth0)
  • Não use nomes de usuário comuns
  • Use uma lista de permissões e permita apenas usuários que exijam acesso SSH
  • Se você precisar de acesso à Internet ... Restrinja o acesso a um conjunto finito de IPs. Um IP estático é ideal, no entanto, bloqueá-lo para xx0.0 / 16 é melhor que 0.0.0.0/0
  • Se possível, encontre uma maneira de conectar-se sem acesso à Internet, para que você possa negar todo o tráfego da Internet para SSH (por exemplo, com a AWS, você pode obter uma conexão direta que contorna a Internet, chama-se Conexão direta)
  • Use software como o fail2ban para capturar ataques de força bruta
  • Verifique se o sistema operacional está sempre atualizado, em particular pacotes de segurança e ssh

Aplicação:

  • Verifique se seu aplicativo está sempre atualizado, em particular pacotes de segurança
  • Bloqueie as páginas 'admin' do seu aplicativo. Muitos dos conselhos acima também se aplicam à área administrativa do seu aplicativo.
  • Proteja a sua área de administração com senha, algo como o htpasswd for console da web projetará todas as vulnerabilidades subjacentes do aplicativo e criará uma barreira extra à entrada
  • Bloqueie as permissões de arquivo. As 'Upload de pastas' são notórias por serem pontos de entrada de todos os tipos de coisas desagradáveis.
  • Considere colocar seu aplicativo atrás de uma rede privada e expor apenas seu balanceador de carga front-end e uma jumpbox (essa é uma configuração típica na AWS usando VPCs)

1
Eu instalei Fail2ban via help.ubuntu.com/community/Fail2ban Parece ser muito poderosa e (notificações de correio, ...) user-friendly

Recebi uma mensagem do meu datacenter: houve um ataque de inundação (o que é isso?) E isso fez a conexão muito ruim para muitos servidores. Não foi um ataque especial ao meu servidor.


1
Interessante. Parece que meu datacenter foi o alvo do ataque. Mas saber que fui abusado além disso também é muito bom. E o Fail2ban é realmente uma boa ferramenta. Vou ler sobre o Iptables e o SSH Config nos próximos dias e tentar torná-lo muito mais seguro.

3
Configure o openssh para escutar uma porta que não seja 22 e configure o iptables para descartar qualquer coisa que chegue à porta 22. Se você não espera ssh de outro país que não seja sua terra natal, crie uma lista de bloqueios em countryipblocks.net/country_selection. php e use-o com o iptables.
ThoriumBR

4

Como posso suprimir esse ataque e impedir os seguintes ataques

Normalmente eu mudo a porta ssh padrão de 22 para outra como 1122. Isso evita muitos ataques automáticos do bot, mas uma simples verificação de porta pode detectá-la. De qualquer forma:

vi /etc/ssh/sshd_config

e edite a porta 22 para a porta 1122 , mas isso não é suficiente.

Regras automáticas de IPTables no bruteforce

Eu uso log2iptables https://github.com/theMiddleBlue/log2iptables em vez Fail2ban, porque é um script Bash simples que analisa qualquer arquivo de log com uma expressão regular e executa iptables. Por exemplo, quando ocorrem 5 correspondências, log2iptables descarta o endereço IP específico. É legal porque usa a API do Telegram e pode me enviar uma mensagem no meu telefone quando ele encontrar um problema :)

espero que isso ajude!


8
A partir da correlação entre o URL do projeto e seu identificador de SF, acho que você está envolvido com esse projeto. Consulte nossas diretrizes sobre como referenciar seus próprios produtos, notando, em particular, o requisito de " você deve divulgar sua afiliação em suas respostas ".
MadHatter apoia Monica

1

Acabei de montar isso, execute a cada 15 minutos como um cronjob etc:

for z in `grep Invalid /var/log/auth.log | awk '{ print $NF }' | sort | uniq`
do
  count1=`grep $z /etc/hosts.deny | wc -l`
  count2=`grep Invalid /var/log/auth.log | grep $z | wc -l`
  if [ $count1 -eq 0 -a $count2 -gt 10 ] ; then
    current=`egrep "^ssh" /etc/hosts.deny | sed 's/sshd[ :,]*//'`
    sudo cp /etc/hosts.deny.bak /etc/hosts.deny
    sudo chmod 666 /etc/hosts.deny
    if [ $current ] ; then
      echo "sshd : $current , $z" >> /etc/hosts.deny
    else
      echo "sshd : $z" >> /etc/hosts.deny
    fi
    sudo chmod 644 /etc/hosts.deny
  fi
done

0

Esta é a minha solução alternativa para ataques SSH. A idéia é continuar fechando o daemon SSH se não for usado. Sem porta aberta, sem ataque. Você pode experimentá-lo. É de código aberto https://github.com/indy99/nnet_port_guard


1
Bem-vindo à falha do servidor! Sua resposta sugere que uma solução viável para a pergunta está disponível em outro site. A família de sites de perguntas e respostas da Stack Exchange geralmente desaprova esse tipo de resposta, porque outros sites podem ser movidos, excluídos ou alterados. Por favor, leia Como escrevo uma boa resposta? e considere revisar sua resposta para incluir as etapas necessárias para resolver o problema. E não se esqueça de fazer o tour pelo site .
Paul

0

Solução automatizada para Centos / RHEL para bloquear maus atores

Aqui está um script para o Centos verificar logins com falha ssh para contas de usuário inválidas e senhas ruins para contas válidas. Se o IP de origem nos atingiu mais de três vezes e ainda não estiver na lista de negações, ele será adicionado à lista de negações. Eu corro isso a cada 15 minutos a partir do crontab da raiz. Também não permiti logins raiz via ssh, para que a combinação mantenha as coisas razoavelmente silenciosas.

     #/bin/bash
     # Save a copy of the existing hosts.deny file for safety
     cp /etc/hosts.deny /etc/hosts.deny.bak
     # Get a list of the offending IP addresses and process them
     for z in `grep "Invalid\|Failed" /var/log/secure | awk '{ print $NF }' | sort | uniq`
     do
     # Get the number of times this IP hit us
     hits=`grep "Invalid\|Failed" /var/log/secure* | grep $z | wc -l`
     # Check whether this IP is already blocked
     blocked=`grep $z /etc/hosts.deny | wc -l`
     # If they hit us more than 3 times and are not already on the deny list
     # add them to the deny list
     if [ $hits -gt 3 -a $blocked -eq 0 ]
     then
          echo "sshd : $z" >> /etc/hosts.deny
     fi
     done

1
Veja o fail2banque faz a mesma coisa e é testado em batalha.
Patrick Mevzek
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.