Como proteger o SSH no Debian, Ubuntu e Proxmox: chaves ed25519, sem login por senha, root restrito e bloqueio de força bruta com fail2ban ou CrowdSec.

Para que serve

O SSH é o alvo número um de ataques de força bruta em servidores Linux. Este artigo mostra como proteger o SSH: trocar senhas por chaves ed25519, desligar o login por senha, restringir o root e bloquear automaticamente IPs abusivos com fail2ban ou CrowdSec. Os comandos valem para Debian 12/13, Ubuntu 24.04 e Proxmox VE 8.x/9.x.

Atenção: uma configuração errada no SSH pode trancar você fora do servidor. Mantenha uma sessão SSH aberta durante todo o procedimento e o console IPMI/iLO à mão. Só feche a sessão antiga depois de testar o novo login em outra janela.

Pré-requisitos

  • Acesso ao servidor com um usuário que tenha sudo (ou root). Para criar esse usuário, veja também o artigo «Como criar usuário com sudo no Debian, Ubuntu e Proxmox VE».
  • OpenSSH 8.x ou mais novo no seu computador (Linux, macOS e Windows 10/11 já trazem).
  • Acesso ao console IPMI/iLO para recuperação.

Como proteger o SSH passo a passo

1. Gere uma chave ed25519 no seu computador

ssh-keygen -t ed25519 -a 100 -C "joao@empresa"

Defina uma passphrase. A chave privada (~/.ssh/id_ed25519) nunca sai do seu computador; o servidor recebe só a pública (.pub).

2. Copie a chave pública para o servidor

ssh-copy-id -i ~/.ssh/id_ed25519.pub joao@SEU_IP

No Windows, sem ssh-copy-id, cole o conteúdo do .pub numa linha do arquivo ~/.ssh/authorized_keys do usuário no servidor e ajuste as permissões:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Teste em outra janela: ssh joao@SEU_IP. Ele deve pedir a passphrase da chave, não a senha do usuário.

3. Crie um arquivo de configuração próprio

Em vez de editar o sshd_config principal, use um arquivo em /etc/ssh/sshd_config.d/. O nome começando com 00- é proposital: no sshd vale o primeiro valor lido, e algumas imagens trazem arquivos como 50-cloud-init.conf que reativam a senha.

sudo nano /etc/ssh/sshd_config.d/00-hardening.conf
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
PermitRootLogin no
PermitEmptyPasswords no
MaxAuthTries 3
LoginGraceTime 30
X11Forwarding no
AllowUsers joao

No host Proxmox VE, use PermitRootLogin prohibit-password em vez de no: os nós de um cluster se comunicam por SSH como root usando chaves, e bloquear o root quebra migração e replicação. Ajuste também o AllowUsers para incluir root nesse caso, ou omita a linha.

4. Valide e aplique

sudo sshd -t
sudo systemctl reload ssh

O sshd -t não mostra nada se a sintaxe estiver correta. Teste o login numa nova janela antes de fechar a sessão atual.

5. (Opcional) Mudar a porta

Trocar a porta 22 não é proteção real, mas reduz muito o ruído de robôs nos logs. Se fizer, libere a nova porta no firewall antes. Adicione ao seu arquivo:

Port 2222

No Ubuntu 24.04 o SSH usa ativação por socket do systemd; a troca de porta só vale depois de:

sudo systemctl daemon-reload
sudo systemctl restart ssh.socket

No Debian e no Proxmox, um sudo systemctl restart ssh basta. A opção mais eficaz, porém, é limitar a porta do SSH no firewall aos IPs da sua equipe ou acessar só via VPN (WireGuard). Veja também o artigo «Como liberar o acesso ao Proxmox (porta 8006), SSH e RDP só pela VPN».

6a. Bloqueio automático com fail2ban

sudo apt install fail2ban python3-systemd

Crie /etc/fail2ban/jail.local (nunca edite o jail.conf):

[DEFAULT]
backend = systemd
bantime = 1h
findtime = 10m
maxretry = 5
bantime.increment = true
ignoreip = 127.0.0.1/8 ::1 203.0.113.10

[sshd]
enabled = true
port = ssh

Troque 203.0.113.10 pelo IP fixo do seu escritório e, se mudou a porta, informe-a em port. O backend = systemd é necessário no Debian 12/13, que não grava mais /var/log/auth.log por padrão.

sudo systemctl enable --now fail2ban
sudo systemctl restart fail2ban

6b. Alternativa: CrowdSec

O CrowdSec analisa os logs localmente e também usa uma lista colaborativa de IPs maliciosos. Ele detecta, mas quem bloqueia é o bouncer, que precisa ser instalado à parte. Use ou fail2ban ou CrowdSec, não os dois no mesmo serviço.

curl -s https://install.crowdsec.net | sudo sh
sudo apt install crowdsec
sudo apt install crowdsec-firewall-bouncer-iptables

A coleção de SSH é instalada automaticamente quando o CrowdSec detecta o serviço. Se preferir, revise o script de instalação antes de rodá-lo ou configure o repositório manualmente conforme a documentação oficial.

Como saber se funcionou

  • Forçar senha deve falhar: ssh -o PubkeyAuthentication=no joao@SEU_IP retorna Permission denied (publickey).
  • Confira a configuração efetiva: sudo sshd -T | grep -Ei 'passwordauth|permitroot|kbdinter'.
  • fail2ban: sudo fail2ban-client status sshd mostra IPs banidos e falhas detectadas.
  • CrowdSec: sudo cscli decisions list e sudo cscli metrics mostram bloqueios e logs lidos.

Para uma camada a mais, veja também o artigo «Como ativar autenticação em dois fatores (2FA) no SSH, Proxmox, Windows e painéis».

Problemas comuns

Ainda aceita senha depois da mudança

Outro arquivo em /etc/ssh/sshd_config.d/ está definindo PasswordAuthentication yes antes do seu. Rode grep -ri passwordauth /etc/ssh/, corrija ou renomeie o seu arquivo para ser lido primeiro e recarregue o serviço.

"Permission denied (publickey)" com a chave correta

Quase sempre é permissão: o diretório home, ~/.ssh e authorized_keys não podem ter escrita para grupo ou outros. Veja o motivo exato com sudo journalctl -u ssh -n 50.

Fiquei trancado fora

Acesse pelo console IPMI/iLO, faça login local, remova ou corrija /etc/ssh/sshd_config.d/00-hardening.conf e rode systemctl restart ssh. Se o fail2ban baniu seu IP: fail2ban-client set sshd unbanip SEU_IP; no CrowdSec: cscli decisions delete --ip SEU_IP.

fail2ban não inicia

Geralmente falta o backend = systemd ou o pacote python3-systemd. Veja o erro com sudo fail2ban-client -d ou journalctl -u fail2ban.

Perguntas frequentes

Como desativar o login por senha no SSH?

Crie /etc/ssh/sshd_config.d/00-hardening.conf com PasswordAuthentication no e KbdInteractiveAuthentication no, valide com sshd -t e recarregue o serviço.

Por que usar chave ed25519?

É um algoritmo moderno, rápido e com chaves curtas. Combinada com uma passphrase, a chave substitui a senha e torna a força bruta inútil.

Trocar a porta 22 deixa o SSH seguro?

Não. Só reduz o ruído de robôs nos logs. Proteção real é login por chave, root restrito e a porta liberada só para IPs conhecidos ou pela VPN.

Posso bloquear o root no SSH do Proxmox?

No host Proxmox use PermitRootLogin prohibit-password em vez de no, porque os nós de um cluster se comunicam por SSH como root com chaves.

Fail2ban ou CrowdSec?

Os dois bloqueiam IPs abusivos. O fail2ban é simples e local; o CrowdSec soma uma lista colaborativa de IPs maliciosos. Use um ou outro no mesmo serviço, não os dois.

Precisa de ajuda?

Se perdeu o acesso ao servidor e também não consegue usar o console IPMI/iLO, abra um ticket pela área do cliente.

Esta resposta lhe foi útil? 0 Usuários acharam útil (0 Votos)

Leia também