Hardening de Segurança Adicional para SSH
Nota: Este é o décimo tutorial da série sobre SSH. Se você perdeu o anterior sobre ProxyJump e bastion hosts, pode encontrá-lo aqui: ProxyJump e Redes Complexas.
Ao longo desta série, cobrimos os fundamentos do SSH, autenticação segura por chaves, configuração do cliente e servidor, transferência de arquivos, tunelamento e acesso através de bastion hosts. Já implementamos medidas de segurança importantes, como desabilitar o login de root e a autenticação por senha. No entanto, para ambientes que exigem um nível ainda maior de segurança, existem técnicas adicionais de hardening (fortalecimento) que podemos aplicar.
Neste tutorial, exploraremos algumas dessas técnicas avançadas para proteger ainda mais seu servidor SSH contra ataques e acessos não autorizados.
1. Fail2ban: Bloqueio Automático de Ataques de Força Bruta
Mesmo com a autenticação por senha desabilitada, seu servidor SSH ainda pode ser alvo de bots e atacantes tentando adivinhar nomes de usuário válidos ou explorar outras vulnerabilidades. Essas tentativas geram entradas nos logs do sistema (geralmente /var/log/auth.log
ou similar).
O Fail2ban é uma ferramenta extremamente popular que monitora esses arquivos de log em tempo real, detecta padrões de falhas de login repetidas (ou outras atividades suspeitas) de um mesmo endereço IP e, automaticamente, cria regras de firewall (usando iptables, nftables, firewalld, etc.) para bloquear temporariamente (ou permanentemente) esse IP.
Como Funciona (Conceito):
- Instalação: Instale o pacote
fail2ban
(sudo apt install fail2ban
ousudo dnf install fail2ban
). - Configuração (Jails): O Fail2ban usa “jails” (jaulas) para definir as regras de monitoramento e bloqueio para serviços específicos. A configuração principal está em
/etc/fail2ban/jail.conf
, mas você deve criar arquivos de configuração local em/etc/fail2ban/jail.d/
para sobrescrever ou adicionar configurações (ex:/etc/fail2ban/jail.d/sshd.local
). - Habilitar Jail SSHd: Em seu arquivo
.local
, você habilita a jail para SSH e ajusta parâmetros:1 2 3 4 5 6 7 8 9
[sshd] enabled = true port = ssh # Ou o número da porta se você alterou logpath = %(sshd_log)s # Caminho do log (geralmente detectado automaticamente) backend = %(sshd_backend)s # Método de monitoramento (auto) maxretry = 3 # Número de falhas antes de banir findtime = 10m # Janela de tempo para contar as falhas (10 minutos) bantime = 1h # Duração do banimento (1 hora) # action = %(action_mwl)s # Ação a ser tomada (ex: banir e enviar email com logs)
- Reiniciar Fail2ban:
sudo systemctl restart fail2ban
.
Benefício: Reduz drasticamente o sucesso de ataques de força bruta e diminui o ruído nos logs, bloqueando IPs maliciosos automaticamente.
2. Autenticação de Dois Fatores (2FA/MFA)
A autenticação por chave pública é muito segura, mas se sua chave privada (mesmo protegida por passphrase) for comprometida, o atacante pode ganhar acesso. A Autenticação de Dois Fatores (2FA) ou Múltiplos Fatores (MFA) adiciona uma camada extra de segurança exigindo uma segunda forma de verificação além da chave (ou senha, se ainda habilitada).
O princípio é combinar “algo que você sabe” (senha/passphrase), “algo que você tem” (chave privada, token físico, celular) ou “algo que você é” (biometria).
Para SSH, a implementação de 2FA geralmente envolve o uso do PAM (Pluggable Authentication Modules), um framework flexível do Linux que permite adicionar diferentes métodos de autenticação.
Métodos Comuns:
- TOTP (Time-based One-Time Password): Usa aplicativos como Google Authenticator, Authy, ou FreeOTP no seu celular para gerar códigos numéricos que mudam a cada 30-60 segundos. O módulo PAM
libpam-google-authenticator
é comumente usado. - U2F/FIDO2 (Universal 2nd Factor): Usa chaves de segurança físicas (como YubiKey) que exigem um toque físico para aprovar a autenticação. O módulo
libpam-u2f
oulibpam-fido2
pode ser usado.
Como Funciona (Conceito Geral com PAM):
- Instalar Módulo PAM: Instale o pacote PAM correspondente ao método desejado (ex:
sudo apt install libpam-google-authenticator
). - Configurar Usuário: O usuário precisa configurar seu segundo fator (ex: escanear um QR code com o Google Authenticator usando
google-authenticator
na linha de comando, ou registrar sua YubiKey compamu2fcfg
). - Configurar PAM para SSHd: Edite o arquivo de configuração do PAM para o serviço SSH (
/etc/pam.d/sshd
). Adicione uma linhaauth required pam_google_authenticator.so
(oupam_u2f.so
, etc.) no local apropriado (a ordem importa!). Isso instrui o PAM a exigir a verificação do segundo fator durante a autenticação. - Configurar
sshd_config
:- É essencial habilitar
ChallengeResponseAuthentication yes
. O SSH usará este mecanismo para interagir com o PAM e solicitar o segundo fator (código TOTP, toque na YubiKey). - Você pode precisar ajustar a diretiva
AuthenticationMethods
para especificar a sequência exata de métodos exigidos. Por exemplo, para exigir chave pública E um segundo fator via PAM:1 2
# Exige chave pública E interação via PAM (que pedirá o 2FA) AuthenticationMethods publickey,keyboard-interactive:pam
(Consulte
man sshd_config
para a sintaxe exata deAuthenticationMethods
).
- É essencial habilitar
- Reiniciar
sshd
:sudo systemctl restart sshd
.
Complexidade: Configurar 2FA/MFA via PAM pode ser complexo e requer testes cuidadosos para não se trancar fora do sistema. Siga guias detalhados específicos para o método e distribuição que você está usando.
Benefício: Aumenta significativamente a segurança, exigindo um segundo fator que é mais difícil para um atacante obter.
3. Preferências de Criptografia (Cifras, KEX, MACs)
O SSH usa vários algoritmos criptográficos durante a negociação da conexão:
- Cifras (Ciphers): Algoritmos de criptografia simétrica usados para proteger os dados da sessão (ex: AES, ChaCha20).
- KEX (Key Exchange Algorithms): Algoritmos usados para estabelecer a chave de sessão secreta de forma segura (ex: Diffie-Hellman, ECDH).
- MACs (Message Authentication Codes): Algoritmos usados para garantir a integridade dos dados (ex: HMAC-SHA2).
Embora o OpenSSH moderno tenha padrões razoáveis, ele ainda pode suportar algoritmos mais antigos ou considerados mais fracos por questões de compatibilidade. Você pode (e deve) configurar explicitamente seu cliente e servidor para usar apenas os algoritmos mais fortes e modernos disponíveis.
Listando Algoritmos Suportados:
Use o comando ssh -Q
(Query) para ver quais algoritmos seu cliente/servidor suporta:
1
2
3
4
ssh -Q cipher
ssh -Q mac
ssh -Q kex
ssh -Q key # Tipos de chave pública
Configuração:
Você pode especificar listas de algoritmos preferidos (em ordem de preferência) nos arquivos de configuração:
- Servidor (
/etc/ssh/sshd_config
):1 2 3 4 5
# Exemplo de configuração mais restrita (verifique a compatibilidade!) KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256 Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com HostKeyAlgorithms ssh-ed25519,rsa-sha2-512,rsa-sha2-256
- Cliente (
~/.ssh/config
ou/etc/ssh/ssh_config
):1 2 3 4 5 6
# Pode ser em Host * ou blocos específicos Host * KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256 Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com HostKeyAlgorithms ssh-ed25519,rsa-sha2-512,rsa-sha2-256
Recomendação: Consulte documentação atualizada e benchmarks de segurança (ex: guias do Mozilla, recomendações de agências de segurança) para obter listas de algoritmos fortes recomendados. Comece removendo algoritmos obviamente fracos (ex: baseados em MD5, SHA1, cifras CBC mais antigas). Teste a compatibilidade após fazer alterações.
Benefício: Garante que apenas criptografia forte e moderna seja usada, protegendo contra vulnerabilidades conhecidas em algoritmos mais antigos.
4. Garantir Protocol 2
Como mencionado no primeiro tutorial, o SSH-1 é obsoleto e inseguro. Embora seja o padrão na maioria das instalações modernas, verifique se o seu /etc/ssh/sshd_config
contém explicitamente:
1
Protocol 2
Isso garante que apenas a versão segura do protocolo SSH seja utilizada.
5. Técnicas Avançadas (Opcional)
Para níveis ainda mais elevados de segurança (muitas vezes com uma troca em usabilidade ou complexidade), existem técnicas como:
- Port Knocking: O servidor SSH não escuta na porta padrão. Em vez disso, o cliente precisa fazer uma sequência específica de tentativas de conexão (knocks) a outras portas predefinidas e fechadas. Um daemon como o
knockd
no servidor detecta essa sequência correta e, temporariamente, abre a porta SSH real no firewall apenas para o IP do cliente.- Vantagem: Esconde completamente a porta SSH de scanners.
- Desvantagem: Mais complexo de configurar, sensível a perda de pacotes nos knocks, pode dificultar a automação.
- Single Packet Authorization (SPA): Similar ao Port Knocking, mas em vez de uma sequência de knocks, o cliente envia um único pacote UDP ou TCP especialmente criado e criptografado/assinado para o servidor. Um daemon como o
fwknop
no servidor descriptografa/verifica o pacote e, se válido, abre temporariamente a porta SSH no firewall para o IP do cliente.- Vantagem: Mais robusto que Port Knocking (menos sensível a problemas de rede), criptograficamente seguro.
- Desvantagem: Requer software cliente e servidor específico (
fwknop
), mais complexo de configurar.
Essas técnicas são geralmente consideradas para cenários de altíssima segurança onde a ofuscação e a autorização pré-conexão são desejadas, mas não são comumente usadas em implantações SSH padrão devido à sua complexidade.
Conclusão
Fortalecer (hardening) seu servidor SSH é um processo contínuo e envolve múltiplas camadas. Além das configurações básicas de segurança que já cobrimos, ferramentas como Fail2ban
oferecem proteção automatizada contra força bruta, enquanto a Autenticação de Dois Fatores (2FA/MFA)
adiciona uma barreira crítica contra o comprometimento de credenciais. Ajustar as Preferências de Criptografia
garante que você esteja usando os algoritmos mais fortes disponíveis.
Embora técnicas como Port Knocking e SPA existam para ofuscação adicional, a combinação de autenticação por chave pública forte (com passphrase), desativação de métodos inseguros (PasswordAuthentication no
, PermitRootLogin no
), uso de Fail2ban
, e potencialmente 2FA/MFA
, juntamente com a manutenção do sistema atualizado, fornece um nível muito robusto de segurança para a maioria dos casos de uso do SSH.
No próximo tutorial, abordaremos a solução de problemas comuns (troubleshooting) em conexões SSH.