ClamAV — свободный антивирусный движок с открытым исходным кодом для обнаружения вредоносных программ, вирусов и фишинговых файлов. Основное применение на серверах — проверка файлов, загружаемых пользователями, и сканирование почтовых вложений. Разработан Tomasz Kojm, с 2007 года поддерживается Cisco.
Как работает
ClamAV сканирует файлы, сравнивая их с базой сигнатур (файлы .cvd и .cld). База содержит 8+ миллионов сигнатур вирусов, руткитов, троянов, фишинговых документов. Обновление базы — через freshclam, запускаемый по cron несколько раз в сутки.
Сканирование выполняется двумя инструментами: clamscan — одноразовое сканирование, clamdscan — клиент для демона clamd. Демон держит базу в памяти, что ускоряет сканирование в 10-20 раз по сравнению с каждый раз перечитывающим базу clamscan.
Установка и настройка
# Ubuntu/Debian
apt install clamav clamav-daemon
# Обновить базы сигнатур
freshclam
# Сканирование директории
clamscan -r /var/www/uploads/ --infected --remove
# Демон для постоянного сканирования
systemctl enable clamav-daemon
systemctl start clamav-daemon
# Сканирование через демон (быстрее)
clamdscan /var/www/uploads/new_file.pdf
История
ClamAV создан Tomasz Kojm в 2002 году как антивирус для Unix-систем. В 2004 году Sourcefire (впоследствии поглощённая Cisco) сделала ClamAV коммерческим проектом с открытым кодом. Долгое время ClamAV был единственным полноценным open-source антивирусом для Linux-серверов. В 2019 году Cisco передала управление проектом некоммерческой организации ClamAV.org.
Интеграция с почтовыми серверами
Основное применение ClamAV — сканирование почтовых вложений. ClamSMTP и Amavisd-new интегрируют ClamAV с Exim и Postfix. Все вложения проверяются перед доставкой в почтовый ящик. Заражённые письма помещаются в карантин или удаляются.
Для загрузок файлов на сайте: ClamAV через PHP-расширение или скрипт-обёртку сканирует каждый загружаемый файл. WordPress-плагины типа Anti-Malware Security интегрируются с ClamAV через clamdscan.
На что обращать внимание
ClamAV потребляет 500+ MB RAM при загруженной базе — на маленьких VPS (1 GB RAM) это критично. Оптимизация: уменьшить базу через ConcurrentDatabaseReload no и DatabaseDirectory на быстрый диск. Detection rate у ClamAV ниже коммерческих антивирусов — используйте как дополнительный, а не единственный уровень защиты. Обновляйте базы минимум раз в сутки.
Автоматизация сканирования
Скрипт для ежедневного сканирования загрузок через cron:
#!/bin/bash
# /etc/cron.daily/clamav-scan
SCAN_DIR="/var/www/uploads"
LOG_FILE="/var/log/clamav-scan.log"
DATE=$(date +%Y-%m-%d)
clamdscan --infected --remove $SCAN_DIR >> $LOG_FILE 2>&1
if [ $? -eq 1 ]; then
echo "ClamAV нашёл вирусы в $SCAN_DIR - $DATE" | mail -s "ALERT: Virus found" admin@example.com
fi
Режим On-Access сканирования (через clamonacc) проверяет файлы при записи в реальном времени без cron. Требует ядро с поддержкой fanotify. Потребление CPU выше, но заражённый файл обнаруживается немедленно.
Интеграция с веб-загрузками
PHP-пример сканирования до сохранения файла:
$tmpFile = $_FILES['upload']['tmp_name'];
$result = shell_exec("clamdscan --no-summary " . escapeshellarg($tmpFile));
if (strpos($result, 'Infected files: 1') !== false) {
die('Файл заражён');
}
Для высоконагруженных сайтов с большим объёмом загрузок используйте очередь через Redis: файл сохраняется во временную директорию, задача сканирования добавляется в очередь, результат проверяется асинхронно.