ClamAV і Linux Malware Detect (maldet) шукають на сервері файли, які збігаються з відомими сигнатурами шкідливого коду: веб-шели, бекдори, завантажувачі, фішингові сторінки. Це корисний шар захисту для сайтів на PHP, але не гарантія чистоти. Нижче: що саме ловлять ці інструменти, як перевірити каталог сайту та розібрати карантин, і чому одного сканера замало.
Що вміють ClamAV і Maldet, а чого ні
ClamAV — універсальний антивірусний рушій із відкритими сигнатурами. Maldet створено під спільні хостинги й вебсервери: його базу побудовано на реальних зараженнях сайтів, а ClamAV він може використовувати як швидкий рушій сканування. Разом вони закривають типові випадки, але в обох є межі.
| Інструмент | Що знаходить | Що пропускає |
|---|---|---|
| clamscan / clamdscan | Відомі віруси, частину PHP-шелів, заражені документи | Свіжий або обфускований код без сигнатури |
| maldet | Веб-шели та ін'єкції, типові для CMS | Унікальні бекдори, зміни в базі даних |
| rkhunter | Руткіти та підміну системних файлів | Шкідливий код усередині сайту |
Встановлення ClamAV і оновлення сигнатур
У Debian і Ubuntu пакети встановлюються зі штатних репозиторіїв. Служба clamav-freshclam сама підтягує свіжі сигнатури. Якщо треба оновити базу вручну, службу спершу зупиняють: інакше freshclam не отримає блокування бази.
apt update
apt install -y clamav clamav-daemon
systemctl status clamav-freshclam
systemctl stop clamav-freshclam
freshclam
systemctl start clamav-freshclam
Демон clamd тримає базу сигнатур у пам'яті, тому займає помітний обсяг RAM. На маленькому VPS це варто врахувати: там зручніше запускати разовий clamscan за розкладом, а не тримати демон постійно.
Сканування каталогу сайту
Для разової перевірки підходить clamscan. Він читає базу при кожному запуску, тому повільніший, зате не потребує демона. Код повернення підказує результат: 0 — нічого не знайдено, 1 — знайдено заражені файли, 2 — помилка. Це зручно для cron і скриптів.
mkdir -p /var/quarantine
clamscan -r -i --log=/var/log/clamscan.log --move=/var/quarantine /var/www/example.com
echo $?
clamdscan --multiscan --fdpass /var/www/example.com
- Ключ -r вмикає рекурсивний обхід каталогу, -i виводить лише заражені файли.
- Ключ --move переносить знайдене в каталог карантину, який треба створити заздалегідь.
- clamdscan працює через демон швидше, а --fdpass передає відкритий дескриптор файлу, тож у демона не виникає проблем із правами.
Maldet: встановлення, сканування та карантин
Maldet встановлюється з архіву maldetect-current.tar.gz із сайту проєкту; інсталятор створює каталог /usr/local/maldetect і щоденне завдання cron. Під час сканування кожному запуску присвоюється ідентифікатор SCANID, за ним дивляться звіт і працюють із карантином. Якщо в системі є ClamAV, maldet підхопить його як рушій.
cd /usr/local/src
tar xzf maldetect-current.tar.gz
cd maldetect-*
./install.sh
maldet -u
maldet -a /var/www/example.com
maldet -r /var/www/example.com 2
maldet --report SCANID
maldet -q SCANID
maldet -s SCANID
maldet -l
Налаштування лежать у /usr/local/maldetect/conf.maldet. Параметр quarantine_hits=1 вмикає автоматичний карантин, email_alert=1 та email_addr надсилають звіт на пошту. Файли карантину зберігаються в /usr/local/maldetect/quarantine, лог подій — у /usr/local/maldetect/logs/event_log. Перед відновленням файлу (ключ -s) переконайтеся, що це не хибне спрацювання.
Чому не можна покладатися лише на сигнатури
Сигнатурний сканер бачить тільки те, що вже відомо. Зловмисники змінюють і шифрують код так, щоб він не збігався з базою, тому «чисто» у звіті не означає «безпечно». Сканування — один із заходів, а не заміна решти.
- Звіряйте файли CMS з еталоном: для WordPress підійде команда wp core verify-checksums.
- Стежте за правами та власниками файлів, забороняйте виконання PHP у каталогах завантажень.
- Зберігайте резервні копії поза сервером, щоб чистий стан завжди можна було відновити.
- Не видаляйте знайдене одразу: збережіть копію для аналізу та з'ясуйте, як код потрапив на сервер.
Якщо сканер щось знайшов, дійте за планом зі статті «Зламано сайт: діагностика, очищення та відновлення». Для перевірки самої системи на руткіти використовуйте rkhunter і chkrootkit, а загальну картину заходів збирає чекліст безпеки Linux-сервера.
Часті питання
Чи потрібен антивірус на Linux-сервері із сайтом?
Для самої системи Linux вірусів мало, але сайт на PHP лишається мішенню: через вразливий плагін на сервер потрапляють веб-шели та фішингові сторінки. Сканер ClamAV або maldet допомагає знайти такі файли, але працює як доповнення до оновлень і обмеження прав, а не замість них.
Чим maldet відрізняється від ClamAV?
ClamAV — загальний антивірусний рушій, а maldet націлений на вебсервери: його сигнатури зібрано з реальних заражень сайтів, є карантин, звіти та спостереження за зміненими файлами. Інструменти не конкурують: maldet вміє використовувати ClamAV як швидкий рушій, і разом вони знаходять більше.
Як часто сканувати каталог сайту?
Достатньо щоденної перевірки за cron, а одразу після оновлення плагінів або підозрілих подій варто запустити сканування вручну. Для великих каталогів перевіряйте лише нещодавно змінені файли, наприклад командою maldet -r із кількістю днів, щоб не навантажувати диск і процесор сервера.
Що робити, якщо сканер нічого не знайшов, а сайт поводиться дивно?
Відсутність знахідок не доводить чистоти: код міг бути обфускований або лежати в базі даних. Звірте файли CMS з еталоном, перегляньте журнали вебсервера, перевірте нещодавно змінені файли й облікові записи. Якщо злам підтверджено, одразу переходьте до порядку дій відновлення.