Как установить ClamAV на Linux: Полное техническое руководство
ClamAV — это кроссплатформенный антивирусный движок с открытым исходным кодом, поддерживаемый Cisco Talos, который обнаруживает вирусы, трояны, руткиты, вредоносное ПО и другие угрозы. Он работает на основе модели обнаружения по сигнатурам, подкреплённой постоянно обновляемой базой данных (/var/lib/clamav/), и является стандартным антивирусным решением де-факто для Linux-серверов, почтовых шлюзов и сред веб-хостинга.
Это руководство охватывает полный жизненный цикл установки: подготовку системы, установку пакетов в основных дистрибутивах, управление базой данных вирусов с помощью freshclam, настройку демона, стратегии сканирования, обработку карантина, автоматизацию через cron и сканирование в реальном времени с помощью clamonacc — включая производственные ошибки, которые большинство руководств упускают.
Почему ClamAV важен на Linux-серверах
Linux-системы не застрахованы от вредоносного ПО. Хотя эксплойты, нацеленные на Linux, встречаются реже, чем угрозы для Windows, серверы, на которых работают веб-приложения, почтовые ретрансляторы или службы обмена файлами, являются активными векторами распространения вредоносного ПО — даже когда сам Linux-хост не является основной целью. Скомпрометированная среда VPS Хостинга может незаметно перераспределять заражённые файлы конечным пользователям, вызывать занесение в чёрные списки спам-баз данных или служить точкой опоры в более масштабной цепочке атак.
ClamAV решает эту проблему, предоставляя:
- Сканирование по запросу для запланированного или инициированного анализа
- Сканирование в режиме демона (
clamd) для высокопроизводительных проверок с низкой задержкой - Интеграцию с почтовым шлюзом через
clamsmtp,amavisd-newилиMilter - Мониторинг файловой системы в реальном времени через
clamonacc(ядро Linuxfanotify) - Байткодовые сигнатуры для эвристического обнаружения, выходящего за рамки статического сопоставления с образцом
Шаг 1: Подготовка и обновление системы
Перед установкой любого пакета синхронизируйте индекс пакетов и примените ожидающие исправления безопасности. Использование устаревших системных библиотек вместе с инструментом безопасности создаёт ложное ощущение защиты.
Для Debian/Ubuntu:
sudo apt update && sudo apt upgrade -yДля CentOS/RHEL 7:
sudo yum update -yДля Rocky Linux / AlmaLinux / RHEL 8+:
sudo dnf update -yДля Fedora:
sudo dnf update -yУбедитесь, что версии ядра и glibc актуальны, так как clamonacc (сканирование в реальном времени) требует ядра 5.1+ для стабильной поддержки fanotify.
Шаг 2: Установка ClamAV
ClamAV доступен в стандартных репозиториях всех основных дистрибутивов. Ключевое различие заключается в том, устанавливаете ли вы только сканер (clamav) или также фоновый демон (clamav-daemon / clamd), что настоятельно рекомендуется для любого производственного сервера.
Для Debian/Ubuntu:
sudo apt install clamav clamav-daemon -yclamav— устанавливаетclamscanиfreshclam
clamav-daemon — устанавливает clamd, постоянный демон сканирования, который хранит базу данных вирусов в памяти, значительно снижая накладные расходы на каждое сканирование
Для CentOS/RHEL 7 (требуется EPEL):
sudo yum install epel-release -y
sudo yum install clamav clamav-update clamav-scanner-systemd clamd -y
Для Rocky Linux / AlmaLinux / RHEL 8+ (требуется EPEL):
sudo dnf install epel-release -y
sudo dnf install clamav clamav-update clamd -y
Для Fedora:
sudo dnf install clamav clamav-update clamd -y
Расположение бинарных файлов после установки для проверки:
Бинарный файл
Путь
Назначение
clamscan
/usr/bin/clamscan
Сканер командной строки по запросу
clamd
/usr/sbin/clamd
Фоновый демон сканирования
freshclam
/usr/bin/freshclam
Обновление базы данных вирусов
clamdscan
/usr/bin/clamdscan
Клиент, делегирующий задачи clamd
clamonacc
/usr/sbin/clamonacc
Сканер с доступом в реальном времени
Шаг 3: Обновление базы данных вирусных сигнатур
Возможности обнаружения ClamAV полностью зависят от актуальности его базы данных сигнатур. База данных хранится в /var/lib/clamav/ и состоит из нескольких файлов: main.cvd, daily.cvd (или .cld) и bytecode.cvd.
Остановите демон перед первым обновлением (Debian/Ubuntu)
В системах Debian/Ubuntu clamav-freshclam.service запускается автоматически после установки и блокирует каталог базы данных. Если вы попытаетесь запустить freshclam вручную, пока эта служба активна, возникнет конфликт блокировки. Сначала остановите её:
sudo systemctl stop clamav-freshclam
sudo freshclam
sudo systemctl start clamav-freshclam
На CentOS/RHEL/Rocky/Alma:
sudo freshclam
Ожидаемый вывод при успешном обновлении:
ClamAV update process started at ...
daily.cvd updated (version: 27xxx, sigs: xxxxxxx, ...)
main.cvd is up to date
bytecode.cvd is up to date
Настройка автоматического обновления базы данных
freshclam управляется через /etc/clamav/freshclam.conf. Ключевые директивы для проверки:
sudo nano /etc/clamav/freshclam.conf
Критические параметры:
Checks 24 — количество проверок обновлений в день (по умолчанию: 12 в некоторых дистрибутивах)
DatabaseMirror database.clamav.net — официальное зеркало; не изменяйте, если не используете частное зеркало
NotifyClamd /etc/clamav/clamd.conf — указывает freshclam отправить сигнал clamd после обновления, чтобы демон перезагрузил сигнатуры без перезапуска
Шаг 4: Настройка и запуск демона ClamAV
Демон clamd хранит полную базу данных вирусов в RAM (обычно 500 МБ–1,2 ГБ в зависимости от версии базы данных). Это устраняет многосекундные затраты на запуск clamscan, что делает его незаменимым для любой среды, выполняющей частые или параллельные сканирования.
Debian/Ubuntu
sudo systemctl start clamav-daemon
sudo systemctl enable clamav-daemon
sudo systemctl status clamav-daemon
CentOS/RHEL 7
На RHEL 7 служба называется clamd@scan и ссылается на файл конфигурации /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
Ключевые параметры clamd.conf
Конфигурация демона находится в /etc/clamav/clamd.conf (Debian/Ubuntu) или /etc/clamd.d/scan.conf (семейство RHEL). Проверьте следующие директивы:
sudo nano /etc/clamav/clamd.conf
Важные настройки:
LocalSocket /run/clamav/clamd.ctl — путь к Unix-сокету, используемому clamdscan; убедитесь, что он соответствует конфигурации вашего клиента
MaxFileSize 100M — максимальный размер файла для сканирования; увеличьте для почтовых серверов, обрабатывающих большие вложения
MaxScanSize 400M — максимальный объём данных, сканируемых в файле после распаковки
StreamMaxLength 100M — актуально для сканирования на основе milter/потока
User clamav — демон работает от имени пользователя clamav; убедитесь, что этот пользователь имеет доступ на чтение к каталогам, которые вы намерены сканировать
LogFile /var/log/clamav/clamd.log — включите постоянное ведение журнала для аудиторских следов
Критическая ошибка: Если clamd работает от имени пользователя clamav и вы сканируете /home/user/uploads/, пользователь clamav должен иметь права на чтение этого пути. Если об этом забыть, сканирование будет завершаться с ошибкой без каких-либо явных признаков — clamd будет записывать ошибки «Access denied» в журнал вместо возврата вердикта «чисто/заражено».
Шаг 5: Запуск сканирования с помощью clamscan и clamdscan
Сканирование по запросу с помощью clamscan
clamscan — это автономный сканер. При каждом вызове он загружает базу данных с диска, что делает его медленнее, но независимым от демона.
Рекурсивное сканирование указанного каталога:
clamscan -r /path/to/directory
Сканирование с отображением только заражённых файлов:
clamscan -r --infected /path/to/directory
Сканирование с подробным выводом и записью результатов в журнал:
sudo clamscan -r --infected --log=/var/log/clamav/manual_scan.log /var/www/html
Перемещение заражённых файлов в каталог карантина:
sudo clamscan -r --move=/var/quarantine /path/to/directory
Автоматическое удаление заражённых файлов (используйте с осторожностью в производственной среде):
sudo clamscan -r --remove /path/to/directory
Сканирование всей файловой системы (ожидайте значительного времени выполнения на больших дисках):
sudo clamscan -r --infected --exclude-dir="^/sys" --exclude-dir="^/proc" --exclude-dir="^/dev" /
Исключение /sys, /proc и /dev обязательно — сканирование этих псевдофайловых систем приводит к ложным ошибкам и может вызвать зависания.
Высокопроизводительное сканирование с помощью clamdscan
Когда clamd запущен, используйте clamdscan вместо clamscan. Он отправляет запросы на сканирование уже загруженному демону через Unix-сокет, что делает его на порядки быстрее при повторных или массовых сканированиях.
clamdscan --fdpass /path/to/directory
Флаг --fdpass передаёт файловый дескриптор напрямую в clamd, обходя проблемы с правами доступа, возникающие когда пользователь демона не может напрямую прочитать целевой путь.
Многопоточное сканирование с clamdscan:
clamdscan --multiscan --fdpass /var/www/html
--multiscan указывает clamd сканировать файлы параллельно, используя пул потоков, что значительно сокращает общее время выполнения на многоядерных системах.
Сравнение производительности clamscan и clamdscan
Характеристика
`clamscan`
`clamdscan`
Загрузка базы данных при каждом сканировании
Да (медленный запуск)
Нет (демон хранит БД в RAM)
Типичное время запуска
5–30 секунд
Менее 1 секунды
Требует запущенного clamd
Нет
Да
Параллельное сканирование
Нет
Да (--multiscan)
Лучший вариант использования
Разовые ручные сканирования
Автоматизированные, частые или массовые сканирования
Модель прав доступа
Запускается от имени вызывающего пользователя
Запускается от имени пользователя clamav (используйте --fdpass)
Шаг 6: Автоматизация сканирования с помощью Cron
Для непрерывной защиты планируйте регулярные сканирования с помощью cron. В следующем примере корневой каталог веб-сервера сканируется ежедневно в 02:00 с записью результатов с временной меткой.
sudo crontab -e
Добавьте следующую запись:
0 2 * * * /usr/bin/clamdscan --multiscan --fdpass --log=/var/log/clamav/daily_scan_$(date +%Y%m%d).log /var/www/html
Производственный cron с оповещением по электронной почте при обнаружении заражения:
0 2 * * * /usr/bin/clamscan -r --infected /var/www/html 2>&1 | grep -v "^$" | mail -s "ClamAV Daily Scan Report - $(hostname)" admin@yourdomain.com
Это перенаправляет непустой вывод непосредственно получателю письма, гарантируя получение оповещений только при обнаружении угроз или возникновении ошибок. Убедитесь, что mailutils или postfix настроен на сервере.
Ротация журналов сканирования для предотвращения неограниченного роста диска:
sudo nano /etc/logrotate.d/clamav-scan
/var/log/clamav/daily_scan_*.log {
weekly
rotate 4
compress
missingok
notifempty
}
Шаг 7: Сканирование в реальном времени с помощью clamonacc
clamonacc — компонент ClamAV для сканирования при доступе, представленный как стабильная функция в ClamAV 0.102. Он подключается к подсистеме fanotify ядра Linux для перехвата событий открытия и закрытия файлов, сканируя файлы перед их открытием.
Требования:
Ядро Linux 5.1 или новее (для fanotify с FAN_OPEN_EXEC_PERM)
ClamAV 0.102+
clamd должен быть запущен
Права root
Включение сканирования при доступе в clamd.conf
sudo nano /etc/clamav/clamd.conf
Добавьте или раскомментируйте:
OnAccessIncludePath /home
OnAccessIncludePath /var/www/html
OnAccessPrevention yes
OnAccessExcludeUname clamav
OnAccessPrevention yes — блокирует доступ к заражённым файлам в реальном времени (режим запрета); установите no для режима только обнаружения
OnAccessExcludeUname clamav — предотвращает рекурсивные циклы сканирования, инициируемые самим clamdЗапуск clamonacc
sudo clamonacc --log=/var/log/clamav/clamonacc.log --daemonizeЧтобы запустить его как службу systemd, создайте файл юнита:
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.targetsudo systemctl daemon-reload
sudo systemctl enable --now clamonaccИзвестная проблема: На высоконагруженных серверах (например, с активными конечными точками загрузки файлов) OnAccessPrevention yes может вносить ощутимую задержку ввода-вывода. Протестируйте вашу рабочую нагрузку перед включением режима предотвращения в производственной среде. Рассмотрите возможность ограничения OnAccessIncludePath минимально необходимым путём, а не широкими каталогами, такими как /.
Шаг 8: Интеграция ClamAV с почтовыми серверами
Наиболее распространённый производственный сценарий использования ClamAV — сканирование на почтовом шлюзе. Если вы запускаете почтовый сервер на инфраструктуре VPS Хостинга или Выделенных серверов, интеграция ClamAV с вашим MTA является критически важным уровнем безопасности.
Распространённые стеки интеграции:
- Postfix + amavisd-new + ClamAV —
amavisd-newвыступает в роли фильтра содержимого между Postfix и ClamAV, также обрабатывая SpamAssassin - Postfix + clamsmtp — лёгкий прокси в стиле milter
- Exim + ClamAV — встроенная директива Exim
av_scannerподдерживаетclamdнапрямую через сокет
Пример: интеграция clamd в Exim через /etc/exim4/exim4.conf:
av_scanner = clamd:/run/clamav/clamd.ctlЭта единственная директива направляет всё содержимое сообщений через запущенный экземпляр clamd перед доставкой. Совместите это с правильной настройкой Почтового хостинга, чтобы обеспечить полную защиту вашей почтовой инфраструктуры.
Устранение распространённых проблем ClamAV
freshclam завершается с ошибкой «locked by another process»
sudo systemctl stop clamav-freshclam
sudo rm -f /var/lock/clamav/freshclam.lock
sudo freshclam
sudo systemctl start clamav-freshclamclamd не запускается: «ERROR: Can’t open/parse the config file»
Проверьте путь к файлу конфигурации и его синтаксис:
sudo clamd --config-file=/etc/clamav/clamd.conf --debug 2>&1 | head -50Высокое потребление памяти
clamd обычно потребляет 500 МБ–1,2 ГБ RAM при загруженной полной базе данных. На системах с ограниченной памятью рассмотрите:
- Установку
MaxThreads 2вclamd.confдля ограничения параллелизма - Использование
clamscanбез демона для нечастых сканирований - Переход на тариф с достаточным объёмом RAM — тариф VPS Хостинга с не менее чем 2 ГБ RAM является практическим минимумом для запуска
clamdсовместно с веб-стеком
Сканирование возвращает «Access denied» для файлов
Демон clamd работает от имени пользователя clamav. Предоставьте доступ на чтение:
sudo setfacl -R -m u:clamav:rX /path/to/scanИли используйте clamdscan --fdpass для передачи файловых дескрипторов из контекста вызывающего пользователя.
Ложные срабатывания
ClamAV иногда помечает легитимные файлы, особенно сжатые архивы или некоторые PHP-фреймворки. Чтобы добавить известный безопасный файл в белый список по хешу:
sigtool --md5 /path/to/legitimate/file >> /var/lib/clamav/whitelist.fpПерезапустите clamd после изменения файлов .fp.
ClamAV на общем хостинге, VPS и выделенном сервере
Модель развёртывания существенно влияет на то, как следует настраивать ClamAV:
| Среда | Рекомендуемый режим | Примечания |
|---|---|---|
| Общий веб-хостинг | clamscan по запросу через cron | Нет root-доступа; режим демона недоступен |
| VPS (2–4 ГБ RAM) | Демон clamd + cron clamdscan | Баланс производительности и ограничений памяти |
| Выделенный сервер | clamd + clamonacc + интеграция с почтой | Полный набор функций; без компромиссов по ресурсам |
| GPU/высокопроизводительный узел | Только демон clamd | Избегайте накладных расходов clamonacc на конвейерах обработки данных |
Для сред, требующих максимальной пропускной способности и полного контроля над инструментами безопасности, Выделенные серверы обеспечивают аппаратный запас для одновременного запуска clamd, clamonacc и сканирования почты без конкуренции за ресурсы.
Матрица технических решений и ключевые выводы
Перед развёртыванием ClamAV проверьте каждый из следующих пунктов:
- Версия ядра — выполните
uname -r; подтвердите 5.1+, если требуетсяclamonacc - Доступный объём RAM —
clamdтребует 1–1,5 ГБ; планируйте соответственно перед включением демона - Автоматизация
freshclam— убедитесь, чтоclamav-freshclam.serviceвключён иNotifyClamdзадан вfreshclam.conf - Права доступа к сокету — убедитесь, что пользователь
clamavможет читать все цели сканирования; используйте--fdpassсclamdscanтам, где ACL нецелесообразны - Пути исключений — всегда исключайте
/proc,/sys,/devиз рекурсивных сканирований - Ротация журналов — настройте
logrotateдля всех файлов журналов ClamAV перед включением ежедневных заданий cron OnAccessPrevention— протестируйте в режиме только обнаружения (no) перед переключением в режим блокировки (yes) на производственных системах- Интеграция с почтой — если вы запускаете почтовый сервер, интегрируйте через
amavisd-newили встроенную директиву MTAav_scanner, а не только через периодическое сканирование файлов - Каталог карантина — предварительно создайте
/var/quarantineс соответствующими правами владения перед использованием--move;clamscanне создаст его автоматически - Управление ложными срабатываниями — ведите файл белого списка
.fpи проверяйте журналы сканирования после каждого обновления базы данных на предмет регрессий
Часто задаваемые вопросы
Обеспечивает ли ClamAV защиту в реальном времени на Linux по умолчанию?
Нет. После установки ClamAV работает только в режиме сканирования по запросу. Защита в реальном времени требует явного включения clamonacc с директивами OnAccessIncludePath и OnAccessPrevention в clamd.conf, а также ядра с поддержкой fanotify (5.1+).
В чём разница между clamscan и clamdscan?
clamscan — это автономный бинарный файл, который загружает базу данных вирусов с диска при каждом вызове, что приводит к задержке запуска 5–30 секунд. clamdscan — это тонкий клиент, который отправляет задания сканирования уже запущенному демону clamd, хранящему базу данных в RAM, что делает его значительно быстрее для повторных или автоматизированных сканирований.
Сколько RAM требуется демону ClamAV?
clamd с текущей полной базой данных (main + daily + bytecode) обычно требует от 700 МБ до 1,2 ГБ резидентной памяти. На системах с менее чем 2 ГБ общей RAM запуск демона совместно с веб-сервером или базой данных может вызвать нехватку памяти. Используйте clamscan без демона на экземплярах с ограниченной памятью.
Может ли ClamAV сканировать сжатые архивы и вложения электронной почты?
Да. ClamAV нативно распаковывает и сканирует ZIP, RAR, 7z, TAR, GZIP, BZIP2, CAB и многие другие форматы архивов, а также документы OLE2 (Microsoft Office), PDF-файлы и исполняемые файлы ELF/PE. Директивы MaxScanSize и MaxFileSize в clamd.conf управляют глубиной и ограничениями размера при сканировании архивов.
Почему freshclam сообщает «locked by another process» сразу после установки?
В Debian/Ubuntu служба systemd clamav-freshclam запускается автоматически после установки пакета и удерживает эксклюзивную блокировку каталога базы данных. Запуск freshclam вручную, пока эта служба активна, вызывает конфликт блокировки. Остановите службу командой sudo systemctl stop clamav-freshclam, выполните ручное обновление, затем перезапустите службу.
