ClamAV: detectar malware na VPS Linux
Linux tem boa reputação de segurança, mas VPS comprometidas por malware são mais comuns do que se pensa — especialmente quando hospedam uploads de usuários, correm scripts de terceiros ou têm serviços desatualizados. ClamAV é o antivírus open-source padrão para Linux, com banco de dados de assinaturas atualizado diariamente.
Instalar e configurar o ClamAV
Instalação e configuração inicial no Ubuntu:
# Instalar ClamAV e daemon:
sudo apt install -y clamav clamav-daemon
# Parar o daemon para atualizar as definições:
sudo systemctl stop clamav-freshclam
# Atualizar banco de dados de vírus:
sudo freshclam
# Verificar versão e data das definições:
clamscan --version
# Iniciar o daemon:
sudo systemctl enable clamav-daemon clamav-freshclam
sudo systemctl start clamav-daemon clamav-freshclam
# Verificar status:
sudo systemctl status clamav-daemon
sudo systemctl status clamav-freshclam
# Configurar atualização automática das definições (já vem configurado):
cat /etc/clamav/freshclam.conf | grep -E "^Checks|^UpdateLogFile"
# Checks 24 — atualiza 24 vezes por diaExecutar scans manuais e automáticos
Escanear diretórios e configurar scans periódicos:
# Scan completo do sistema (pode demorar):
sudo clamscan -r / --exclude-dir="^/proc" --exclude-dir="^/sys" \
--exclude-dir="^/dev" -l /var/log/clamav/scan_$(date +%Y%m%d).log
# Scan de diretório específico (uploads de usuários):
sudo clamscan -r /var/www/uploads --log=/var/log/clamav/uploads.log
# Scan rápido (somente arquivos modificados recentemente):
sudo clamscan -r /home /var/www /tmp /var/tmp \
--log=/var/log/clamav/quick_scan.log
# Ver apenas arquivos infectados:
sudo clamscan -r /var/www/uploads --infected --no-summary
# Mover arquivos infectados para quarentena:
sudo clamscan -r /var/www/uploads \
--move=/var/quarantine \
--log=/var/log/clamav/quarantine.log
# Configurar scan automático via cron:
# /etc/cron.d/clamav-scan:
echo "0 2 * * * root clamscan -r /var/www /home /tmp \
--infected --no-summary \
--log=/var/log/clamav/daily_$(date +\%Y\%m\%d).log" \
| sudo tee /etc/cron.d/clamav-scanScan em tempo real de uploads com clamd
Integrar ClamAV com aplicação Node.js para verificar uploads:
# Usando clamscan diretamente na aplicação (mais simples):
# npm install clamscan
import NodeClam from 'clamscan'
const clamScan = await new NodeClam().init({
clamdscan: {
socket: '/var/run/clamav/clamd.ctl', // usar socket Unix para performance
active: true,
},
})
async function verificarArquivo(caminho: string): Promise<boolean> {
const { isInfected, viruses } = await clamScan.isInfected(caminho)
if (isInfected) {
console.error('Arquivo infectado detectado:', caminho, viruses)
// Mover para quarentena ou deletar
return false
}
return true
}
// No handler de upload (Multer + Express):
app.post('/upload', upload.single('arquivo'), async (req, res) => {
const caminhoArquivo = req.file!.path
const seguro = await verificarArquivo(caminhoArquivo)
if (!seguro) {
fs.unlinkSync(caminhoArquivo) // deletar arquivo infectado
return res.status(400).json({ error: 'Arquivo bloqueado por segurança' })
}
// Processar upload...
})Alertas quando malware é detectado
Notificar via Telegram quando um arquivo infectado é encontrado:
#!/bin/bash
# /opt/scripts/clamav-scan-alert.sh
LOG_DIR="/var/log/clamav"
QUARANTINE_DIR="/var/quarantine"
DATE=$(date +%Y%m%d_%H%M)
LOG_FILE="$LOG_DIR/scan_$DATE.log"
TELEGRAM_TOKEN="SEU_TOKEN"
TELEGRAM_CHAT_ID="SEU_CHAT_ID"
mkdir -p "$QUARANTINE_DIR"
# Executar scan:
clamscan -r /var/www /home /tmp /var/tmp \
--infected --no-summary \
--move="$QUARANTINE_DIR" \
--log="$LOG_FILE"
# Verificar se encontrou algo infectado:
INFECTED=$(grep "FOUND" "$LOG_FILE" | wc -l)
if [ "$INFECTED" -gt 0 ]; then
DETALHES=$(grep "FOUND" "$LOG_FILE" | head -10)
curl -s -X POST \
"https://api.telegram.org/bot$TELEGRAM_TOKEN/sendMessage" \
-d "chat_id=$TELEGRAM_CHAT_ID" \
-d "text=🚨 ClamAV detectou $INFECTED arquivo(s) infectado(s) na VPS!%0A%0A$DETALHES"
fi
# Limpar logs antigos (> 30 dias):
find "$LOG_DIR" -name "scan_*.log" -mtime +30 -deleteExclusões e otimização de performance
Excluir diretórios desnecessários e otimizar o scan:
# /etc/clamav/clamd.conf — ajustes de performance:
# (reiniciar clamav-daemon após alterações)
# Excluir diretórios que não precisam ser escaneados:
ExcludePath ^/proc
ExcludePath ^/sys
ExcludePath ^/dev
ExcludePath ^/run
ExcludePath ^/var/lib/docker
ExcludePath ^/var/lib/lxc
# Limite de memória (padrão é muito alto):
MaxScanSize 100M # tamanho máximo de arquivo para escanear
MaxFileSize 25M # pular arquivos maiores que 25MB
MaxRecursion 10 # profundidade de recursão em arquivos compactados
MaxFiles 10000 # máximo de arquivos num arquivo compactado
# Número de threads:
MaxThreads 2 # não usar todos os CPUs (manter servidor responsivo)
# Para scan mais rápido — usar clamdtop para monitorar:
clamdtop$ 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.