Regras automáticas de IPTables em força bruta

Regras automáticas de IPTables em força bruta

Sou muito novo em administração de redes, portanto, lembre-se de que ainda não tenho muita experiência.

Eu tenho um servidor raiz Ubuntu com painel plesk.

Ontem meus amigos e eu notamos que a qualidade da fala em nosso TS3 ficou muito ruim. Enviei alguns pings para o servidor e houve uma perda de pacotes muito alta. Depois disso pesquisei um pouco no Google e descobri que existe um arquivo auth.log. Baixei e rolei um pouco, então encontrei isto:

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 login via SSH várias vezes. Rolei um pouco e vi que alguém tenta usar muitos nomes de usuário diferentes:student, tech, psi, news,...

Centenas desses logins foram exibidos no arquivo.

Pesquisei as estatísticas de tráfego no site do meu datacenter. Era apenas 17 MB por hora. Eu tenho um Backbone de 100Mbit, então a transferência de dados em si parece não 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 evitar os ataques seguintes?

Responder1

Como obter acesso?

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

Caso sua máquina esteja sob ataque ou alta carga, você deve conversar com seu provedor sobre restringir o acesso (Restrições de IP) ou colocar o servidor offline (desconectar da Internet).

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

Se alguém comprometeu seu servidor, talvez seja necessário restaurá-lo a partir de backups ou usar uma imagem de recuperação.

Como prevenir ataques ao seu servidor, em particular SSH

melhor maneira de evitar logons de força bruta?

Em primeiro lugar, não deixe que eles cheguem à sua máquina! Existem muitas maneiras de impedir tentativas de força bruta antes que elas cheguem ao seu host, ou mesmo no nível SSH.

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

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

Há uma série de técnicas de segurança importantes que você deve considerar para ajudar a evitar logins de força bruta:

SSH:

  • Não permitir login de root
  • Não permita senhas ssh (use autenticação de chave privada)
  • Não ouça em todas as interfaces
  • Crie uma interface de rede para SSH (por exemplo, eth1), que seja diferente da interface da 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...Restringir o acesso a um conjunto finito de IPs. Um IP estático é ideal, mas bloqueá-lo em xx0.0/16 é melhor que 0.0.0.0/0
  • Se possível, encontre uma maneira de se conectar sem acesso à Internet, dessa forma você pode negar todo o tráfego da Internet para SSH (por exemplo, com AWS você pode obter uma conexão direta que contorna a Internet, chamada Direct Connect)
  • Use software como o fail2ban para capturar qualquer ataque de força bruta
  • Certifique-se de que o sistema operacional esteja sempre atualizado, principalmente os pacotes de segurança e ssh

Aplicativo:

  • Certifique-se de que seu aplicativo esteja sempre atualizado, principalmente os pacotes de segurança
  • Bloqueie as páginas de 'administração' do seu aplicativo. Muitos dos conselhos acima também se aplicam à área administrativa do seu aplicativo.
  • Senha Proteja sua área administrativa, algo como htpasswd para console web projetará quaisquer vulnerabilidades subjacentes do aplicativo e criará uma barreira extra à entrada
  • Bloqueie as permissões de arquivo. As 'pastas de upload' são conhecidas por serem pontos de entrada para 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 um jumpbox (esta é uma configuração típica na AWS usando VPCs)

Responder2

como posso suprimir este ataque e evitar os ataques seguintes

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

vi /etc/ssh/sshd_config

e editarPorta 22paraPorta 1122, Mas isto não é o suficiente.

Regras automáticas de IPTables em força bruta

eu usolog2iptables https://github.com/theMiddleBlue/log2iptablesem vez disso, 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 elimina o endereço IP específico. É legal porque uso a API do Telegram e posso me mandar uma mensagem no meu celular quando encontrar algum problema :)

espero que isso ajude!

Responder3

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

Responder4

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

informação relacionada