Як встановити 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(Linux ядроfanotify) - Байткодові сигнатури для евристичного виявлення, що виходить за межі статичного зіставлення шаблонів
Крок 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
Сканер CLI на вимогу
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 повідомлятиме про помилки «Доступ заборонено» у своєму журналі, а не повертатиме вердикт «чистий/заражений».
Крок 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.target
sudo 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 безпосередньо через сокет
Приклад: Інтеграція Exim clamd у /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-freshclam
clamd не запускається: «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+, якщо потрібен clamonaccclamd потребує 1–1.5 ГБ; плануйте відповідно перед увімкненням демонаfreshclam — підтвердіть, що clamav-freshclam.service увімкнено та NotifyClamd встановлено у freshclam.confclamav може читати всі цілі сканування; використовуйте --fdpass з clamdscan, де ACL непрактичні/proc, /sys, /dev з рекурсивних скануваньlogrotate для всіх файлів журналів ClamAV перед увімкненням щоденних завдань cronOnAccessPrevention — тестуйте в режимі лише виявлення (no) перед переходом до режиму блокування (yes) на виробничих системахamavisd-new або рідну директиву MTA av_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 ГБ резидентної пам’яті. На системах із загальним обсягом RAM менше 2 ГБ запуск демона поряд із веб-сервером або базою даних може спричинити тиск на пам’ять. Використовуйте 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, виконайте ручне оновлення, а потім перезапустіть службу.
