15%

Poupe 15% em todos os serviços

Teste as suas habilidades e obtenha Desconto em qualquer plano

Utilizar o código:

Skills
Começar a trabalhar
24.10.2024

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-new ou Milter
  • Monitorização do sistema de ficheiros em tempo real via clamonacc (kernel Linux fanotify)
  • 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 -y

Para CentOS/RHEL 7:

sudo yum update -y

Para Rocky Linux / AlmaLinux / RHEL 8+:

sudo dnf update -y

Para Fedora:

sudo dnf update -y

Confirme 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 -y
  • clamav — instala clamscan e freshclam
  • 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.conf
  • Permissões de socket — verifique que o utilizador clamav consegue ler todos os alvos de análise; utilize --fdpass com clamdscan onde as ACLs são impraticáveis
  • Caminhos de exclusão — exclua sempre /proc, /sys, /dev das análises recursivas
  • Rotação de registos — implemente logrotate para todos os ficheiros de registo do ClamAV antes de ativar tarefas cron diárias
  • OnAccessPrevention — teste em modo apenas de deteção (no) antes de mudar para modo de bloqueio (yes) em sistemas de produção
  • Integração de correio — se executar um servidor de correio, integre via amavisd-new ou diretiva nativa av_scanner do MTA, não apenas análises periódicas de ficheiros
  • Diretório de quarentena — pré-crie /var/quarantine com a propriedade adequada antes de usar --move; clamscan não o criará automaticamente
  • Gestão de falsos positivos — mantenha um ficheiro de lista branca .fp e reveja os registos de análise após cada atualização da base de dados para detetar regressões

Perguntas 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.

15%

Poupe 15% em todos os serviços

Teste as suas habilidades e obtenha Desconto em qualquer plano

Utilizar o código:

Skills
Começar a trabalhar