Sempre que inicio uma nova VPS em algum lugar (hostinger, proxmox local no homelab, etc), me deparo com a necessidade fazer um hardening inicial básico (proteção) antes de expor publicamente o servidor. Neste tutorial resumi os principais passos por ordem de importância, do mais para o menos importante. Servirá como guia para mim, a equipe Setor9 e qualquer um que precisar na internet futuramente.
1. Atualize o sistema
sudo apt update
sudo apt upgrade -y
sudo apt autoremove -y
Opcionalmente reinicie se houver atualização de kernel:
sudo reboot
2. Crie um usuário comum com sudo
Evite administrar tudo como root.
adduser seuusuario
usermod -aG sudo seuusuario
Depois teste login com esse usuário antes de bloquear root.
3. Configure SSH com chave, não senha
No seu computador local, se ainda não tiver chave:
ssh-keygen -t ed25519 -C "seu-email-ou-identificacao"
Copie a chave para a VPS:
ssh-copy-id seuusuario@IP_DA_VPS
Teste:
ssh seuusuario@IP_DA_VPS
4. Endureça o SSH
Edite:
sudo nano /etc/ssh/sshd_config
Recomendações principais:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
KbdInteractiveAuthentication no
X11Forwarding no
Opcionalmente mude a porta SSH, por exemplo:
Port 2222
Atenção: se mudar a porta, libere no firewall antes de reiniciar o SSH.
Teste a configuração:
sudo sshd -t
Reinicie o serviço:
sudo systemctl restart ssh
Ou, em algumas versões:
sudo systemctl restart sshd
Mantenha uma sessão SSH aberta enquanto testa uma nova, para não se trancar fora.
5. Configure firewall com UFW
Libere apenas o necessário.
Se usa SSH na porta padrão:
sudo ufw allow OpenSSH
Se mudou para porta 2222:
sudo ufw allow 2222/tcp
Para servidor web:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
Ative:
sudo ufw enable
sudo ufw status verbose
6. Instale proteção contra força bruta
Use fail2ban:
sudo apt install fail2ban -y
Crie uma configuração local:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
Para SSH, algo como:
[sshd]
enabled = true
port = ssh
maxretry = 5
bantime = 1h
findtime = 10m
Se mudou a porta SSH:
port = 2222
Reinicie:
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd
7. Ative atualizações automáticas de segurança
sudo apt install unattended-upgrades apt-listchanges -y
sudo dpkg-reconfigure unattended-upgrades
Verifique:
systemctl status unattended-upgrades
8. Configure hostname e timezone
Hostname:
sudo hostnamectl set-hostname nome-da-vps
Timezone, se quiser São Paulo:
sudo timedatectl set-timezone America/Sao_Paulo
9. Desative serviços desnecessários
Veja serviços escutando portas:
sudo ss -tulpn
Veja serviços ativos:
systemctl --type=service --state=running
Desative o que não usa, por exemplo:
sudo systemctl disable --now nome-do-servico
10. Instale ferramentas básicas de auditoria
sudo apt install curl wget vim htop ncdu net-tools lsof jq git -y
Para segurança/auditoria:
sudo apt install auditd lynis -y
Rode um scan inicial:
sudo lynis audit system
11. Configure logs e monitoramento mínimo
Ver logs de autenticação:
sudo journalctl -u ssh
Ou:
sudo tail -f /var/log/auth.log
Ver tentativas de login:
sudo grep "Failed password" /var/log/auth.log
Em Ubuntu mais novo, alguns logs podem estar no journalctl.
12. Backups
Tenha backup fora da VPS. Idealmente:
- backup automático;
- criptografado;
- testado com restore;
- salvo em outro local, como NAS, storage S3, Backblaze, rsync remoto etc.
Ferramentas boas:
sudo apt install restic -y
Ou:
sudo apt install borgbackup -y
13. Permissões e acesso
Evite permissões amplas como 777.
Cheque arquivos sensíveis:
ls -la ~/.ssh
Permissões recomendadas:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
14. Proteja aplicações com usuário separado
Se for rodar Docker, app web, banco etc., evite rodar tudo como root.
Exemplo:
sudo adduser --system --group minhaapp
Use serviços systemd com usuário próprio quando possível.
15. Se usar Docker, cuidado extra
Instale Docker apenas se precisar. O grupo docker equivale praticamente a root.
Evite expor portas internas sem necessidade. Prefira:
ports:
- "127.0.0.1:8080:8080"
em vez de:
ports:
- "8080:8080"
Use reverse proxy para expor apenas 80/443.
16. Configure swap, se a VPS for pequena
Não é exatamente segurança, mas evita travamentos.
sudo fallocate -l 1G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
Adicione ao /etc/fstab:
/swapfile none swap sw 0 0
17. Use HTTPS se houver site
Com Nginx:
sudo apt install nginx certbot python3-certbot-nginx -y
sudo certbot --nginx
Com Apache:
sudo apt install apache2 certbot python3-certbot-apache -y
sudo certbot --apache
18. Checklist rápido recomendado
Se eu tivesse que resumir o essencial:
sudo apt update && sudo apt upgrade -y
sudo adduser seuusuario
sudo usermod -aG sudo seuusuario
sudo ufw allow OpenSSH
sudo ufw enable
sudo apt install fail2ban unattended-upgrades -y
sudo dpkg-reconfigure unattended-upgrades
Depois:
- configurar SSH por chave;
- desabilitar login root;
- desabilitar senha no SSH;
- liberar apenas portas necessárias;
- configurar backups;
- monitorar logs;
- manter tudo atualizado.
Essas medidas já reduzem bastante o risco de comprometimento em uma VPS Ubuntu nova.
