Passo 1: atualizar e ativar atualizações automáticas de segurança
A maioria das invasões exploram vulnerabilidades conhecidas com patches disponíveis:
# Atualizar tudo imediatamente
apt update && apt upgrade -y && apt autoremove -y
# Instalar unattended-upgrades
apt install -y unattended-upgrades
dpkg-reconfigure -plow unattended-upgrades
# Verificar configuração
cat /etc/apt/apt.conf.d/20auto-upgrades
# Deve conter:
# APT::Periodic::Update-Package-Lists "1";
# APT::Periodic::Unattended-Upgrade "1";
# Testar
unattended-upgrade --dry-run --debug | head -20Passo 2: criar usuário não-root e bloquear acesso root
Root deve ser inacessível remotamente:
# Criar usuário de administração
adduser deploy
usermod -aG sudo deploy
# Copiar chave SSH do root para o novo usuário
mkdir -p /home/deploy/.ssh
cp ~/.ssh/authorized_keys /home/deploy/.ssh/
chown -R deploy:deploy /home/deploy/.ssh
chmod 700 /home/deploy/.ssh
chmod 600 /home/deploy/.ssh/authorized_keys
# TESTE O LOGIN EM OUTRO TERMINAL ANTES DE CONTINUAR
# ssh deploy@IP_DA_VPS
# Desabilitar root via SSH
sed -i 's/^PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
systemctl reload sshdPasso 3: firewall com UFW
Bloquear tudo que entra, liberar apenas o necessário:
apt install -y ufw
ufw default deny incoming
ufw default allow outgoing
# Liberar SSH ANTES de ativar
ufw allow ssh
ufw allow 80/tcp
ufw allow 443/tcp
# Ativar
ufw enable
ufw status verbosePasso 4: hardening SSH
Restrinja SSH além do básico:
cat >> /etc/ssh/sshd_config << 'EOF'
PermitRootLogin no
PasswordAuthentication no
MaxAuthTries 3
MaxSessions 5
LoginGraceTime 30
ClientAliveInterval 300
ClientAliveCountMax 2
AllowUsers deploy
X11Forwarding no
AllowAgentForwarding no
EOF
sshd -t && systemctl reload sshdPasso 5: fail2ban e monitoramento básico
Bloquear IPs com comportamento suspeito e verificar o estado do sistema:
apt install -y fail2ban
cat > /etc/fail2ban/jail.local << 'EOF'
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5
[sshd]
enabled = true
port = ssh
maxretry = 3
bantime = 86400
EOF
systemctl enable --now fail2ban
# Verificar estado do sistema
ss -tlnp # portas abertas
last -n 10 # últimos logins
lastb | head -10 # tentativas falhas