15%

Збережіть 15% на всі хостинг-послуги

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код:

Skills
Почати
24.10.2024

Як встановити 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 -y
  • clamav — встановлює 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+, якщо потрібен clamonacc
  • Доступний RAMclamd потребує 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 або рідну директиву 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, виконайте ручне оновлення, а потім перезапустіть службу.

15%

Збережіть 15% на всі хостинг-послуги

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код:

Skills
Почати