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 с эталоном, просмотрите журналы веб-сервера, проверьте недавно изменённые файлы и учётные записи. При подтверждении взлома сразу переходите к порядку действий восстановления.