Como proteger uma VPS Ubuntu: o básico que evita 99% dos ataques

Atualizado em 21/09/2026 20 min Iniciante

Um servidor novo começa a receber tentativas de login em questão de minutos. Não é nada pessoal: são robôs varrendo faixas de IP inteiras testando root com senhas comuns.

As quatro medidas deste guia resolvem a esmagadora maioria dos casos. Nenhuma delas é complicada, e todas levam menos de vinte minutos somadas.

Antes de começar

  • VPS com Ubuntu 22.04 ou 24.04 e acesso root.
  • Um par de chaves SSH na sua máquina. Se não tiver, gere com ssh-keygen -t ed25519.

Crie um usuário comum

Entrar como root todo dia é pedir para um erro de digitação virar um problema sério. Trabalhe com um usuário normal e use sudo quando precisar.

terminal
adduser --gecos '' deploy
usermod -aG sudo deploy
rsync --archive --chown=deploy:deploy ~/.ssh /home/deploy/

Troque a senha pela chave SSH

Senha pode ser adivinhada; chave, não. Copie a sua chave pública para o servidor e teste antes de desativar a senha.

terminal
# na SUA máquina, não no servidor
ssh-copy-id deploy@IP-DA-SUA-VPS

# teste: deve entrar sem pedir senha
ssh deploy@IP-DA-SUA-VPS

Só siga para o próximo passo depois que o login por chave funcionar. Desativar a senha sem ter a chave no lugar deixa você trancado do lado de fora.

Endureça o SSH

Com a chave funcionando, recuse senha e bloqueie login direto de root.

terminal
cat > /etc/ssh/sshd_config.d/99-seguranca.conf <<'EOF'
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
EOF

sshd -t && systemctl restart ssh

# confirme que a configuração está valendo
sshd -T | grep -E 'permitrootlogin|passwordauthentication'

Mantenha a sessão atual aberta e teste o acesso numa segunda janela. Se algo saiu errado, você ainda tem a primeira para corrigir.

Feche o firewall

Regra simples: bloqueia tudo, libera o que você usa.

terminal
ufw default deny incoming
ufw default allow outgoing
ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp
ufw --force enable
ufw status verbose

Instale o fail2ban

O fail2ban lê os logs e bane o IP que erra a autenticação várias vezes. Mesmo com senha desativada, ele corta o ruído das varreduras.

terminal
apt install -y fail2ban

cat > /etc/fail2ban/jail.local <<'EOF'
[DEFAULT]
bantime  = 1h
findtime = 10m
maxretry = 5
backend  = systemd

[sshd]
enabled = true
EOF

systemctl enable --now fail2ban
fail2ban-client status sshd

Se o status reclamar que não encontra o log, troque backend = systemd por logpath = /var/log/auth.log — depende de como a distribuição registra o SSH.

Ligue as atualizações automáticas

A maior parte das invasões explora falha conhecida e já corrigida. Deixe o sistema aplicar as correções de segurança sozinho.

terminal
apt install -y unattended-upgrades
dpkg-reconfigure -plow unattended-upgrades

# confirme que está ativo
systemctl status unattended-upgrades --no-pager | head -5
cat /var/log/unattended-upgrades/unattended-upgrades.log | tail -5

Confira o resultado

Um teste rápido para ver se o que você configurou está de fato valendo.

terminal
# senha deve ser recusada
sshd -T | grep passwordauthentication

# portas abertas para o mundo
ss -tulpn | grep LISTEN

# banimentos até agora
fail2ban-client status sshd

No ss, o que aparece com 0.0.0.0 ou [::] está exposto. Banco de dados nessa lista é problema: bancos devem escutar só em 127.0.0.1 ou na rede interna do Docker.

Se algo não funcionar

Fiquei trancado fora do servidor

Use o console do painel da VPS, que acessa a máquina por fora do SSH. Por lá, corrija o arquivo em /etc/ssh/sshd_config.d/ e reinicie o serviço.

Baniram o meu próprio IP

Pelo console, remova o banimento e adicione o seu endereço à lista de ignorados:

terminal
fail2ban-client set sshd unbanip SEU.IP.AQUI
# para não repetir, acrescente em /etc/fail2ban/jail.local:
# ignoreip = 127.0.0.1/8 SEU.IP.AQUI
VPS KVM com acesso root e console de emergência

Se algo der errado no SSH, o console do painel entra por fora e você resolve sem abrir ticket.

Ver planos de VPS

Perguntas frequentes

Mudar a porta do SSH ajuda?

Reduz o ruído nos logs, porque a maioria das varreduras só testa a 22. Não é segurança de verdade: quem faz um scan de portas acha a nova em segundos. Vale como conveniência, nunca como substituto da chave e do fail2ban.

Preciso de fail2ban se já desativei a senha?

Ele deixa de ser essencial para o SSH, mas continua útil: corta o volume de tentativas que enche o log e pode proteger outros serviços, como o painel de uma aplicação web.

O firewall do Ubuntu protege os contêineres Docker?

Nem sempre. O Docker escreve as próprias regras no iptables e, ao publicar uma porta, pode contornar o UFW. Por isso, nos guias deste site os bancos nunca publicam porta — conversam pela rede interna do Compose, e só o proxy fica exposto.

Continue por aqui