Prevenção - Grande número de tentativas de login com falha do IP

4

Estou executando um servidor CentOS 6.3 e atualmente recebo e-mails intitulados "Número grande de tentativas de login com falha de IP" do meu servidor a cada 15 minutos ou mais.

Certamente, com a configuração abaixo, isso deve significar que apenas a pessoa que está usando o (meu IP estático) deve ser capaz de até mesmo fazer o login?

Se esse for o caso, onde esses usuários remotos e desconhecidos estão tentando acessar o que está gerando esses e-mails?

Etapas de segurança atuais:

  • login root só é permitido without-password
  • StrictModes yes
  • O login com senha do SSH está desativado - PasswordAuthentication no
  • chaves públicas SSH são usadas
  • A porta SSH foi alterada para um número maior que 40k
  • o cPHulk está configurado e em execução
  • Logins limitados ao endereço IP específico
  • cPanel e WHM limitados apenas ao meu IP estático

sshd_config

[email protected]

hosts.allow

ALL : <Static IP>

hosts.deny

ALL : ALL

iptables

iptables -I INPUT -s <Static IP> -p tcp -m tcp --dport 22 -j ACCEPT
iptables -I INPUT -p tcp -m tcp --dport 22 -j REJECT
    
por Dan 03.12.2012 / 17:40

7 respostas

7

O que eu faria é usar Fail2Ban & aponte para o seu arquivo de log ssh. Dessa forma, se você obtiver um número especificado de tentativas com falha dos mesmos IPs, o fail2ban adicionará automaticamente uma regra de firewall para descartar pacotes desses IPs por um período especificado.

    
por 22.02.2013 / 21:34
3

Com essa configuração, o sshd ainda relatará tentativas malsucedidas ao longo das linhas de:

Dec  3 00:56:35 servername sshd[31242]: refused connect from li471-78.members.linode.com (50.116.13.78)
Dec  3 00:56:40 servername sshd[31244]: refused connect from li471-78.members.linode.com (50.116.13.78)

Talvez seu alerta de log esteja sendo acionado sobre isso? Verifique seus registros para verificar se este é o caso.

Você pode fazer isso desaparecer alterando o padrão de sensibilidade / pesquisa da sua função de alerta.

Você também pode desativá-lo usando o firewall para bloquear todo o tráfego SSH recebido, exceto o endereço IP. Se você usar o firewall, nada irá atingir o sshd e, portanto, nada aparecerá no seu log.

    
por 03.12.2012 / 17:47
3

Na frente um pequeno detalhe. As entradas de log que você vê parecem vir de hosts.deny , porque sshd é "TCP-wrapped" (normalmente, no Linux). Para informações detalhadas, consulte man tcpd .

Usando regras de firewall, você pode ajustar melhor o que acaba no log (sys). Então, esse é o lugar para colocar seu IP estático na lista de permissões e colocar a lista negra em todas as outras pessoas.

Se você quiser converter as regras existentes em iptables , use o seguinte script de shell (substitua as variáveis PORTS e MYIP pelas correspondentes às suas necessidades):

#!/bin/bash
IPT="echo /sbin/iptables"
MYIP=1.2.3.4
PORTS="22 443 8080"
$IPT -P INPUT DROP
for port in $PORTS; do
        $IPT -I INPUT -p tcp --dport $port -s $MYIP -j ACCEPT
done

... ou menor:

#!/bin/bash
IPT="echo /sbin/iptables"
MYIP=1.2.3.4
PORTS="22 443 8080"
$IPT -P INPUT DROP
$IPT -I INPUT -p tcp -m multiport --dports ${PORTS// /,} -s $MYIP -j ACCEPT

... ou em duas linhas codificadas:

/sbin/iptables -P INPUT DROP
/sbin/iptables -I INPUT -p tcp -m multiport --dports 22,443,8080 -s 1.2.3.4 -j ACCEPT

Infelizmente, não há uma maneira legal de deduzir os números das portas, então você provavelmente acabará com esses códigos.

Lembre-se também de que você pode querer limpar sua tabela INPUT antes de definir a política, usando iptables -X INPUT .

O acima, explicado em poucas palavras, define a política padrão para a tabela INPUT como DROP e, em seguida, permite somente conexões TCP para as portas fornecidas ( $PORTS ) do IP fornecido ( $MYIP ) .

Você parece estar interessado em um bloqueio muito rigoroso, com exceção de seu próprio IP estático, portanto, nada do que se segue pode ser necessário.

Eu tenho usado as seguintes regras netfilter , como apontado em uma postagem anterior por mim aqui no ServerFault: É normal obter centenas de tentativas de invasão por dia?

Não vou repetir as regras aqui, porque elas já existem no site . No entanto, você deve ter em mente que ainda receberá algumas mensagens de log até que o IP seja colocado automaticamente no tarpit. Em geral, não acho que você tenha que se preocupar tanto com a quantidade de tentativas, dada a configuração de sshd do seu som. Ajuste os tempos de tarpit para confinar os invasores por mais tempo ou agir antes, mas lembre-se de não se bloquear.

Além disso, no passado recente, testei e gostei bastante do sshguard . Embora muitas pessoas o comparem com o Fail2Ban, acho que seu escopo é muito mais amplo (também não limitado a sshd ). Essa ferramenta pode usar vários recursos para analisar os logs (diretamente ou depois que o recurso de syslog os coloca em um arquivo) e vários recursos a serem bloqueados (por exemplo, netfilter / iptables ).

Sempre que as pessoas foram tenazes com suas tentativas, coloquei blocos completos (firewall).

Se apenas as entradas de log o incomodarem, configure sua logcheck (ou outra ferramenta) para filtrá-las ou altere a porta à qual o sshd é ligado. Em termos de segurança, no entanto, considero esse snakeoil.

    
por 22.02.2013 / 21:46
2

Você pode ter sido hackeado.

Faça um rpm -Vv keyutils-libs como root no seu servidor.

Você vê um 5? Se assim for, uma das bibliotecas foi substituída por uma versão atacante.

Mais detalhes sobre o ataque (provavelmente usando o cPanel) podem ser encontrados aqui .

    
por 27.02.2013 / 17:09
1

Eu uso essa pessoa para limitar o acesso a algumas portas em meus servidores:

-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name SSHACCESS --rsource 
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 180 --hitcount 20 --name SSHACCESS --rsource -j DROP

você pode jogar com --seconds e --hitcounts para ajustar seu contexto.

Além disso, você pode usar algumas regras mais comuns, como a porta batendo. Nesse caso, você envia solicitações (podem ser ping, tcp, telnet ou o que você quiser) e, em seguida, o sistema é aberto para a porta SSH da instância por alguns segundos apenas para esse IP e você pode fazer o ssh para o servidor. verifique este link para implementar este com iptables

esta é uma porta simples batendo na porta 1000:

-A INPUT -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 1000 -m recent --set --name KNOCKING --rsource
-A INPUT -p tcp -m tcp --dport 22 -m recent --rcheck --seconds 5 --name KNOCKING --rsource -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j DROP

agora você pode ssh para o seu servidor assim:

telnet <ip> 1000 ; ssh <ip>

Se precisar de mais ajuda sobre isso, por favor me avise.

    
por 26.02.2013 / 13:22
0

você também pode usar o -m connlimit, para limitar o número de tentativas incorretas para retardar os invasores, como eles explicam aqui: link .

Adicionar exclusões e / ou temporizações diferentes para blocos IP diferentes é possível e simples.

Eu também considero mudar a porta sshd padrão para qualquer coisa que não seja comum.

    
por 28.02.2013 / 14:38
0

Felizmente, sou uma situação com um ISP local onde sei que meu pagamento por IP estático nunca será alterado sem notificação prévia, pois só preciso fazer alterações no servidor a partir desse local. portanto, pode bloquear todo o acesso SSH fora deste local via iptables e uma porta ssh maior.

Por isso, apliquei a seguinte alteração em sshd_config :

#example
Port 40000

e também criei uma entrada iptables com meu endereço IP estático e a porta ssh:

iptables -A INPUT -p tcp -s 1.1.1.1 --dport 40000 -j ACCEPT

Até agora, isso parece ter feito o truque!

    
por 01.03.2013 / 14:00