O que foi eficaz para mim:
-
Como outros já disseram, nenhum login root, PasswordAuthentication configurado como no (somente login com chaves) em sshd_config
-
Apenas um ou dois usuários têm permissão para efetuar login via ssh e eles têm nomes quase obscuros que não estão na lista de nomes de usuário da ferramenta de força bruta comum (ou seja, não "admin" ou "apache" ou "web" ou "johnny")
-
Regras de firewall restritivas (basicamente, tudo está bloqueado, mas minha porta de serviço e ssh). Eu até mesmo restringi o ping, para afastar os scans mais grosseiros (para o desgosto do meu parceiro).
-
No meu host, restringi o acesso a alguns endereços IP específicos, mas parece que isso não é uma opção para você. Certamente não posso fazer isso sozinho em todos os nossos anfitriões. Você também pode querer olhar para "port-knocking".
-
E o meu favorito: o módulo de resposta ativa da OSSEC para bloquear uma série de condições de força bruta e alertas sobre outros erros também. Ele detecta x logins inválidos em um determinado período de tempo e bloqueia (por meio de um comando iptables firewall-drop) por um determinado período de tempo. Eu estou bloqueando por cerca de 12 horas agora por diversão. :)
Uma coisa que faço aqui para ter certeza de que não estou bloqueando muito a coisa errada, é que em /etc/ossec.conf, eu configuro a resposta ativa para um nível alto (que não existe na configuração padrão) ) e, em seguida, passar pelo sshd_rules.xml e definir as regras que eu quero bloquear para esse nível e modificar os limites para o bloco versus alerta, conforme necessário.
Se você estiver usando o Apache, também poderá bloquear coisas que violem as regras do apache. Eu não bloqueio isso apenas por causa do problema NAT, eu quero pensar em bloquear uma universidade inteira ou algo assim. :) Além disso, você pode escrever regras personalizadas para bloquear determinadas condições em arquivos de log, o que pode ser muito útil.