Melhores Práticas para Reforçar a Segurança do SSH em Servidores Linux
O Secure Shell (SSH) é a espinha dorsal do gerenciamento remoto para praticamente todos os servidores Linux. Embora incrivelmente poderoso e geralmente seguro por padrão, o SSH também é o principal alvo de atores mal-intencionados que tentam obter acesso não autorizado por meio de ataques de força bruta, ataques de dicionário e preenchimento de credenciais (credential stuffing).
Reforçar a sua configuração SSH é, sem dúvida, o passo mais crítico na proteção de uma nova implantação Linux. Ao implementar algumas práticas recomendadas principais — indo além da simples autenticação de nome de usuário e senha — você pode reduzir drasticamente sua superfície de ataque, minimizar o ruído em seus logs e garantir que apenas usuários autorizados usando métodos seguros possam acessar seu sistema.
Este guia descreve passos essenciais e acionáveis para proteger o serviço SSH em qualquer distribuição Linux, com foco no arquivo de configuração principal: /etc/ssh/sshd_config.
Pré-requisito: Backup da Configuração
Antes de fazer quaisquer alterações na configuração do daemon SSH (sshd_config), é crucial criar um backup. Uma configuração incorreta pode bloquear seu acesso ao servidor. Sempre teste as alterações minuciosamente.
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak_$(date +%F)
Após editar o arquivo, verifique a sintaxe antes de reiniciar o serviço:
sudo sshd -t
Se o teste for aprovado, você poderá reiniciar o serviço SSH com segurança (o comando varia conforme a distribuição):
# Para sistemas que usam systemd (a maioria das distribuições modernas)
sudo systemctl restart sshd
1. Desabilitar o Login como Root
Permitir o login direto como usuário root é um dos maiores riscos de segurança. Se um invasor conseguir forçar a senha, ele terá controle total instantâneo do sistema. Em vez disso, usuários que não sejam root devem fazer login primeiro e elevar privilégios usando sudo.
Passo de Configuração
Abra /etc/ssh/sshd_config e localize a diretiva PermitRootLogin. Mude seu valor para no.
# Antes:
# PermitRootLogin yes
# Depois (Melhor Prática):
PermitRootLogin no
Nota Importante
Certifique-se de ter criado e configurado pelo menos um usuário padrão com privilégios
sudoantes de desabilitar o login root. Caso contrário, você ficará sem acesso administrativo.
2. Implementar Autenticação Obrigatória Baseada em Chave
A autenticação por senha é suscetível a ataques de força bruta e de dicionário. As chaves SSH, compostas por uma chave pública (no servidor) e uma chave privada (no cliente), oferecem segurança significativamente maior devido à sua extrema complexidade e tamanho.
A. Gerar e Instalar Chaves
- Gerar o Par de Chaves (na sua máquina cliente local):
bash ssh-keygen -t ed25519 -C "[email protected]" - Copiar a Chave Pública (para o servidor):
bash ssh-copy-id -i ~/.ssh/id_ed25519 usuario@seu_ip_do_servidor
B. Desabilitar a Autenticação por Senha
Assim que confirmar que pode fazer login com sucesso usando sua chave SSH, desabilite completamente a autenticação por senha.
# Desabilitar senhas
PasswordAuthentication no
# Garantir que as chaves estejam habilitadas
PubkeyAuthentication yes
Melhor Prática: Use tipos de chave fortes como Ed25519 ou RSA de 4096 bits. Sempre proteja a chave privada com uma senha forte (passphrase).
3. Alterar a Porta Padrão do SSH (Defesa em Profundidade)
A porta SSH padrão (porta TCP 22) é constantemente escaneada por bots automatizados. Mudar a porta para um número alto e não padrão (ex: 2222, 22222 ou 30000+) reduz significativamente a quantidade de ruído nos logs do seu servidor e o torna invisível para scanners casuais.
Passo de Configuração
Em /etc/ssh/sshd_config, altere a diretiva Port:
# Antes:
# Port 22
# Depois (Porta não padrão de exemplo):
Port 22222
Aviso: Ajuste de Firewall Necessário
Se você alterar a porta, você deve atualizar seu firewall (ex:
iptables,firewalldou Grupos de Segurança da AWS) para permitir o tráfego na nova porta. A falha em fazer isso resultará em perda imediata de conexão.
Exemplo usando firewalld (CentOS/RHEL):
sudo firewall-cmd --permanent --add-port=22222/tcp
sudo firewall-cmd --reload
4. Limitar o Acesso a Usuários e Grupos Específicos
Para impor um controle de acesso rigoroso, você deve definir explicitamente quais usuários ou grupos têm permissão para se conectar via SSH. Isso limita potenciais pontos de entrada, mesmo que uma conta seja comprometida ou esteja sem uso.
Diretivas de Configuração
Use uma ou ambas as seguintes diretivas em sshd_config:
- Permitir usuários específicos:
config AllowUsers alice bob - Permitir grupos específicos:
config AllowGroups sshaccess admins
Se essas diretivas estiverem presentes, qualquer usuário ou grupo não listado explicitamente será negado o acesso.
5. Impor Protocolo e Cifras Mais Fortes
Certifique-se de estar usando o moderno e seguro Protocolo SSH 2 e imponha o uso de cifras criptográficas fortes e Códigos de Autenticação de Mensagem (MACs).
Passos de Configuração
Verifique se protocolos antigos e vulneráveis estão desabilitados:
Protocol 2
# Negar métodos de autenticação legados inseguros
HostbasedAuthentication no
IgnoreRhosts yes
Embora as implementações SSH modernas geralmente estejam bem configuradas por padrão, definir explicitamente cifras e MACs fortes pode evitar ataques de downgrade (rebaixamento). Um conjunto mínimo recomendado inclui:
Ciphers [email protected],[email protected]
MACs hmac-sha2-512,hmac-sha2-256
6. Implementar Limitação de Taxa e Detecção de Intrusão (Fail2Ban)
Mesmo com autenticação baseada em chave, a sondagem contínua por bots consome recursos e lota os logs. O Fail2Ban é uma ferramenta crítica que monitora logs em busca de tentativas de login falhas (ou outra atividade suspeita) e ajusta dinamicamente o firewall para banir temporária ou permanentemente o endereço IP de origem.
Instalação e Configuração (Passos Gerais)
-
Instalar o Fail2Ban:
```bash
# Debian/Ubuntu
sudo apt update && sudo apt install fail2banRHEL/CentOS/Fedora
sudo dnf install fail2ban
`` 2. **Configurar a "Jail" SSH:** O Fail2Ban usa configurações chamadas 'jails' (prisões). A jailsshdpadrão é altamente eficaz no monitoramento de/var/log/auth.log` (ou equivalente) em busca de falhas repetidas no serviço SSH e na aplicação automática de banimentos temporários. -
Garantir que o Serviço Esteja em Execução:
bash sudo systemctl enable fail2ban sudo systemctl start fail2ban
O Fail2Ban mitiga significativamente tentativas automatizadas de força bruta e é considerado obrigatório para servidores voltados para a internet.
7. Outras Diretivas Essenciais de Reforço do SSH
Estes ajustes menores ajudam a gerenciar sessões e reduzir a janela de ataque potencial:
| Diretiva | Valor Recomendado | Propósito |
|---|---|---|
ClientAliveInterval |
300 | Envia um pacote nulo a cada 300 segundos (5 minutos) para manter a sessão ativa. |
ClientAliveCountMax |
3 | Número máximo de verificações de 'ativação' falhadas antes da desconexão (15 minutos de tempo ocioso total). |
UsePAM |
yes | Habilita Módulos de Autenticação Plugáveis (PAM) para políticas de segurança adicionais do sistema local. |
PermitEmptyPasswords |
no | Proíbe que usuários com senhas vazias façam login (deve ser no por padrão). |
Resumo do Checklist de Reforço
Use esta lista de verificação para garantir que seu servidor atenda aos padrões básicos de reforço do SSH:
- [ ] Fazer backup de
sshd_configantes de fazer alterações. - [ ] Definir
PermitRootLogin no. - [ ] Definir
PasswordAuthentication no(após configurar a chave). - [ ] Mudar a
Portpara um valor não padrão. - [ ] Atualizar o firewall para permitir a nova porta.
- [ ] Usar
AllowUsersouAllowGroupspara restringir o acesso. - [ ] Definir
Protocol 2. - [ ] Instalar e configurar o Fail2Ban.
- [ ] Verificar a configuração com
sshd -tantes de reiniciar.
Ao implementar estas melhores práticas, você transforma o SSH de um potencial passivo em um canal de administração remota altamente seguro.