Você pode usar o iptables para limitar a taxa de novas conexões de entrada à porta SSH. Eu precisaria ver toda a configuração do iptables para fornecer uma solução pronta para uso, mas você está basicamente falando sobre adicionar regras como:
iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 5 --name SSH --rsource -j DROP
iptables -A INPUT -p tcp --dport 22 -m recent --set --name SSH --rsource -j ACCEPT
Essas regras pressupõem que você esteja aceitando conexões ESTABELECIDAS anteriormente na tabela (para que apenas novas conexões atinjam essas regras). Novas conexões SSH atingirão essas regras e serão marcadas. Em 60 segundos, 5 tentativas de um único endereço IP resultarão na queda de novas conexões de entrada desse IP.
Isso funcionou bem para mim.
Edit: Eu prefiro esse método ao "fail2ban" porque nenhum software adicional deve ser instalado e acontece totalmente no modo kernel. Ele não processa a análise de arquivos de log como "fail2ban", mas se o seu problema for apenas com SSH, não usaria algo no modo de usuário que exija instalação de software e que seja mais complexo.
-m condition
iptables match.fail2ban pode ajudar com isso, bloqueando endereços IP com muitas tentativas falhas de logon.
fonte
Eu recomendo o uso de uma porta não padrão para SSH, se puder (por exemplo, porta 10222), mas como você mencionou que não pode fazer isso, recomendo usar algo como DenyHosts.
http://denyhosts.sourceforge.net/
Ótimo pacote, fácil de instalar e configurar.
fonte
Embora seja bom poder ssh no seu sistema a partir de locais arbitrários na Internet, existem sistemas automatizados de ataque por senha que travam em uma porta ssh aberta e aplicam vários ataques de conta e dicionário de joe contra o seu sistema. Isso pode ser um pouco difícil de ler no resumo do seu registro noturno e é um desperdício de sua largura de banda.
Se você possui um servidor Web no mesmo sistema, pode usar wrappers php e tcp para restringir o tráfego de entrada ssh a sistemas conhecidos, além de fornecer uma chave de porta traseira para permitir o acesso de sistemas arbitrários na Internet.
Aqui está como você faz isso:
negue todas as conexões ssh em /etc/hosts.deny:
Permita sistemas conhecidos por IP em /etc/hosts.allow, além de adicionar um arquivo para acesso temporário:
Crie um arquivo php no seu servidor web e atribua a ele um nome não óbvio, como my-sshd-access.php:
Perdoe o código php - eu o peguei de outro lugar, então provavelmente poderia ser limpo um monte. Tudo o que faz é adicionar o endereço IP do sistema que o acessa ao arquivo /etc/hosts.allow.temporary-sshd-access, que é lido pelo sshd (devido à sua inclusão por /etc/hosts.allow) no momento da conexão .
Agora, quando você estiver em algum sistema arbitrário da Web e quiser fazer o ssh para esse sistema, primeiro use um navegador da Web e clique neste arquivo (ou use wget ou equivalente):
Agora você deve poder efetuar ssh no seu sistema. Se estiver em algum lugar em que você provavelmente fará uma busca frequente, seria trivial ler o conteúdo do arquivo /etc/hosts.allow.temporary-sshd-access e adicionar permanentemente o endereço IP em / etc / hosts. permitir.
fonte
Você também pode querer denyhosts .
FYI: O OpenSSH 6.7 descarta o suporte ao tcpwrappers , o que significa que denyhosts provavelmente não é a solução para novas instalações.
fonte
Faça um favor a si mesmo e desative o login da senha. Use exclusivamente chaves de autenticação (google ssh-keygen, por exemplo - Exemplo: http://www.puddingonline.com/~dave/publications/SSH-with-Keys-HOWTO/document/html/SSH-with-Keys-HOWTO-4 .html ) Seu servidor será mais seguro, você se conectará a ele com mais facilidade (verifique ssh-agent, ssh-add, keychain) e não será mais vítima de ataques de força bruta ssh.
fonte
outra solução é apenas mover ssh para outra porta. esses vermes são bem estúpidos.
fonte
Outra opção pode ser exigir que todas as conexões ssh sejam verificadas por um certificado e eliminem completamente as senhas.
Eu uso o Denyhosts, mas descobri que estava apenas conectando-me regularmente remotamente a partir de vários lugares. Por isso, bloqueei todas as conexões da porta 22, exceto de qualquer outro lugar, e uso a porta batendo para que eu possa conectar-me de qualquer lugar com o meu laptop, se necessário. .
fonte
Qualquer solução que envolva o bloqueio automático de IPs após várias falhas apresenta risco de ataques de negação de serviço. Desde que exista uma boa política de senhas para reduzir a eficácia de ataques de força bruta ou de dicionário, eu não me preocuparia muito com eles.
Se você limitar os usuários / grupos apenas àqueles que devem ter permissão para efetuar ssh em primeiro lugar, e desativar o login como root, você deve ser mais do que seguro o suficiente. E, se isso não for suficiente, sempre haverá autenticação baseada em chave.
fonte
Honestamente, se você precisar executar o SSH (e na porta 22), não poderá evitá-los. Se você precisar aceitar senhas, estará em uma situação ainda pior.
Sua melhor aposta é configurar o software de análise de log para excluir os logs SSH. Em seguida, execute uma instância separada para examinar apenas os logs SSH e use o procmail para filtrar as tentativas malsucedidas. Você pode até escrever scripts para observar logons bem-sucedidos de endereços IP com várias tentativas malsucedidas.
Não há como impedir que as pessoas investiguem seu servidor SSH. Denyhosts, fail2ban e o exemplo iptables funcionarão até certo ponto, mas com o risco adicional de bloquear acidentalmente usuários legítimos. O melhor método é absorver e tentar automatizar o processo de análise de log para reduzir a quantidade de tempo que você tem para pensar sobre isso.
fonte
Quando você diz que está com falhas nas tentativas de logon shh no seu servidor red hat, que tipo de firewall está instalado e quantas pessoas precisam usá-lo. Sugiro que, se você quiser, limite as tentativas no firewall antes que elas cheguem perto do servidor real.
Se você pode restringir o intervalo de endereços IP que precisam de acesso legítimo, deve poder configurar uma lista de acesso no firewall. Se você pode restringir o tráfego no firewall, sugiro que você analise os sistemas de intrusão de rede, pois parece que seu servidor está sendo alvo de algo.
fonte
A maioria dos webhosts usa APF + BFD para bloquear logins SSH com falha de IP. Atualmente, existe o CSF (firewall do Configserver), que inclui uma ferramenta chamada LFD que faz a mesma coisa e muito mais, incluindo IPs de bloco de certos países que você não deseja acessar seu servidor (por exemplo, Coréia, China etc., onde 99% das minhas sondas SSH parecem se originar de).
fonte
Eu tenho usado fail2ban e tem me ajudado muito.
fonte
Se você precisar resolver esse problema em mais de um host, consulte o OSSEC: http://www.ossec.net/main/ossec-architecture
Isso permitirá que você configure vários agentes de um local centralizado para responder automaticamente a ataques de força bruta (junto com qualquer outro padrão que você possa extrair dos logs).
Muito bom software :)
fonte
Outra opção semelhante ao DenyHosts é sshutout http://www.techfinesse.com/sshutout/sshutout.html
fonte