it-swarm-pt.tech

Como parar / impedir o SSH bruteforce

Eu sou muito novo em administração de redes, então, por favor, considere 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 TS3 ficou muito ruim. Enviei alguns pings para o servidor e houve uma perda muito grande de pacotes. Depois disso, pesquisei um pouco no Google e descobri que há 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. Eu 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?

23
user219534

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 colocar o servidor offline (desconectar-se 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 o /etc/hosts.deny, apenas para bloquear endereços/hosts IP , fail2ban pode usar o 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 x.x.0.0/16 é melhor que 0.0.0.0/0
  • Se possível, encontre uma maneira de se conectar 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 ignora a Internet, é chamada 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

Inscriçã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)
39
Drew Khoury

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 de Fail2ban, porque é um script Bash simples que analisa qualquer arquivo de log com uma expressão regular e execute 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!

4
theMiddle

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
2
Mark

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, portanto a combinação mantém 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
0
David Lash

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

0
indy99