Monitoramento de segurança na VPS

    Hardening reduz a superfície de ataque, mas não elimina a necessidade de monitoramento. Você precisa saber quando alguém fez login no servidor, quando um serviço caiu, quando o disco está chegando ao limite. Com scripts simples e ferramentas como Logwatch e auditd, configure alertas por e-mail sem custo adicional.

    Alertas de login SSH por e-mail

    Receba um e-mail imediatamente quando alguém fizer login no servidor:

    bash
    # Instalar mailutils para envio de e-mail
    apt install mailutils
    
    # Adicionar ao /etc/pam.d/sshd para notificar no login
    # (ou criar script em /etc/ssh/sshrc)
    
    cat > /etc/ssh/sshrc << 'EOF'
    #!/bin/bash
    # Executado quando usuário faz login SSH
    IP=$(echo $SSH_CONNECTION | awk '{print $1}')
    USER=$(whoami)
    HOSTNAME=$(hostname)
    DATE=$(date)
    
    echo "Login SSH detectado:
    Usuário: $USER
    IP de origem: $IP
    Servidor: $HOSTNAME
    Data/hora: $DATE" | mail -s "ALERTA: Login SSH em $HOSTNAME" admin@seuemail.com
    EOF
    
    chmod +x /etc/ssh/sshrc
    Dica
    /etc/ssh/sshrc é executado automaticamente para cada novo login SSH interativo. Para alertas mais ricos (geolocalização do IP, etc.), use um script Python com a API do ipinfo.io.

    Logwatch: relatório diário de atividade

    Logwatch analisa os logs do sistema e envia um resumo por e-mail:

    bash
    # Instalar Logwatch
    apt install logwatch
    
    # Configuração
    cat > /etc/logwatch/conf/logwatch.conf << 'EOF'
    Output = mail
    MailTo = admin@seuemail.com
    MailFrom = logwatch@$(hostname)
    Detail = Med
    Service = All
    Range = yesterday
    Format = text
    EOF
    
    # Testar envio imediato
    logwatch --output mail --mailto admin@seuemail.com --detail High --range today
    
    # Logwatch roda automaticamente via cron diário
    # /etc/cron.daily/00logwatch
    # Para verificar:
    cat /etc/cron.daily/00logwatch

    auditd: rastrear operações sensíveis

    auditd registra operações de segurança do kernel — acesso a arquivos, comandos executados como root, mudanças de permissão:

    bash
    # Instalar auditd
    apt install auditd audispd-plugins
    
    # Regras de auditoria
    cat >> /etc/audit/rules.d/security.rules << 'EOF'
    # Monitorar logins
    -w /var/log/lastlog -p wa -k logins
    -w /var/run/faillock/ -p wa -k logins
    
    # Monitorar mudanças no sistema
    -w /etc/passwd -p wa -k identity
    -w /etc/group -p wa -k identity
    -w /etc/shadow -p wa -k identity
    -w /etc/sudoers -p wa -k sudoers
    -w /etc/ssh/sshd_config -p wa -k ssh_config
    
    # Comandos críticos
    -a always,exit -F arch=b64 -S execve -F euid=0 -k root_commands
    
    # Mudanças de rede
    -w /etc/network/ -p wa -k network
    EOF
    
    systemctl enable --now auditd
    
    # Pesquisar eventos
    ausearch -k logins -ts today
    ausearch -k root_commands -ts today | head -20

    Monitorar uso de recursos e alertas de disco

    Scripts simples para alertar quando disco, memória ou CPU estão críticos:

    bash
    #!/bin/bash
    # /opt/scripts/check-resources.sh — adicionar ao cron
    
    ALERT_EMAIL="admin@seuemail.com"
    HOSTNAME=$(hostname)
    
    # Verificar uso do disco
    DISK_USAGE=$(df / | tail -1 | awk '{print $5}' | tr -d '%')
    if [ "$DISK_USAGE" -gt 85 ]; then
        echo "ALERTA: Disco em $DISK_USAGE% em $HOSTNAME" | \
          mail -s "ALERTA DISCO: $HOSTNAME" "$ALERT_EMAIL"
    fi
    
    # Verificar carga do sistema (load average)
    LOAD=$(cat /proc/loadavg | awk '{print $1}' | cut -d. -f1)
    CPUS=$(nproc)
    if [ "$LOAD" -gt "$((CPUS * 2))" ]; then
        echo "ALERTA: Load average $LOAD em $HOSTNAME ($CPUS CPUs)" | \
          mail -s "ALERTA CARGA: $HOSTNAME" "$ALERT_EMAIL"
    fi
    
    # Verificar memória disponível
    FREE_MEM=$(free -m | awk '/^Mem:/{print $4}')
    if [ "$FREE_MEM" -lt 200 ]; then
        echo "ALERTA: Apenas ${FREE_MEM}MB de RAM livre em $HOSTNAME" | \
          mail -s "ALERTA MEMÓRIA: $HOSTNAME" "$ALERT_EMAIL"
    fi

    Centralizar logs com journald + filtros

    journald centraliza todos os logs do sistema. Configure persistência e filtros úteis:

    bash
    # /etc/systemd/journald.conf — persistir logs entre reinicializações
    [Journal]
    Storage=persistent
    Compress=yes
    SystemMaxUse=500M        # máximo 500MB de logs
    SystemKeepFree=100M
    
    systemctl restart systemd-journald
    
    # Queries úteis de segurança
    # Falhas de autenticação nas últimas 24h
    journalctl --since "24 hours ago" | grep -i "authentication failure|failed password"
    
    # Todos os sudo usados hoje
    journalctl --since today -u sudo
    
    # Logs do Docker nas últimas 2h
    journalctl --since "2 hours ago" -u docker
    
    # Exportar logs para arquivo (backup ou análise offline)
    journalctl --since "$(date +%Y-%m-01)" --until "$(date +%Y-%m-%d)" \
      -o json-pretty > /opt/backup/logs/system-$(date +%Y-%m).json

    $ 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