FSociety.pt

Infraestrutura Empresarial Segura | Four-Legged Firewall

View on GitHub

🦠 Antivírus ClamAV

Proteção antivírus integrada para deteção de malware e vírus em emails


📋 Índice

  1. Sobre o ClamAV
  2. Integração com Mailcow
  3. Atualizações de Assinaturas
  4. Monitorização e Logs
  5. Configuração Avançada
  6. Testes e Verificação
  7. Troubleshooting

🛡️ Sobre o ClamAV

ClamAV (Clam AntiVirus) é um motor antivírus open-source usado para detetar trojans, vírus, malware e outras ameaças.

Características

Característica Descrição
Versão Latest (via ghcr.io/mailcow/clamd:1.71)
Base de Dados Main, Daily, Bytecode signatures
Engine Libclamav
Performance Scan rápido, baixo uso de CPU
Atualizações Automáticas via freshclam
Formato Emails, anexos, arquivos comprimidos

Arquitetura

┌─────────────────────────────────────────────────┐
│            POSTFIX (Recebe Email)               │
└────────────────┬────────────────────────────────┘
                 │
                 ▼
┌─────────────────────────────────────────────────┐
│               RSPAMD                            │
│      (Orchestração Anti-spam/Vírus)             │
└────────────────┬────────────────────────────────┘
                 │
                 ▼
┌─────────────────────────────────────────────────┐
│              CLAMD (ClamAV Daemon)              │
│  ┌──────────────┐  ┌──────────────┐            │
│  │  Main.cvd    │  │   Daily.cvd  │            │
│  │ (Signatures) │  │  (Updates)   │            │
│  └──────────────┘  └──────────────┘            │
│  ┌──────────────┐  ┌──────────────┐            │
│  │ Bytecode.cvd │  │   Custom     │            │
│  │  (Advanced)  │  │ Signatures   │            │
│  └──────────────┘  └──────────────┘            │
│                                                 │
│  Scan Result: CLEAN / VIRUS FOUND               │
└────────────────┬────────────────────────────────┘
                 │
      ┌──────────┴──────────┐
      ▼                     ▼
┌──────────┐          ┌──────────┐
│ DELIVER  │          │ QUARANTINE│
│          │          │ or REJECT │
└──────────┘          └──────────┘

🔗 Integração com Mailcow

Container ClamAV

# Ver status do container
sudo docker compose ps clamd-mailcow

# Logs em tempo real
sudo docker compose logs -f clamd-mailcow

Integração com Rspamd

O ClamAV é chamado pelo Rspamd para cada email:

# Ver configuração no Rspamd
sudo docker compose exec rspamd-mailcow \
  rspamadm configdump antivirus

Saída esperada:

antivirus {
  clamav {
    servers = "clamd-mailcow:3310";
    symbol = "CLAM_VIRUS";
    type = "clamav";
  }
}

Ação em Caso de Vírus

# Configurar ação no Rspamd
sudo nano /opt/mailcow-dockerized/data/conf/rspamd/local.d/antivirus.conf
clamav {
  # Socket do ClamAV
  servers = "clamd-mailcow:3310";
  
  # Símbolo adicionado se vírus encontrado
  symbol = "CLAM_VIRUS";
  
  # Tipo de scanner
  type = "clamav";
  
  # Timeout
  timeout = 15.0;
  
  # Log pattern
  log_clean = true;
  
  # Ação: reject (rejeitar) ou quarantine
  action = "reject";
}

🔄 Atualizações de Assinaturas

Freshclam - Atualizador Automático

O ClamAV atualiza automaticamente as bases de dados de vírus via freshclam.

# Ver configuração do freshclam
sudo docker compose exec clamd-mailcow cat /etc/clamav/freshclam.conf

Configuração padrão:

# Servidor de updates
DatabaseMirror database.clamav.net

# Frequência de checks
Checks 24

# Diretório das bases de dados
DatabaseDirectory /var/lib/clamav

Forçar Atualização Manual

# Atualizar manualmente
sudo docker compose exec clamd-mailcow freshclam

# Ver resultado
sudo docker compose exec clamd-mailcow freshclam --version

Saída esperada:

ClamAV 1.0.x/xxxx/Mon Dec  2 xx:xx:xx 2025

Ver Versão das Bases de Dados

# Listar ficheiros CVD
sudo docker compose exec clamd-mailcow ls -lh /var/lib/clamav/

# Ver informação detalhada
sudo docker compose exec clamd-mailcow sigtool --info /var/lib/clamav/main.cvd

Ficheiros de assinaturas:

Frequência de Atualizações

Base Frequência Tamanho Aproximado
Main Semanal 100 MB
Daily Diário 1-5 MB
Bytecode Semanal 1 MB

📊 Monitorização e Logs

Health Status

# Verificar health do container
sudo docker compose ps clamd-mailcow

# Deve mostrar: Up, healthy

Logs de Scan

# Ver logs do ClamAV
sudo docker compose logs clamd-mailcow --tail=100

# Filtrar por vírus encontrados
sudo docker compose logs clamd-mailcow | grep "FOUND"

# Ver apenas clean scans
sudo docker compose logs clamd-mailcow | grep "OK"

Exemplo de log limpo:

clamd-mailcow | /tmp/email.eml: OK

Exemplo de vírus encontrado:

clamd-mailcow | /tmp/email.eml: Win.Test.EICAR_HDB-1 FOUND

Estatísticas

# Ver estatísticas via clamdscan
sudo docker compose exec clamd-mailcow clamdscan --version

# Testar conexão ao daemon
sudo docker compose exec clamd-mailcow \
  clamdscan --ping 3 --wait

Integração com Watchdog

O Watchdog do Mailcow monitoriza o ClamAV:

# Ver status no watchdog
curl -s https://mail.fsociety.pt/api/v1/get/status/containers \
  -H "X-API-Key: <api_key>" | jq '.[] | select(.name=="clamd-mailcow")'

⚙️ Configuração Avançada

Limites de Scan

# Editar configuração do ClamAV
sudo nano /opt/mailcow-dockerized/data/conf/clamav/clamd.conf

Parâmetros importantes:

# Tamanho máximo de ficheiro a escanear (50 MB)
MaxFileSize 52428800

# Tamanho máximo de scan (100 MB)
MaxScanSize 104857600

# Máximo de ficheiros em arquivo
MaxFiles 10000

# Recursão em arquivos
MaxRecursion 16

# Timeout de scan (5 minutos)
MaxScanTime 300000

Performance Tuning

# Ajustar recursos no docker-compose.override.yml
sudo nano /opt/mailcow-dockerized/docker-compose.override.yml
version: '2.1'
services:
  clamd-mailcow:
    mem_limit: 2g
    mem_reservation: 1g
    cpus: 1.0

Desativar Tipos de Scan

# Em clamd.conf
ScanPE yes          # Executáveis Windows
ScanELF yes         # Executáveis Linux
ScanOLE2 yes        # Documentos Office
ScanPDF yes         # PDFs
ScanHTML yes        # HTML
ScanMail yes        # Emails
ScanArchive yes     # ZIP, RAR, etc.

🧪 Testes e Verificação

Teste EICAR

EICAR é um ficheiro de teste padrão para antivírus (não é vírus real):

# Criar ficheiro EICAR
echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > /tmp/eicar.com

# Testar scan
sudo docker compose exec clamd-mailcow clamdscan /tmp/eicar.com

Resultado esperado:

/tmp/eicar.com: Win.Test.EICAR_HDB-1 FOUND

----------- SCAN SUMMARY -----------
Infected files: 1
Time: 0.001 sec (0 m 0 s)

Testar via Email

  1. Enviar email de teste com anexo EICAR:
    • De: teste@example.com
    • Para: ryan.barbosa@fsociety.pt
    • Anexo: eicar.com
  2. Verificar rejeição:
# Ver logs do Rspamd
sudo docker compose logs rspamd-mailcow | grep EICAR

Resultado esperado:

rspamd: CLAM_VIRUS(15.00)[eicar.com: Win.Test.EICAR_HDB-1]

Scan de Mailbox Existente

# Escanear mailbox de utilizador
sudo docker compose exec clamd-mailcow \
  clamdscan -r /var/vmail/fsociety.pt/ryan.barbosa/Maildir/

# Scan recursivo de todo o vmail
sudo docker compose exec clamd-mailcow \
  clamdscan -r /var/vmail/

🔧 Troubleshooting

ClamAV Não Inicia

Problema: Container em loop de restart

# Ver logs de erro
sudo docker compose logs clamd-mailcow --tail=50

# Comum: Memória insuficiente

Solução:

# Aumentar RAM da VM ou limitar outros containers
# Mínimo recomendado: 2 GB para ClamAV

Atualizações Falhando

Problema: Freshclam não consegue atualizar

# Ver erro específico
sudo docker compose exec clamd-mailcow freshclam -v

Soluções comuns:

Performance Degradada

Problema: Scans muito lentos

# Ver uso de recursos
sudo docker stats clamd-mailcow

Soluções:

Falsos Positivos

Problema: Email legítimo marcado como vírus

# Ver qual ficheiro foi detetado
sudo docker compose logs rspamd-mailcow | grep CLAM_VIRUS

Solução:

# Criar whitelist (uso com cautela!)
sudo nano /opt/mailcow-dockerized/data/conf/rspamd/local.d/antivirus.conf
# Whitelist de hash SHA256 específico
whitelist {
  "sha256:abc123...";
}

📊 Estatísticas FSociety

Métrica Valor
Container clamd-mailcow
Imagem ghcr.io/mailcow/clamd:1.71
Status Healthy (100%)
RAM Utilizada ~1.5 GB
Assinaturas 8.7M+
Scans Realizados ~19 (desde último restart)
Vírus Encontrados 0
Última Atualização Diária

🎓 Informação Académica

Campo Informação
Instituição ESTG - Instituto Politécnico do Porto
Unidade Curricular Administração de Sistemas II
Ano Letivo 2025/2026
Autores Ryan Barbosa, Hugo Correia, Igor Araújo

**[⬅️ Anterior: Rspamd](/fsociety-infrastructure/08-mailcow/04-rspamd.html)** | **[Índice](/fsociety-infrastructure/08-mailcow/)** | **[Próximo: Webmail ➡️](/fsociety-infrastructure/08-mailcow/06-webmail.html)**

Última atualização: Dezembro 2025