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

Este guia abrangente descreve as melhores práticas de segurança essenciais para conexões SSH. Aprenda a reforçar seu servidor desativando a autenticação por senha, alterando portas padrão e limitando o acesso. Descubra hábitos cruciais do lado do cliente, incluindo proteção de chave privada e verificação de chave de host. Também abordamos medidas avançadas como autenticação de dois fatores e Fail2ban para proteger seu acesso remoto contra intrusão não autorizada.

41 visualizações

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

Secure Shell (SSH) é uma ferramenta indispensável para administradores de sistema e desenvolvedores, permitindo acesso remoto seguro a servidores e outros dispositivos de rede. Embora o SSH ofereça criptografia robusta por padrão, sua segurança pode ser significativamente aprimorada pela implementação de uma série de melhores práticas, tanto no lado do servidor quanto no do cliente. Este artigo aprofunda-se em medidas de segurança críticas projetadas para fortalecer suas conexões SSH, proteger contra vulnerabilidades comuns e prevenir acesso não autorizado.

Negligenciar a segurança SSH pode deixar seus sistemas expostos a ataques de força bruta, ameaças man-in-the-middle e violações de dados não autorizadas. Ao adotar as práticas descritas abaixo, você pode fortalecer significativamente sua postura de segurança e garantir a integridade e confidencialidade de suas operações remotas.

Fortalecimento da Segurança no Lado do Servidor

Configurar seu servidor SSH (sshd_config) é primordial para estabelecer uma base segura para acesso remoto. Essas mudanças impactam diretamente como os clientes se conectam e autenticam ao seu servidor.

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 baseada em chaves SSH é uma das melhorias de segurança mais eficazes que você pode fazer.

  • Porquê: Chaves SSH são muito mais complexas do que senhas e não podem ser facilmente adivinhadas ou quebradas por métodos de força bruta. Elas fornecem uma forma de autenticação muito mais forte.
  • Como: Edite seu arquivo sshd_config (geralmente localizado em /etc/ssh/sshd_config) e defina PasswordAuthentication no. Após fazer as alterações, reinicie o serviço SSH:

    ```bash
    sudo systemctl restart sshd

    ou em sistemas mais antigos:

    sudo service ssh restart
    ```

    Importante: Certifique-se de ter configurado e testado com sucesso a autenticação baseada em chaves SSH antes de desabilitar a autenticação por senha para evitar ficar sem acesso.

2. Usar uma Porta Não Padrão

Embora não seja uma medida de segurança primária contra atacantes sofisticados, mudar a porta SSH padrão (22) pode reduzir o "ruído" de bots automatizados que escaneiam por servidores vulneráveis.

  • Como: Em 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 do seu cliente:

    bash ssh -p 2222 user@your_server_ip

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 em sshd_config para especificar explicitamente quem pode se conectar.
    AllowUsers admin user1 AllowGroups sshusers
  • DenyUsers e DenyGroups: Alternativamente, use estas para bloquear usuários ou grupos específicos.

4. Desabilitar Login de Root

O login direto de root via SSH deve ser desabilitado para evitar que atacantes alvossem 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 em sshd_config.

5. Configurar Tempo Limite 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 ao 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. Habilitar Apenas o Protocolo 2

A versão 1 do protocolo SSH está desatualizada e possui vulnerabilidades de segurança conhecidas. Certifique-se de que apenas o Protocolo 2 esteja habilitado.

  • Como: Defina Protocol 2 em sshd_config.

7. Fortalecer Chaves de Host

Garanta que as chaves de host do seu servidor estejam protegidas e gerenciadas adequadamente.

  • Permissões: Verifique se os arquivos de chave de host (por exemplo, /etc/ssh/ssh_host_rsa_key) têm permissões restritivas (por exemplo, 600) e pertencem ao root.

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 (por exemplo, ~/.ssh/id_rsa) tenha permissões rigorosas (por exemplo, 600 ou 400) para que apenas você possa lê-lo.
    bash chmod 600 ~/.ssh/id_rsa
  • Passphrases: Sempre use uma passphrase forte para criptografar sua chave privada. Isso adiciona uma camada extra de segurança, exigindo a passphrase mesmo que o arquivo da chave seja comprometido.
  • Evite Copiar: Não compartilhe sua chave privada com ninguém nem a armazene em locais inseguros.

2. Use o Encaminhamento de Agente SSH com Discrição

O encaminhamento de 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.

  • Habilitar: ssh -A user@your_server_ip
  • Melhor Prática: Use o encaminhamento de agente apenas quando for absolutamente necessário e desconecte-se o mais rápido possível. Considere desabilitá-lo por padrão em sua configuração de cliente.

3. Verifique as Impressões Digitais da Chave de Host

Ao conectar-se a um servidor SSH pela primeira vez, seu cliente solicitará 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 contra uma fonte confiável (por exemplo, fornecida pelo seu provedor de hospedagem ou administrador do sistema). Se a impressão digital mudar inesperadamente em conexões subsequentes, isso pode indicar um problema de segurança.

4. Mantenha o Software Cliente SSH Atualizado

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

Medidas de Segurança Avançadas

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

1. Autenticação de Dois Fatores (2FA)

Implemente 2FA para uma camada adicional de segurança. Isso geralmente envolve uma combinação de algo que você sabe (sua chave SSH ou senha) e algo que você tem (um código de um aplicativo autenticador ou token de hardware).

  • Ferramentas: Google Authenticator, Duo Security ou tokens de hardware podem ser integrados com PAM (Pluggable Authentication Modules) para SSH.

2. Fail2ban

Fail2ban é um framework de software de prevenção de intrusões que escaneia arquivos de log (por exemplo, /var/log/auth.log) e bane IPs que mostram sinais maliciosos – muitas falhas de senha, busca por exploits, etc. Ele atualiza as regras do firewall para rejeitar os IPs por um tempo especificado.

  • Instalação: Geralmente 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 e limites de banimento.

3. Configuração de Firewall

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

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

Conclusão

Proteger suas conexões SSH é um processo contínuo, não uma configuração única. Ao aplicar diligentemente estas melhores práticas do lado do servidor e do cliente, você pode mitigar significativamente os riscos associados ao acesso remoto. Priorizar a autenticação por chave SSH, controles de acesso robustos e ferramentas de monitoramento como o Fail2ban forma a base de um ambiente SSH seguro. Revisar e atualizar regularmente suas configurações de segurança garantirá que seus sistemas permaneçam protegidos contra ameaças em evolução.