No caso do SSH, uma conexão é uma conexão estabelecida com a porta TCP do sshd
(geralmente a porta 22). Omce sshd
pára de aceitar novas tentativas de autenticação, ele fecha a conexão e, neste momento, a conexão é feita.
Antes de um usuário fazer uma tentativa de autenticação, o protocolo SSH requer a negociação de criptografia e outras opções de protocolo, estabelecimento de chaves de sessão e troca de chaves de host. Assim, cada nova conexão requer um pouco não trivial de trabalho: uma tempestade de tentativas de conexão SSH de várias fontes certamente poderia ser usada para DoS um servidor.
Uma tentativa de autenticação é uma tentativa de qualquer método de autenticação atualmente habilitado na configuração sshd
. Por exemplo:
- se o cliente oferecer uma chave SSH para autenticação, cada tecla oferecida conta como uma tentativa.
- se o método de autenticação Kerberos / GSSAPI estiver ativado, verificar se o cliente pode ser autenticado com ele conta como uma tentativa
- cada senha digitada no prompt de autenticação de senha obviamente conta como uma.
Os dois primeiros podem causar a situação: se você definir MaxAuthTries
para um e a autenticação Kerberos / GSSAPI estiver ativada, ela poderá consumir a única tentativa antes mesmo de tentar a autenticação de senha. Da mesma forma, se seu cliente SSH tiver uma chave de autenticação disponível, mas você não tiver adicionado sua chave pública ao ~/.ssh/authorized_keys
do sistema de destino para o usuário de destino, a tentativa de autenticação de chave pública consumirá sua única tentativa e você nem tente testar a autenticação de senha.
pam_unix
, a biblioteca PAM que normalmente lida com autenticação de senha, impõe um atraso de dois segundos após uma tentativa de autenticação com falha por padrão.
Se a sua principal ameaça for adivinhar worms e bots em outros sistemas comprometidos na internet, reduzir MaxAuthTries pode ser uma má jogada: como um bot não se cansa, ele sempre se reconecta e tenta novamente. Cada tentativa exige que você gaste alguma capacidade de CPU para negociações do protocolo SSH. Você vai querer garantir principalmente que o bot não terá sucesso , e secundariamente que o bot irá desperdiçar tanto tempo quanto possível naquela conexão existente, com custo mínimo para você . Permitir várias tentativas de autenticação em uma conexão, mas respondendo ... muito ... lentamente ... fará exatamente isso.
É também por isso que sshd
solicitará uma senha do cliente, mesmo que a autenticação por senha esteja completamente desativada: o prompt é completamente falso e o cliente será rejeitado, independente da senha digitada. Mas o cliente não tem como saber com certeza.
É claro que, se você permitir muitas tentativas de autenticação em uma conexão, o bot poderá encerrar a conexão do lado, se o programador do bot tiver implementado um tempo limite para limitar a eficácia dessa defesa.