Como Instalar o ClamAV no Linux: Um Guia Técnico Completo
ClamAV é um motor antivírus de código aberto e multiplataforma mantido pela Cisco Talos que deteta vírus, trojans, rootkits, malware e outras ameaças maliciosas. Funciona com um modelo de deteção baseado em assinaturas, suportado por uma base de dados continuamente atualizada (/var/lib/clamav/), e é a solução antivírus padrão de facto para servidores Linux, gateways de correio e ambientes de alojamento web.
Este guia abrange o ciclo de vida completo da instalação: preparação do sistema, instalação de pacotes nas principais distribuições, gestão da base de dados de vírus com freshclam, configuração do daemon, estratégias de análise, gestão de quarentena, automatização com cron e análise em tempo real via clamonacc — incluindo armadilhas de nível de produção que a maioria dos tutoriais omite.
Por que o ClamAV é Importante em Servidores Linux
Os sistemas Linux não são imunes a malware. Embora os exploits direcionados ao Linux sejam menos comuns do que as ameaças para Windows, os servidores que executam aplicações web, retransmissores de correio ou serviços de partilha de ficheiros são vetores ativos de distribuição de malware — mesmo quando o próprio host Linux não é o alvo principal. Um ambiente de VPS Hosting comprometido pode redistribuir silenciosamente ficheiros infetados para utilizadores finais, desencadear a inclusão em listas negras por bases de dados de spam ou servir como ponto de pivô numa cadeia de ataque maior.
O ClamAV resolve isto fornecendo:
- Análise sob demanda para análise agendada ou acionada
- Análise em modo daemon (
clamd) para verificações de alto rendimento e baixa latência - Integração com gateway de correio via
clamsmtp,amavisd-newouMilter - Monitorização do sistema de ficheiros em tempo real via
clamonacc(kernel Linuxfanotify) - Assinaturas de bytecode para deteção heurística além da correspondência de padrões estáticos
Passo 1: Preparar e Atualizar o Seu Sistema
Antes de instalar qualquer pacote, sincronize o seu índice de pacotes e aplique os patches de segurança pendentes. Executar bibliotecas de sistema desatualizadas juntamente com uma ferramenta de segurança cria uma falsa sensação de proteção.
Para Debian/Ubuntu:
sudo apt update && sudo apt upgrade -yPara CentOS/RHEL 7:
sudo yum update -yPara Rocky Linux / AlmaLinux / RHEL 8+:
sudo dnf update -yPara Fedora:
sudo dnf update -yConfirme que as versões do seu kernel e glibc estão atualizadas, pois clamonacc (análise em tempo real) requer kernel 5.1+ para suporte estável de fanotify.
Passo 2: Instalar o ClamAV
O ClamAV está disponível nos repositórios predefinidos de todas as principais distribuições. A distinção principal é se instala apenas o scanner (clamav) ou também o daemon em segundo plano (clamav-daemon / clamd), o que é fortemente recomendado para qualquer servidor em produção.
Para Debian/Ubuntu:
sudo apt install clamav clamav-daemon -yclamav— instalaclamscanefreshclam
clamav-daemon — instala clamd, o daemon de análise persistente que mantém a base de dados de vírus carregada em memória, reduzindo drasticamente a sobrecarga por análise
Para CentOS/RHEL 7 (requer EPEL):
sudo yum install epel-release -y
sudo yum install clamav clamav-update clamav-scanner-systemd clamd -y
Para Rocky Linux / AlmaLinux / RHEL 8+ (requer EPEL):
sudo dnf install epel-release -y
sudo dnf install clamav clamav-update clamd -y
Para Fedora:
sudo dnf install clamav clamav-update clamd -y
Localizações dos binários após a instalação para verificar:
Binário
Caminho
Finalidade
clamscan
/usr/bin/clamscan
Scanner CLI sob demanda
clamd
/usr/sbin/clamd
Daemon de análise em segundo plano
freshclam
/usr/bin/freshclam
Atualizador da base de dados de vírus
clamdscan
/usr/bin/clamdscan
Cliente que delega para clamd
clamonacc
/usr/sbin/clamonacc
Scanner de acesso em tempo real
Passo 3: Atualizar a Base de Dados de Assinaturas de Vírus
A capacidade de deteção do ClamAV depende inteiramente da atualidade da sua base de dados de assinaturas. A base de dados reside em /var/lib/clamav/ e consiste em vários ficheiros: main.cvd, daily.cvd (ou .cld) e bytecode.cvd.
Parar o Daemon Antes da Primeira Atualização (Debian/Ubuntu)
Em sistemas Debian/Ubuntu, clamav-freshclam.service é executado automaticamente após a instalação e bloqueia o diretório da base de dados. Se tentar executar freshclam manualmente enquanto este serviço está ativo, encontrará um conflito de bloqueio. Pare-o primeiro:
sudo systemctl stop clamav-freshclam
sudo freshclam
sudo systemctl start clamav-freshclam
Em CentOS/RHEL/Rocky/Alma:
sudo freshclam
Saída esperada numa atualização bem-sucedida:
ClamAV update process started at ...
daily.cvd updated (version: 27xxx, sigs: xxxxxxx, ...)
main.cvd is up to date
bytecode.cvd is up to date
Configurar Atualizações Automáticas da Base de Dados
freshclam é controlado por /etc/clamav/freshclam.conf. Diretivas principais a rever:
sudo nano /etc/clamav/freshclam.conf
Parâmetros críticos:
Checks 24 — número de verificações de atualização por dia (predefinição: 12 em algumas distribuições)
DatabaseMirror database.clamav.net — mirror oficial; não altere a menos que utilize um mirror privado
NotifyClamd /etc/clamav/clamd.conf — instrui freshclam a sinalizar clamd após uma atualização para que o daemon recarregue as assinaturas sem reiniciar
Passo 4: Configurar e Iniciar o Daemon ClamAV
O daemon clamd mantém a base de dados completa de vírus residente em RAM (tipicamente 500 MB–1,2 GB dependendo da versão da base de dados). Isto elimina o custo de arranque de vários segundos do clamscan, tornando-o essencial para qualquer ambiente que realize análises frequentes ou simultâneas.
Debian/Ubuntu
sudo systemctl start clamav-daemon
sudo systemctl enable clamav-daemon
sudo systemctl status clamav-daemon
CentOS/RHEL 7
No RHEL 7, a unidade de serviço chama-se clamd@scan, referenciando o ficheiro de configuração /etc/clamd.d/scan.conf:
sudo systemctl start clamd@scan
sudo systemctl enable clamd@scan
Rocky Linux / AlmaLinux / RHEL 8+
sudo systemctl start clamd@scan
sudo systemctl enable clamd@scan
Parâmetros Principais de clamd.conf
A configuração do daemon reside em /etc/clamav/clamd.conf (Debian/Ubuntu) ou /etc/clamd.d/scan.conf (família RHEL). Reveja estas diretivas:
sudo nano /etc/clamav/clamd.conf
Definições importantes:
LocalSocket /run/clamav/clamd.ctl — caminho do socket Unix utilizado por clamdscan; certifique-se de que corresponde à configuração do seu cliente
MaxFileSize 100M — tamanho máximo de ficheiro a analisar; aumente para servidores de correio que lidam com anexos grandes
MaxScanSize 400M — dados máximos analisados por ficheiro após descompressão
StreamMaxLength 100M — relevante para análise baseada em milter/stream
User clamav — o daemon é executado como utilizador clamav; certifique-se de que este utilizador tem acesso de leitura aos diretórios que pretende analisar
LogFile /var/log/clamav/clamd.log — ative o registo persistente para trilhos de auditoria
Armadilha crítica: Se clamd for executado como utilizador clamav e analisar /home/user/uploads/, o utilizador clamav deve ter permissões de leitura nesse caminho. Esquecer isto resulta em falhas silenciosas de análise — clamd reportará erros de “Acesso negado” no seu registo em vez de retornar um veredicto limpo/infetado.
Passo 5: Executar Análises com clamscan e clamdscan
Análise Sob Demanda com clamscan
clamscan é o scanner autónomo. Carrega a base de dados do disco em cada invocação, tornando-o mais lento mas independente do daemon.
Analisar um diretório específico recursivamente:
clamscan -r /path/to/directory
Analisar e exibir apenas ficheiros infetados:
clamscan -r --infected /path/to/directory
Analisar com saída detalhada e registar resultados:
sudo clamscan -r --infected --log=/var/log/clamav/manual_scan.log /var/www/html
Mover ficheiros infetados para um diretório de quarentena:
sudo clamscan -r --move=/var/quarantine /path/to/directory
Remover ficheiros infetados automaticamente (utilize com precaução em produção):
sudo clamscan -r --remove /path/to/directory
Analisar todo o sistema de ficheiros (espere um tempo de execução significativo em discos grandes):
sudo clamscan -r --infected --exclude-dir="^/sys" --exclude-dir="^/proc" --exclude-dir="^/dev" /
Excluir /sys, /proc e /dev é obrigatório — analisar estes pseudo-sistemas de ficheiros produz erros falsos e pode causar bloqueios.
Análise de Alto Desempenho com clamdscan
Quando clamd está em execução, utilize clamdscan em vez de clamscan. Submete pedidos de análise ao daemon já carregado através do socket Unix, tornando-o ordens de magnitude mais rápido para análises repetidas ou em massa.
clamdscan --fdpass /path/to/directory
O sinalizador --fdpass passa o descritor de ficheiro diretamente para clamd, contornando problemas de permissão que surgem quando o utilizador do daemon não consegue ler o caminho de destino diretamente.
Análise multi-thread com clamdscan:
clamdscan --multiscan --fdpass /var/www/html
--multiscan instrui clamd a analisar ficheiros em paralelo usando o seu conjunto de threads, reduzindo significativamente o tempo de relógio em sistemas multi-core.
clamscan vs. clamdscan: Comparação de Desempenho
Atributo
`clamscan`
`clamdscan`
Carregamento da base de dados por análise
Sim (arranque lento)
Não (daemon mantém a BD em RAM)
Tempo de arranque típico
5–30 segundos
Menos de 1 segundo
Requer clamd em execução
Não
Sim
Análise paralela
Não
Sim (--multiscan)
Melhor caso de uso
Análises manuais pontuais
Análises automatizadas, frequentes ou em massa
Modelo de permissões
Executa como utilizador invocante
Executa como utilizador clamav (utilize --fdpass)
Passo 6: Automatizar Análises com Cron
Para proteção contínua, agende análises regulares usando cron. O exemplo seguinte analisa a raiz web diariamente às 02:00 e regista os resultados com um carimbo de data/hora.
sudo crontab -e
Adicione a seguinte entrada:
0 2 * * * /usr/bin/clamdscan --multiscan --fdpass --log=/var/log/clamav/daily_scan_$(date +%Y%m%d).log /var/www/html
Cron de nível de produção com alertas por e-mail em caso de infeção:
0 2 * * * /usr/bin/clamscan -r --infected /var/www/html 2>&1 | grep -v "^$" | mail -s "ClamAV Daily Scan Report - $(hostname)" admin@yourdomain.com
Isto encaminha a saída não vazia diretamente para um destinatário de correio, garantindo que só recebe alertas quando algo é encontrado ou ocorre um erro. Certifique-se de que mailutils ou postfix está configurado no servidor.
Rotacione os registos de análise para evitar crescimento ilimitado do disco:
sudo nano /etc/logrotate.d/clamav-scan
/var/log/clamav/daily_scan_*.log {
weekly
rotate 4
compress
missingok
notifempty
}
Passo 7: Análise de Acesso em Tempo Real com clamonacc
clamonacc é o componente de análise de acesso do ClamAV, introduzido como funcionalidade estável no ClamAV 0.102. Integra-se no subsistema fanotify do kernel Linux para interceptar eventos de abertura e fecho de ficheiros, analisando-os antes de serem acedidos.
Requisitos:
Kernel Linux 5.1 ou posterior (para fanotify com FAN_OPEN_EXEC_PERM)
ClamAV 0.102+
clamd deve estar em execução
Privilégios de root
Ativar a Análise de Acesso em clamd.conf
sudo nano /etc/clamav/clamd.conf
Adicione ou descomente:
OnAccessIncludePath /home
OnAccessIncludePath /var/www/html
OnAccessPrevention yes
OnAccessExcludeUname clamav
OnAccessPrevention yes — bloqueia o acesso a ficheiros infetados em tempo real (modo de negação); defina como no para modo apenas de deteção
OnAccessExcludeUname clamav — impede que o próprio clamd desencadeie ciclos de análise recursivos
Iniciar clamonacc
sudo clamonacc --log=/var/log/clamav/clamonacc.log --daemonize
Para executá-lo como serviço systemd, crie um ficheiro de unidade:
sudo nano /etc/systemd/system/clamonacc.service
[Unit]
Description=ClamAV On-Access Scanner
Requires=clamav-daemon.service
After=clamav-daemon.service
[Service]
Type=simple
ExecStart=/usr/sbin/clamonacc --log=/var/log/clamav/clamonacc.log --foreground
Restart=on-failure
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now clamonacc
Armadilha conhecida: Em servidores de alto rendimento (por exemplo, endpoints de upload de ficheiros muito utilizados), OnAccessPrevention yes pode introduzir latência de I/O mensurável. Faça benchmark da sua carga de trabalho antes de ativar o modo de prevenção em produção. Considere limitar OnAccessIncludePath ao caminho estritamente necessário em vez de diretórios amplos como /.
Passo 8: Integrar o ClamAV com Servidores de Correio
O caso de uso de produção mais generalizado do ClamAV é a análise de gateway de correio. Se estiver a executar um servidor de correio no seu VPS Hosting ou infraestrutura de Servidores Dedicados, integrar o ClamAV com o seu MTA é uma camada de segurança crítica.
Stacks de integração comuns:
Postfix + amavisd-new + ClamAV — amavisd-new atua como filtro de conteúdo entre o Postfix e o ClamAV, também gerindo o SpamAssassin
Postfix + clamsmtp — proxy leve no estilo milter
Exim + ClamAV — a diretiva nativa av_scanner do Exim suporta clamd diretamente via socket
Exemplo: integração clamd do Exim em /etc/exim4/exim4.conf:
av_scanner = clamd:/run/clamav/clamd.ctl
Esta única diretiva encaminha todo o conteúdo das mensagens através da instância clamd em execução antes da entrega. Combine isto com uma configuração adequada de Alojamento de E-mail para garantir que a sua infraestrutura de correio está totalmente protegida.
Resolução de Problemas Comuns do ClamAV
freshclam Falha com “bloqueado por outro processo”
sudo systemctl stop clamav-freshclam
sudo rm -f /var/lock/clamav/freshclam.lock
sudo freshclam
sudo systemctl start clamav-freshclam
clamd Falha ao Iniciar: “ERRO: Não é possível abrir/analisar o ficheiro de configuração”
Verifique o caminho e a sintaxe do ficheiro de configuração:
sudo clamd --config-file=/etc/clamav/clamd.conf --debug 2>&1 | head -50
Utilização Elevada de Memória
clamd consome tipicamente 500 MB–1,2 GB de RAM com a base de dados completa carregada. Em sistemas com restrições de memória, considere:
Definir MaxThreads 2 em clamd.conf para limitar a concorrência
Usar clamscan sem o daemon para análises pouco frequentes
Atualizar para um plano com RAM suficiente — um plano de VPS Hosting com pelo menos 2 GB de RAM é o mínimo prático para executar clamd juntamente com uma stack web
A Análise Retorna “Acesso negado” para Ficheiros
O daemon clamd é executado como utilizador clamav. Conceda acesso de leitura:
sudo setfacl -R -m u:clamav:rX /path/to/scan
Ou utilize clamdscan --fdpass para passar descritores de ficheiro do contexto do utilizador invocante.
Falsos Positivos
O ClamAV ocasionalmente sinaliza ficheiros legítimos, particularmente arquivos comprimidos ou certos frameworks PHP. Para incluir na lista branca um ficheiro conhecido como seguro por hash:
sigtool --md5 /path/to/legitimate/file >> /var/lib/clamav/whitelist.fp
Reinicie clamd após modificar ficheiros .fp.
ClamAV em Alojamento Partilhado vs. VPS vs. Servidor Dedicado
O modelo de implementação afeta significativamente como o ClamAV deve ser configurado:
Ambiente
Modo Recomendado
Notas
Alojamento Web Partilhado
clamscan sob demanda via cron
Sem acesso root; modo daemon indisponível
VPS (2–4 GB RAM)
Daemon clamd + cron clamdscan
Equilíbrio entre desempenho e restrições de memória
Servidor Dedicado
clamd + clamonacc + integração de correio
Conjunto completo de funcionalidades; sem compromisso de recursos
Nó GPU/alto desempenho computacional
Apenas daemon clamd
Evite a sobrecarga de I/O do clamonacc em pipelines de dados
Para ambientes que requerem máximo rendimento e controlo total sobre as ferramentas de segurança, os Servidores Dedicados fornecem a capacidade de hardware para executar clamd, clamonacc e análise de correio simultaneamente sem contenção de recursos.
Matriz de Decisão Técnica e Principais Conclusões
Antes de implementar o ClamAV, valide cada um dos seguintes pontos:
Versão do kernel — execute uname -r; confirme 5.1+ se clamonacc for necessário
RAM disponível — clamd necessita de 1–1,5 GB; planeie adequadamente antes de ativar o daemon
Automatização de freshclam — confirme que clamav-freshclam.service está ativado e que NotifyClamd está definido em freshclam.confclamav consegue ler todos os alvos de análise; utilize --fdpass com clamdscan onde as ACLs são impraticáveis/proc, /sys, /dev das análises recursivaslogrotate para todos os ficheiros de registo do ClamAV antes de ativar tarefas cron diáriasOnAccessPrevention — teste em modo apenas de deteção (no) antes de mudar para modo de bloqueio (yes) em sistemas de produçãoamavisd-new ou diretiva nativa av_scanner do MTA, não apenas análises periódicas de ficheiros/var/quarantine com a propriedade adequada antes de usar --move; clamscan não o criará automaticamente.fp e reveja os registos de análise após cada atualização da base de dados para detetar regressõesPerguntas Frequentes
O ClamAV fornece proteção em tempo real no Linux por predefinição?
Não. Após a instalação, o ClamAV opera apenas em modo sob demanda. A proteção em tempo real requer a ativação explícita de clamonacc com as diretivas OnAccessIncludePath e OnAccessPrevention em clamd.conf, além de um kernel que suporte fanotify (5.1+).
Qual é a diferença entre clamscan e clamdscan?
clamscan é um binário autónomo que carrega a base de dados de vírus do disco em cada invocação, resultando num atraso de arranque de 5–30 segundos. clamdscan é um cliente leve que submete tarefas de análise ao daemon clamd já em execução, que mantém a base de dados em RAM — tornando-o significativamente mais rápido para análises repetidas ou automatizadas.
Quanta RAM necessita o daemon do ClamAV?
clamd com a base de dados completa atual (main + daily + bytecode) requer tipicamente entre 700 MB e 1,2 GB de memória residente. Em sistemas com menos de 2 GB de RAM total, executar o daemon juntamente com um servidor web ou base de dados pode causar pressão de memória. Utilize clamscan sem o daemon em instâncias com restrições de memória.
O ClamAV consegue analisar arquivos comprimidos e anexos de e-mail?
Sim. O ClamAV descompacta e analisa nativamente ZIP, RAR, 7z, TAR, GZIP, BZIP2, CAB e muitos outros formatos de arquivo, bem como documentos OLE2 (Microsoft Office), ficheiros PDF e executáveis ELF/PE. As diretivas MaxScanSize e MaxFileSize em clamd.conf controlam os limites de profundidade e tamanho para a análise de arquivos.
Por que freshclam reporta “bloqueado por outro processo” imediatamente após a instalação?
No Debian/Ubuntu, o serviço systemd clamav-freshclam inicia automaticamente após a instalação do pacote e mantém um bloqueio exclusivo no diretório da base de dados. Executar freshclam manualmente enquanto este serviço está ativo causa um conflito de bloqueio. Pare o serviço com sudo systemctl stop clamav-freshclam, execute a atualização manual e depois reinicie o serviço.
