7.2 KiB
7.2 KiB
ClamAV Integration with Wazuh
Integration guide for deploying ClamAV antivirus with Wazuh monitoring stack.
Overview
ClamAV scans files and containers for malware, while Wazuh collects and analyzes ClamAV logs for:
- Real-time malware detection alerts
- Ransomware detection
- Signature database update status
- Scan statistics and quarantine actions
Architecture
┌─────────────────────────────────────┐
│ ClamAV Container (clamav) │
│ • Scans Docker containers/files │
│ • Generates logs: clamav.log │
│ • Freshclam updates signatures │
└──────────────┬──────────────────────┘
│ (logs volume)
↓
┌─────────────────────────────────────┐
│ Wazuh Manager (wazuh.manager) │
│ • Collects ClamAV logs │
│ • Parses with decoders │
│ • Matches detection rules │
│ • Sends alerts to indexer │
└──────────────┬──────────────────────┘
│ (syslog format)
↓
┌─────────────────────────────────────┐
│ Wazuh Dashboard (UI) │
│ • Display malware detections │
│ • Show scan results │
│ • Alert severity levels │
└─────────────────────────────────────┘
Deployment
1. Add ClamAV to docker-compose
The following service has been added to docker-compose-security.yml:
clamav:
image: clamav/clamav:stable
container_name: clamav
restart: unless-stopped
environment:
- FRESHCLAM_CHECKS=24
- CLAMD_SCAN_MAX_FILESIZE=100M
volumes:
- clamav_data:/var/lib/clamav # Signature database
- clamav_logs:/var/log/clamav # Log output
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
- monitoring_net
2. Deploy ClamAV
cd /home/ubuntu/docker
docker compose -f docker-compose-security.yml up -d clamav
# Verify deployment
docker ps | grep clamav
docker logs clamav
3. Wazuh Configuration
Log Collection
File: wazuh/config/wazuh_manager/localfile_clamav.conf
Configures Wazuh to collect:
clamav.log— Main scanner logsfreshclam.log— Signature update logsalert.log— High-priority detections
Detection Rules
File: wazuh/config/wazuh_manager/rules/clamav_rules.xml
Key rules (level/priority):
| Rule ID | Level | Trigger | Example |
|---|---|---|---|
| 100501 | 15 | FOUND/Infected | Malware detected |
| 100502 | 12 | Trojan/PUA | Potentially unwanted app |
| 100503 | 15 | .Virus/Worm | Classic virus detection |
| 100504 | 15 | Ransomware | Ransomware families |
| 100505 | 3 | Update successful | Signature DB refreshed |
| 100506 | 10 | Update failed | Download/connection error |
| 100507 | 8 | Daemon error | ClamAV process error |
| 100515 | 16 | Multiple hits in 1h | Possible outbreak |
Log Format
ClamAV Log Example
Jun 10 14:35:22 clamav clamd[1234]: /var/data/suspect.exe: Trojan.Win32.Generic!c FOUND
Jun 10 14:35:25 clamav freshclam[5678]: ClamAV update completed. 1 databases updated.
Jun 10 14:36:01 clamav clamd[1234]: Scanning started
Jun 10 14:36:45 clamav clamd[1234]: Scanning finished. 2 files scanned, 0 threats found
Wazuh Alert Example
{
"timestamp": "2026-06-10T14:35:22.000Z",
"rule": {
"id": "100501",
"level": 15,
"description": "ClamAV: Malware detected"
},
"data": {
"srcfile": "/var/data/suspect.exe",
"alert": "Trojan.Win32.Generic!c FOUND"
},
"groups": ["malware", "clamav", "infection"]
}
Operations
Check ClamAV Status
# Container status
docker ps | grep clamav
# View logs
docker logs clamav
# Manual scan
docker exec clamav clamscan -r /var/data
Update Signatures
ClamAV automatically updates signatures (configured via FRESHCLAM_CHECKS=24).
Manual update:
docker exec clamav freshclam
View Wazuh Alerts
- Access Wazuh Dashboard:
https://10.0.0.2 - Go to: Security Events → Search
- Filter by:
rule.id: 100501— Malware detectionsrule.id: 100504— Ransomware alertsrule.groups: malware— All malware-related events
Query via API
# Get recent malware detections
curl -k -H "Authorization: Bearer YOUR_TOKEN" \
"https://monitoring-uber:55000/api/v0/search?q=rule.id:100501&pretty"
# Get ClamAV scan statistics
curl -k -H "Authorization: Bearer YOUR_TOKEN" \
"https://monitoring-uber:55000/api/v0/search?q=group:clamav&pretty"
Tuning & Optimization
Scan Performance
Adjust scan parameters in docker-compose environment:
environment:
- CLAMD_SCAN_MAX_FILESIZE=100M # Max file size to scan
- CLAMD_MAX_SCAN_SIZE=200M # Max total scan size
- CLAMD_SCAN_PE_PLUS=yes # Enhanced PE detection
- CLAMD_SCAN_ARCHIVE=yes # Scan inside archives
- CLAMD_MAX_FILES=10000 # Max files to scan
Update Frequency
Default: 24 checks per day (every hour)
Change via:
environment:
- FRESHCLAM_CHECKS=48 # 2-hourly updates
Alert Severity
Adjust rule levels in clamav_rules.xml based on your risk tolerance:
- Level 3-6: Info/Low
- Level 8-10: Medium
- Level 12-15: High
- Level 16+: Critical/Outbreak
Troubleshooting
ClamAV Not Scanning
# Check daemon is running
docker exec clamav ps aux | grep clamd
# Check signatures are loaded
docker exec clamav clamscan --version
# Manually scan
docker exec clamav clamscan /var/data
Signature Updates Failing
# Check freshclam logs
docker logs clamav | grep freshclam
# Manual update with verbose output
docker exec clamav freshclam -v
# Check internet connectivity
docker exec clamav wget https://cvd.clamav.net
Wazuh Not Receiving Logs
# Check logs are being generated
docker exec clamav tail -f /var/log/clamav/clamav.log
# Check Wazuh log collection
docker exec wazuh_manager tail -f /var/ossec/logs/ossec.log | grep clamav
# Verify rules loaded
docker exec wazuh_manager cat /var/ossec/etc/rules/clamav_rules.xml | head -10
Files Modified/Created
| File | Purpose |
|---|---|
docker-compose-security.yml |
Added ClamAV service + volumes |
wazuh/config/wazuh_manager/localfile_clamav.conf |
Log collection config |
wazuh/config/wazuh_manager/rules/clamav_rules.xml |
Malware detection rules |
CLAMAV_INTEGRATION.md |
This documentation |
Next Steps
- Deploy:
docker compose up -d clamav - Wait for initial database download (5-10 minutes)
- Monitor logs:
docker logs -f clamav - Check Wazuh dashboard for alerts
- Configure scan schedules/locations as needed
- Set up active response (optional) for automatic quarantine