10 Práticas Essenciais Recomendadas para Fortalecer Seu Servidor SSH
O Secure Shell (SSH) é a espinha dorsal da administração remota de servidores, fornecendo um protocolo de rede criptográfico para comunicação segura de dados, execução remota de comandos e outros serviços de rede. No entanto, sua natureza ubíqua também o torna um alvo principal para atacantes. Um servidor SSH inadequadamente protegido pode abrir uma vulnerabilidade crítica, levando a acesso não autorizado, violações de dados e comprometimento do sistema. Proteger seu ambiente de acesso remoto não é apenas uma boa prática; é uma necessidade.
Este artigo descreve 10 práticas essenciais recomendadas para fortalecer a configuração do seu servidor SSH. Ao implementar essas diretivas de configuração críticas, configurações de permissão recomendadas e dicas de segurança, você pode aumentar significativamente as defesas do seu servidor contra acesso não autorizado e vetores de ataque comuns, como tentativas de força bruta e ataques de credential stuffing. Seguir estas diretrizes ajudará a garantir que sua administração remota permaneça segura e sua infraestrutura de servidor protegida.
1. Altere a Porta Padrão do SSH
A porta SSH padrão é 22. Ela é universalmente conhecida e constantemente rastreada por bots automatizados em busca de servidores vulneráveis. Mudar a porta padrão fornece uma camada de obscuridade simples, mas eficaz. Embora não seja uma medida de segurança por si só, ela reduz significativamente o ruído de varreduras automatizadas e ajuda a evitar muitos ataques oportunistas.
Para alterar a porta, edite o arquivo sshd_config, geralmente localizado em /etc/ssh/sshd_config.
sudo nano /etc/ssh/sshd_config
Encontre a linha Port 22 (ou adicione-a se não existir) e altere 22 para um número de porta não padrão e não atribuído (por exemplo, 2222, 49152-65535 são portas dinâmicas/de usuário).
#Port 22
Port 2222
Após salvar o arquivo, reinicie o serviço SSH. Lembre-se de atualizar suas regras de firewall para permitir o tráfego na nova porta e bloquear a antiga.
sudo systemctl restart sshd
# Para UFW (Uncomplicated Firewall):
sudo ufw allow 2222/tcp
sudo ufw deny 22/tcp
sudo ufw reload
# Para Firewalld:
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --permanent --remove-port=22/tcp
sudo firewall-cmd --reload
Dica: Mantenha sempre pelo menos uma sessão SSH aberta enquanto testa as alterações de configuração. Se você for bloqueado, poderá reverter as alterações na sessão ativa.
2. Desative o Login do Root
O login direto do root via SSH é fortemente desencorajado. O usuário root possui privilégios irrestritos, tornando-o um alvo principal para atacantes. Se um invasor obtiver acesso root, ele terá controle total sobre seu sistema. Em vez disso, faça login como um usuário regular e sem privilégios e, em seguida, use sudo para executar tarefas administrativas.
Em sshd_config, encontre a diretiva PermitRootLogin e defina-a como no.
PermitRootLogin no
Salve e reinicie o serviço SSH:
sudo systemctl restart sshd
3. Use Autenticação Baseada em Chave
A autenticação baseada em senha é suscetível a ataques de força bruta e ataques de dicionário, especialmente se os usuários escolherem senhas fracas. A autenticação baseada em chave SSH é uma alternativa muito mais segura. Ela usa um par de chaves criptográficas: uma chave pública armazenada no servidor e uma chave privada mantida em sua máquina local. Apenas clientes com a chave privada correspondente podem se autenticar.
Etapas para implementar a autenticação baseada em chave (resumidamente):
- Gere um par de chaves em sua máquina local:
bash ssh-keygen -t ed25519 -b 4096 -C "[email protected]"ed25519é um algoritmo moderno e seguro.rsatambém é comum, frequentemente com-b 4096para força da chave.
- Copie a chave pública para o seu servidor:
bash ssh-copy-id -i ~/.ssh/id_ed25519.pub user@your_server_ip
Alternativamente, anexe manualmente o conteúdo de~/.ssh/id_ed25519.puba~/.ssh/authorized_keysno servidor para o usuário com o qual você deseja fazer login. -
Garanta as permissões corretas no servidor:
- Diretório
~/.ssh:700(rwx apenas para o proprietário) - Arquivo
~/.ssh/authorized_keys:600(rw apenas para o proprietário)
bash chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys - Diretório
4. Desative a Autenticação por Senha
Depois de configurar e testar com sucesso a autenticação baseada em chave para todos os usuários necessários, você deve desativar totalmente a autenticação por senha. Isso remove o elo mais fraco na segurança do SSH, tornando impossíveis os ataques de força bruta de senha.
Em sshd_config, defina PasswordAuthentication como no.
PasswordAuthentication no
Salve e reinicie o serviço SSH:
sudo systemctl restart sshd
Aviso: Nunca desative a autenticação por senha antes de verificar se a autenticação baseada em chave funciona corretamente para todos os usuários que precisam de acesso. Caso contrário, você corre o risco de ficar bloqueado para fora do servidor.
5. Restrinja o Acesso de Usuários
Por padrão, qualquer conta de usuário no servidor pode tentar fazer login via SSH. Você pode restringir o acesso SSH apenas a usuários ou grupos específicos, minimizando a superfície de ataque.
Use as diretivas AllowUsers ou AllowGroups em sshd_config.
Para permitir apenas usuários específicos (por exemplo, adminuser, devuser):
AllowUsers adminuser devuser
Para permitir apenas membros de um grupo específico (por exemplo, sshusers):
AllowGroups sshusers
Dica: Geralmente, é melhor usar AllowGroups se você tiver vários usuários. Crie um grupo dedicado para acesso SSH e adicione os usuários autorizados a ele.
sudo groupadd sshusers
sudo usermod -aG sshusers adminuser
sudo usermod -aG sshusers devuser
Após fazer as alterações, salve e reinicie o SSH.
6. Use Senhas Fortes para Chaves SSH
Embora a autenticação baseada em chave seja robusta, sua chave privada ainda é um ativo crítico. Se um invasor obtiver acesso à sua máquina local, ele poderá roubar sua chave privada. Uma senha forte criptografa sua chave privada, exigindo a senha para desbloqueá-la antes do uso. Isso adiciona outra camada de segurança, protegendo sua chave mesmo que ela caia em mãos erradas.
Ao gerar sua chave SSH (como na etapa 3), você será solicitado a fornecer uma senha. Escolha uma senha longa, complexa e memorável que seja diferente de qualquer outra senha que você usa.
7. Implemente Limitação de Taxa de Conexão (Fail2Ban)
Mesmo com autenticação baseada em chave, um servidor SSH ainda está sujeito a tentativas de conexão. Ferramentas como Fail2Ban podem monitorar ativamente os logs do SSH em busca de tentativas repetidas de login malsucedidas do mesmo endereço IP e bloquear automaticamente esse endereço IP usando regras de firewall por um período definido.
Instalação (exemplo para Debian/Ubuntu):
sudo apt update
sudo apt install fail2ban
O Fail2Ban funciona imediatamente com as regras SSH padrão, mas você pode personalizar sua configuração copiando jail.conf para jail.local e editando-a.
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
Dentro de jail.local, você pode ajustar bantime, findtime e maxretry para a seção [sshd].
[sshd]
enabled = true
port = 2222 # Sua nova porta SSH
logpath = %(sshd_log)s
maxretry = 3
bantime = 1h # Banir por 1 hora
findtime = 10m # Procurar por 3 falhas em 10 minutos
Reinicie o Fail2Ban após as alterações de configuração:
sudo systemctl restart fail2ban
8. Mantenha o Software do Seu Servidor SSH Atualizado
Vulnerabilidades de software são constantemente descobertas e corrigidas. Executar software de daemon SSH desatualizado (OpenSSH) significa que você pode estar exposto a exploits conhecidos. Atualizar regularmente o software do seu servidor, incluindo o pacote do servidor OpenSSH, é crucial para aplicar patches em vulnerabilidades de segurança.
# Para Debian/Ubuntu:
sudo apt update && sudo apt upgrade
# Para CentOS/RHEL:
sudo yum update
# ou
sudo dnf update
Configure seu sistema para aplicar atualizações de segurança automaticamente, quando apropriado, ou estabeleça uma rotina para atualizações manuais.
9. Monitore os Logs do SSH em Busca de Atividade Suspeita
Mesmo com medidas preventivas robustas, a vigilância é fundamental. Revise regularmente os logs de autenticação SSH para detectar padrões incomuns, tentativas de login malsucedidas ou tentativas de acesso não autorizado. Isso ajuda você a identificar possíveis violações ou ataques em andamento.
Os logs SSH geralmente são encontrados em:
/var/log/auth.log(Debian/Ubuntu)/var/log/secure(CentOS/RHEL)- Usando
journalctl(sistemas systemd):
bash sudo journalctl -u sshd -f
Procure por tentativas de autenticação repetidas malsucedidas, logins de endereços IP incomuns ou logins bem-sucedidos por usuários desconhecidos. Ferramentas como Logwatch ou Elastic Stack (ELK) podem automatizar a análise de logs e alertas para ambientes maiores.
10. Configure Regras de Firewall para Restringir o Acesso
Um firewall é sua primeira linha de defesa. Por padrão, ele deve bloquear todo o tráfego de entrada, exceto pelos serviços que você explicitamente precisa expor. Para SSH, isso significa permitir conexões apenas na porta escolhida (por exemplo, 2222) e, idealmente, apenas a partir de endereços IP ou redes confiáveis específicos.
Exemplo usando UFW (Uncomplicated Firewall):
Permitir SSH de um endereço IP específico 192.168.1.100 na porta 2222:
sudo ufw allow from 192.168.1.100 to any port 2222
Permitir SSH de uma sub-rede específica 192.168.1.0/24:
sudo ufw allow from 192.168.1.0/24 to any port 2222
Exemplo usando Firewalld (CentOS/RHEL):
Permitir SSH de um endereço IP específico 192.168.1.100 na porta 2222:
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port=2222 protocol="tcp" accept'
sudo firewall-cmd --reload
Aviso: Se você estiver gerenciando um servidor a partir de um endereço IP dinâmico, tenha cuidado com regras de firewall restritas. Você pode precisar permitir acesso a uma faixa mais ampla ou usar uma VPN.
Dicas Adicionais de Fortalecimento
Além das 10 essenciais, considere estas diretivas para uma segurança ainda maior:
MaxAuthTries: Limita o número de tentativas de autenticação por conexão. O padrão é 6. Diminuí-lo (por exemplo,3) reduz as chances de força bruta. Definido emsshd_config.
config MaxAuthTries 3LoginGraceTime: Limita o tempo permitido para um usuário se autenticar. O padrão é 2 minutos. Diminuí-lo (por exemplo,30s) reduz a janela para ataques lentos.
config LoginGraceTime 30sClientAliveIntervaleClientAliveCountMax: Evita que sessões SSH inativas permaneçam abertas indefinidamente.ClientAliveIntervalenvia um pacote nulo a cada X segundos. SeClientAliveCountMax(padrão 3) respostas forem perdidas, a conexão é encerrada.
config ClientAliveInterval 300 ClientAliveCountMax 0 # Desativa a verificação de vida útil do cliente se você quiser que as sessões persistam indefinidamenteBanner: Exibe uma mensagem de aviso antes da autenticação. Isso serve como aviso legal para potenciais usuários não autorizados.
config Banner /etc/issue.net
Crie o arquivo/etc/issue.netcom a mensagem de aviso desejada.
Conclusão
Fortalecer seu servidor SSH é um processo contínuo, não uma configuração única. Ao implementar estas 10 práticas recomendadas essenciais – desde a alteração de portas padrão e o desativar do login do root até a imposição da autenticação baseada em chave e a implantação de firewalls – você estabelece uma postura de segurança robusta para seu acesso remoto. Lembre-se sempre de testar as alterações com cuidado, manter seus sistemas atualizados e monitorar regularmente os logs em busca de qualquer atividade suspeita. A vigilância consistente é fundamental para manter um ambiente de administração remota seguro e confiável.
Estas práticas são fundamentais para qualquer administrador de servidor e reduzirão significativamente sua exposição a ameaças cibernéticas comuns, protegendo sua infraestrutura de servidor contra acesso não autorizado e potencial comprometimento.