Hardening de VPS Ubuntu: checklist completo

    Uma VPS recém-criada está exposta à internet com configuração padrão — isso significa senha root via SSH, todas as portas acessíveis e sem proteção contra força bruta. Hardening é o processo de reduzir a superfície de ataque: desabilitar o que não é necessário, restringir o que é e monitorar o restante. Este checklist cobre os passos essenciais para qualquer VPS Ubuntu 22.04 ou 24.04.

    Passo 1: atualizar e ativar atualizações automáticas de segurança

    A maioria das invasões exploram vulnerabilidades conhecidas com patches disponíveis:

    bash
    # 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 -20
    Dica
    unattended-upgrades aplica apenas patches de segurança — não atualiza pacotes de aplicação. Isso é intencional: patches de segurança têm prioridade; atualizações de aplicação podem quebrar compatibilidade e devem ser feitas manualmente.

    Passo 2: criar usuário não-root e bloquear acesso root

    Root deve ser inacessível remotamente:

    bash
    # 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 sshd
    Atenção
    Teste o login com o usuário deploy em uma sessão separada ANTES de desabilitar root. Se travar sem confirmar que funciona, você perde o acesso.

    Passo 3: firewall com UFW

    Bloquear tudo que entra, liberar apenas o necessário:

    bash
    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 verbose
    Dica
    Docker bypassa o UFW por padrão — containers com portas expostas ficam acessíveis mesmo com UFW bloqueando. Use bind 127.0.0.1:PORTA:PORTA no docker-compose para expor apenas no loopback.

    Passo 4: hardening SSH

    Restrinja SSH além do básico:

    bash
    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 sshd

    Passo 5: fail2ban e monitoramento básico

    Bloquear IPs com comportamento suspeito e verificar o estado do sistema:

    bash
    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

    $ runstack deploy --plan starter

    Não quer configurar manualmente?

    Não quer configurar manualmente? Implante o VPS em menos de 3 minutos com a Runstack. Infraestrutura da OPEN DATACENTER, com servidores no Brasil.

    Perguntas frequentes