Taxa de limite de tentativas de login é uma maneira fácil de evitar alguns dos ataques de adivinhação de senhas de alta velocidade. No entanto, é difícil limitar os ataques distribuídos e muitos são executados em um ritmo baixo durante semanas ou meses. Eu pessoalmente prefiro evitar usar ferramentas de resposta automatizadas como o fail2ban. E isso é por dois motivos:
- Usuários legítimos às vezes esquecem suas senhas. Eu não quero banir usuários legítimos do meu servidor, forçando-me a habilitar manualmente suas contas novamente (ou pior, tentar descobrir qual dos 100/1000 endereços IP banidos é deles).
- Um endereço IP não é um bom identificador para um usuário. Se você tem vários usuários por trás de um único IP (por exemplo, uma escola que executa o NAT em 500 máquinas de alunos), um único usuário que faz algumas suposições erradas pode colocá-lo em um mundo de dor. Ao mesmo tempo, a maioria das tentativas de adivinhação de senhas que vejo são distribuídas.
iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
Ele impede mais de 4 tentativas de conexão de um único IP para ssh em qualquer período de 60 segundos. O restante pode ser tratado garantindo que as senhas sejam razoavelmente strongs. Em servidores de alta segurança, forçar os usuários a usar autenticação de chave pública é outra maneira de parar de adivinhar.