Como na resposta do @Jonathan Ben-Avraham, a primeira coisa a fazer é desabilitar o acesso por senha e mudar para a chave pública somente . Claro, isso exige que você não perca a chave privada: salve uma cópia de segurança em algum lugar seguro.
A segunda abordagem que você deve tomar é limitar o número de conexões SSH de entrada. Adicione uma regra iptables ao longo das linhas de
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW \
-m hashlimit --hashlimit-above 1/min --hashlimit-mode srcip \
--hashlimit-name ssh --hashlimit-burst 5 -j REJECT
A idéia é que você pode (tentar) logar cinco vezes, mas depois fica congelado por um minuto. Isso não irá incomodar um usuário autorizado, mas o script cracker que tenta todas as senhas (ou chaves privadas) que estão flutuando na rede, tentando encontrar uma correspondência, será bloqueado com bastante eficiência.
Você também pode querer adicionar uma autenticação de dois fatores. Este link link descreve bem o processo; basicamente você instala o pacote libpam-google-authenticator, adiciona auth required pam_google_authenticator.so
a /etc/pam.d/sshd
, instala o Google Authenticator ou o aplicativo androidtoken no seu telefone, executa google-authenticator
no seu servidor para configurar tudo e reinicia o serviço ssh. (Este é, na verdade, um TOTP genérico (RFC 6238) e não está associado ao Google, nem fala com eles sobre o AFAIK.)