Melhores Práticas de Segurança SSH: Reforçando Seu Servidor e Cliente

Fortalecer o SSH com autenticação por chave, acesso de privilégio mínimo, hábitos mais seguros do cliente, regras de firewall, MFA e proteção contra força bruta.

Melhores Práticas de Segurança SSH: Fortalecendo seu Servidor e Cliente

As melhores práticas de segurança SSH são importantes porque o SSH é frequentemente a porta de entrada para seus servidores. Uma configuração SSH fraca pode transformar uma senha adivinhada, uma chave roubada ou um erro de host confiável em acesso completo ao shell.

Você não precisa de configurações exóticas para fortalecer bem o SSH. Comece com login baseado em chave, usuários restritos, sem login direto como root, comportamento cuidadoso do cliente e logs que mostrem quando algo está errado.

Fortalecimento da Segurança no Lado do Servidor

Sua configuração do servidor SSH (sshd_config) define as regras de como os clientes se conectam e autenticam.

1. Desabilitar Autenticação por Senha

A autenticação por senha é inerentemente vulnerável a ataques de força bruta. Substituí-la pela autenticação por chave SSH é uma das melhorias de segurança mais eficazes que você pode fazer.

  • Por quê: As chaves SSH são muito mais complexas que senhas e não podem ser facilmente adivinhadas ou quebradas por métodos de força bruta. Elas fornecem uma forma muito mais forte de autenticação.

  • Como: Edite seu arquivo sshd_config (normalmente localizado em /etc/ssh/sshd_config) e defina PasswordAuthentication no. Após fazer as alterações, reinicie o serviço SSH:

    sudo sshd -t
    sudo systemctl reload sshd
    

    Importante: Certifique-se de ter configurado e testado com sucesso a autenticação por chave SSH antes de desabilitar a autenticação por senha para evitar ficar bloqueado.

Em algumas distribuições, o serviço é nomeado ssh, não sshd. Use o nome do serviço que seu sistema fornece e mantenha uma sessão existente aberta enquanto testa um novo login.

2. Trate as Alterações de Porta como Redução de Ruído

Alterar a porta SSH padrão de 22 pode reduzir o ruído de varreduras automatizadas. Não substitui chaves, correções e controle de acesso.

  • Como: No sshd_config, altere a diretiva Port. Por exemplo, para usar a porta 2222:

    Port 2222
    

    Lembre-se de atualizar suas regras de firewall para permitir tráfego na nova porta e especificar a porta ao conectar-se a partir do seu cliente:

    ssh -p 2222 usuario@ip_do_seu_servidor
    

3. Limitar Acesso de Usuários e Grupos

Controle quais usuários e grupos têm permissão para fazer login via SSH.

  • AllowUsers e AllowGroups: Use estas diretivas no sshd_config para especificar explicitamente quem pode conectar.
    AllowUsers admin usuario1
    AllowGroups sshusers
    
  • DenyUsers e DenyGroups: Alternativamente, use estas para bloquear usuários ou grupos específicos.

4. Desabilitar Login como Root

O login direto como root via SSH deve ser desabilitado para evitar que atacantes atinjam a conta mais poderosa imediatamente. Em vez disso, os usuários devem fazer login com suas próprias contas e usar sudo para tarefas administrativas.

  • Como: Defina PermitRootLogin no no sshd_config.

5. Configurar Timeout de Inatividade e Keepalives

Evite que sessões SSH ativas e não supervisionadas permaneçam abertas indefinidamente.

  • ClientAliveInterval e ClientAliveCountMax: Estas configurações do lado do servidor enviam pacotes nulos para o cliente em intervalos regulares para verificar se a conexão ainda está ativa. Se o cliente não responder após ClientAliveCountMax tentativas, o servidor desconecta a sessão.
    ClientAliveInterval 300  # Envia um pacote a cada 5 minutos
    ClientAliveCountMax 2    # Desconecta após 2 respostas perdidas (10 minutos)
    

6. Fortalecer Chaves de Host

Certifique-se de que as chaves de host do seu servidor estejam protegidas e gerenciadas adequadamente.

  • Permissões: Verifique se os arquivos de chave de host (ex.: /etc/ssh/ssh_host_rsa_key) têm permissões restritivas (ex.: 600) e são propriedade do root.
  • Algoritmos: Prefira chaves de host modernas como Ed25519 quando seus clientes as suportarem. Não exclua chaves de host existentes sem planejamento, pois os clientes verão isso como uma mudança de identidade do host.
  • Rotação: Rode as chaves de host deliberadamente e anuncie as novas impressões digitais através de um canal confiável.

Melhores Práticas de Segurança no Lado do Cliente

Proteger sua máquina cliente e suas chaves SSH é tão crucial quanto o fortalecimento do lado do servidor.

1. Proteja Suas Chaves Privadas

Sua chave privada SSH é a porta de entrada para seus servidores. Trate-a com o máximo cuidado.

  • Permissões: Certifique-se de que seu arquivo de chave privada (ex.: ~/.ssh/id_rsa) tenha permissões estritas (ex.: 600 ou 400) para que apenas você possa lê-lo.
    chmod 600 ~/.ssh/id_rsa
    
  • Frases Secretas: Sempre use uma frase secreta forte para criptografar sua chave privada. Isso adiciona uma camada extra de segurança, exigindo a frase secreta mesmo se o arquivo de chave for comprometido.
  • Evite Copiar: Não compartilhe sua chave privada com ninguém nem a armazene em locais inseguros.

2. Use o Encaminhamento do Agente SSH com Cuidado

O encaminhamento do agente SSH permite que você use suas chaves SSH locais para autenticar em servidores remotos sem copiar suas chaves privadas para esses servidores. Embora conveniente, pode ser um risco de segurança se o servidor remoto for comprometido.

  • Ativar: ssh -A usuario@ip_do_seu_servidor
  • Melhor Prática: Desabilite o encaminhamento do agente por padrão. Use-o apenas para hosts em que você confia e prefira alternativas como chaves de deploy, bastion ProxyJump ou credenciais de curta duração quando se adequarem ao seu fluxo de trabalho.

3. Verifique as Impressões Digitais das Chaves de Host

Ao conectar-se a um servidor SSH pela primeira vez, seu cliente solicita que você verifique a impressão digital da chave de host do servidor. Isso ajuda a prevenir ataques man-in-the-middle.

  • Como: Sempre verifique a impressão digital em uma fonte confiável, como seu console de nuvem, logs de provisionamento ou um administrador. Se a impressão digital mudar inesperadamente, pare e investigue antes de aceitá-la.

4. Mantenha o Software do Cliente SSH Atualizado

Certifique-se de que seu software cliente SSH (OpenSSH, PuTTY, etc.) esteja atualizado para se beneficiar dos patches de segurança e recursos mais recentes.

Medidas Avançadas de Segurança

Além das etapas fundamentais, considere estas técnicas avançadas:

1. Autenticação Multifator

Adicione MFA para acesso SSH humano onde seu ambiente suportar. Isso geralmente combina chaves SSH com um código de uso único, aprovação push ou autenticação baseada em hardware.

  • Ferramentas: Módulos PAM, Duo, aplicativos autenticadores e chaves de segurança de hardware podem fazer parte de um design de MFA SSH.

2. Fail2ban

O Fail2ban examina logs em busca de repetidas tentativas de autenticação falhas e pode adicionar bloqueios temporários de firewall para o IP de origem. Os caminhos de log variam por distribuição; Debian e Ubuntu normalmente usam /var/log/auth.log, enquanto muitos sistemas da família RHEL registram via journald ou /var/log/secure.

  • Instalação: Normalmente disponível via gerenciadores de pacotes (sudo apt install fail2ban ou sudo yum install fail2ban).
  • Configuração: Configure jails em /etc/fail2ban/jail.local para monitorar logs SSH e definir tempos de banimento e limites.

3. Configuração de Firewall

Empregue um firewall (como ufw, firewalld ou iptables) para restringir o acesso à sua porta SSH (seja padrão ou personalizada) apenas a endereços ou faixas IP confiáveis.

  • Exemplo (ufw):
    sudo ufw allow from trusted_ip to any port 22
    sudo ufw enable
    

Conclusão

Proteger o SSH é um hábito contínuo. Use autenticação baseada em chave, desabilite o login direto como root, restrinja quem pode conectar, proteja suas chaves privadas e verifique as impressões digitais do host. Em seguida, adicione limites de firewall, MFA e proteção contra força bruta onde o risco justificar a configuração extra.