ClamAV (Русский)

Состояние перевода:
На этой странице представлен перевод статьи
ClamAV
. Дата последней синхронизации: 11 декабря 2022. Вы можете
помочь
синхронизировать перевод, если в английской версии произошли
изменения
.
Clam AntiVirus
это антивирусный инструмент для UNIX с открытым исходным кодом (GPL). Он предоставляет несколько утилит, включая гибкий и масштабируемый многопоточный демон (службу), сканер для командной строки и расширенные средства для автоматического обновления баз. Поскольку ClamAV в основном используется на файловых и почтовых серверах в Windows-сетях, он предназначен для обнаружения Windows-вирусов и вредоносного ПО.
Установка
Установите
пакет
clamav
.
Обновление баз
Антивирусные базы обновляются при помощи команды:
# freshclam
Если для подключения требуется использовать прокси, в файле
/etc/clamav/freshclam.conf
измените настройки HTTPProxyServer, HTTPProxyPort, HTTPProxyUsername и HTTPProxyPassword.
Файлы баз сохраняются в:
/var/lib/clamav/daily.cvd
/var/lib/clamav/main.cvd
/var/lib/clamav/bytecode.cvd
Запустите/включите
clamav-freshclam.service
для автоматического регулярного обновления баз.
Запуск демона
Примечание
Нужно запустить
freshclam
перед первым запуском службы, иначе вы столкнётесь с проблемами/ошибками, которые не позволят ClamAV запуститься правильно.
Демон не требуется, если вы планируете выполнять сканирование только вручную. Смотрите раздел
#Сканирование
ниже.
Запустите/включите
clamav-daemon.service
.
Тестирование
Чтобы убедиться, что ClamAV и его антивирусные базы корректно установились, просканируйте
тестовый файл EICAR
(эмуляция вируса,
см. Википедию
):
$ curl
https://secure.eicar.org/eicar.com.txt
| clamscan -
В результатах сканирования
должна
быть строка:
stdin: Win.Test.EICAR_HDB-1 FOUND
В противном случае, см. раздел
Решение проблем
или воспользуйтесь
форумом
.
Добавление дополнительных репозиториев баз/сигнатур
ClamAV может использовать базы данных/сигнатуры из других репозиториев или поставщиков безопасности.
Чтобы добавить наиболее важные из них за один шаг, установите либо
clamav-unofficial-sigs
AUR
(
описание на GitHub
), либо
python-fangfrisch
AUR
(
онлайн-документация
). Они добавляют сигнатуры/базы данных от популярных провайдеров, например, MalwarePatrol, SecuriteInfo, Yara, Linux Malware Detect и других.
Примечание
Службу
clamav-freshclam.service
всё равно нужно
запустить
, чтобы обновлялись официальные сигнатуры ClamAV.
Вариант 1: Настройка Fangfrisch
Fangfrisch
был разработан как более безопасная, гибкая и удобная замена clamav-unofficial-sigs и требует
совсем немного настроек
(
/etc/fangfrisch/fangfrisch.conf
).
Самое главное, что Fangfrisch никогда не нужно запускать с правами root, в отличие от clamav-unofficial-sigs.
Создайте структуру базы данных командой:
# sudo -u clamav /usr/bin/fangfrisch --conf /etc/fangfrisch/fangfrisch.conf initdb
Включите
fangfrisch.timer
.
Вариант 2: Настройка clamav-unofficial-sigs
Включите
clamav-unofficial-sigs.timer
.
Это позволит регулярно обновлять сигнатуры в соответствии с настройками из каталога
/etc/clamav-unofficial-sigs
.
Чтобы обновить сигнатуры вручную, выполните:
# clamav-unofficial-sigs.sh
Изменить настройки по умолчанию можно в файле
/etc/clamav-unofficial-sigs/user.conf
.
База MalwarePatrol
Если вы хотите использовать базу MalwarePatrol, зарегистрируйтесь на сайте
https://www.malwarepatrol.net/free-guard-upgrade-option
[
устаревшая ссылка
2023-07-30 ⓘ]
.
В файле
/etc/clamav-unofficial-sigs/user.conf
измените следующие параметры, чтобы включить эту функциональность:
malwarepatrol_receipt_code="YOUR-RECEIPT-NUMBER" # enter your receipt number here
malwarepatrol_product_code="8" # Use 8 if you have a Free account or 15 if you are a Premium customer.
malwarepatrol_list="clamav_basic" # clamav_basic or clamav_ext
malwarepatrol_free="yes" # Set to yes if you have a Free account or no if you are a Premium customer.
Источник:
https://www.malwarepatrol.net/clamav-configuration-guide/
Сканирование
Есть два варианта сканирования по запросу:
С помощью автономного сканера
Команда
clamscan
используется для проверки отдельных файлов, каталогов или всей системы:
$ clamscan myfile
$ clamscan --recursive --infected /home
# clamscan --recursive --infected --exclude-dir='^/sys|^/dev' /
Для автоматического удаления инфицированных файлов добавьте параметр
--remove
, или можете использовать
--move=/директория
для перемещения их в карантин.
Если вы хотите, чтобы
clamscan
сканировал большие файлы, добавьте параметры
--max-filesize=4000M
and
--max-scansize=4000M
. Значение '4000M' является максимально возможным, и его можно уменьшить по необходимости.
При использовании параметра
-l /путь/к/файлу
результаты сканирования будут записываться в указанный log-файл.
С помощью демона
Команда
clamdscan
похожа, но использует демон, который должен быть запущен для работы этой команды. Большинство опций игнорируется, поскольку демон считывает настройки, указанные в файле
/etc/clamav/clamd.conf
.
Проверка электронной почты
К почтовому серверу можно подключить фильтр (milter), который будет проверять письма на наличие вирусов. Отредактируйте файл настроек
/etc/clamav/clamav-milter.conf
под ваши нужды. Например:
/etc/clamav/clamav-milter.conf
MilterSocket /tmp/clamav-milter.socket
MilterSocketMode 660
FixStaleSocket yes
User clamav
MilterSocketGroup clamav
PidFile /run/clamav/clamav-milter.pid
TemporaryDirectory /tmp
ClamdSocket unix:/run/clamav/clamd.ctl
LogSyslog yes
LogInfected Basic
Создайте
/etc/systemd/system/clamav-milter.service
:
/etc/systemd/system/clamav-milter.service
[Unit]
Description='ClamAV Milter'
After=clamav-daemon.service

[Service]
Type=forking
ExecStart=/usr/bin/clamav-milter --config-file /etc/clamav/clamav-milter.conf

[Install]
WantedBy=multi-user.target
Запустите
и
включите
службу
clamav-milter.service
.
Для
Postfix
добавьте следующие строки в
/etc/postfix/main.cf
:
etc/postfix/main.cf
smtpd_milters = unix:/tmp/clamav-milter.socket
milter_default_action = tempfail
Проверьте
журнал
. Если есть ошибки доступа к
clamav-milter.socket
, попробуйте добавить пользователя
postfix
в группу
clamav
.
Проверка при обращении
(Источник:
https://blog.clamav.net/2016/03/configuring-on-access-scanning-in-clamav.html
)
Проверка при обращении (on-access scanning) сканирует файл, когда с ним выполняются операции чтения, записи или выполнения.
Важно
По состоянию на ноябрь 2021 года эта возможность всё ещё является сырой,
clamd
может падать, а процессы в контейнерах не получают защиту. Поэтому неоднозначно, является ли это улучшением безопасности или нет. Не включайте это, если только требования, контракты или любопытство не заставляют вас сделать это.
Для работы требуется ядро, скомпилированное с модулем
fanotify
(ядро >= 3.8); в официальных ядрах Arch Linux он присутствует. Проверьте, включен ли
fanotify
, перед включением проверки при обращении.
$ zgrep FANOTIFY /proc/config.gz
Сначала отредактируйте файл настроек
/etc/clamav/clamd.conf
, добавив следующее в конец файла (вы также можете изменить отдельные параметры).
Важно
При изменении других частей файла обратите внимание на следующее предупреждение о защите порта clamd. Обычно используется локальный unix-сокет, но учтите, что этот порт никак не аутентифицирован и не защищён. Подробнее смотрите
https://docs.clamav.net/manual/Usage/Scanning.html#clamd-v0101
в разделах Daemon и ClamD.
/etc/clamav/clamd.conf
# Отслеживать события во всей точке монтирования
OnAccessMountPath /
OnAccessExcludePath /proc
OnAccessExcludePath /run
OnAccessExcludePath /sys

# Или отслеживать события в указанных каталогах
# (не может использоваться одновременно с OnAccessMountPath)
# Можно добавить опцию несколько раз для отслеживания нескольких каталогов
# OnAccessIncludePath /home

# Блокировать работу с файлом до завершения его сканирования.
# Не работает в OnAccessMountPath, поэтому в данном примере отключено.
# Работает только с OnAccessIncludePath, если /usr и /etc исключены из проверки.
# Использовать со сканированием /var не рекомендуется, так как это замедлит
# установку пакетов в тысячу раз
OnAccessPrevention false

# Сканировать свежесозданные, перемещённые или переименованные файлы
# (работает только с OnAccessIncludePath)
OnAccessExtraScanning true

# Не сканировать активность пользователя clamav,
# чтобы сканер не зациклился на проверке самого себя
OnAccessExcludeUname clamav

# Также можно не сканировать работу пользователя root
# OnAccessExcludeRootUID true

# Команда, которая будет выполнена при обнаружении вируса
VirusEvent /etc/clamav/virus-event.bash

# ВАЖНО: в целях безопасности clamd НИКОГДА не должен работать от имени root.
# User root    # УДАЛИТЕ такую строку, если она есть
# Используйте такую:
User clamav
Затем разрешите пользователю
clamav
запускать
notify-send
через
sudo
от имени любого пользователя и с любыми переменными окружения:
/etc/sudoers.d/clamav
clamav ALL = (ALL) NOPASSWD: SETENV: /usr/bin/notify-send
Теперь создайте файл
/etc/clamav/virus-event.bash
со следующим содержимым и сделайте его
исполняемым
:
/etc/clamav/virus-event.bash
#!/bin/bash
PATH=/usr/bin
ALERT="Signature detected by clamav: $CLAM_VIRUSEVENT_VIRUSNAME in $CLAM_VIRUSEVENT_FILENAME"

# Отправка уведомления всем пользователям с графическим сеансом
for ADDRESS in /run/user/*; do
    USERID=${ADDRESS#/run/user/}
    /usr/bin/sudo -u "#$USERID" DBUS_SESSION_BUS_ADDRESS="unix:path=$ADDRESS/bus" PATH=${PATH} \
        /usr/bin/notify-send -i dialog-warning "Virus found!" "$ALERT"
done
Этот скрипт прописан в опции
VirusEvent
и будет запускаться демоном
clamd
при обнаружении вируса. Можно отредактировать текст отображаемых сообщений на свой вкус.
Перезапустите
службу
clamav-daemon.service
.
По умолчанию
clamonacc
передаёт в
clamav
для сканирования только имена файлов, к которым кто-то обратился. Это проблема, потому что
clamav
не сможет просканировать файлы, к которым у него нет доступа. Вместо этого можно указать
clamonacc
(который всегда запускается от имени
root
) использовать передачу дескрипторов файлов.
Отредактируйте
юнит
clamav-clamonacc.service
, добавив в него опцию:
[Service]
ExecStart=
ExecStart=/usr/sbin/clamonacc -F
--fdpass
--log=/var/log/clamav/clamonacc.log
Наконец,
запустите/включите
службу
clamav-clamonacc.service
.
Если
AppArmor
мешает работе
clamd
, используйте complain-only mode:
# aa-complain clamd
Советы и рекомендации
Использование нескольких потоков
Через clamscan
При сканировании файла или каталога из командной строки с помощью
clamscan
используется только один поток процессора. Это может быть нормально в случаях, когда время не критично или вы не хотите, чтобы компьютер стал подтормаживать во время проверки. Если же необходимо быстро просканировать большой каталог или USB-накопитель, вы можете захотеть задействовать все доступные процессоры для ускорения процесса.
clamscan
разработан как однопоточный, поэтому можно использовать
xargs
для запуска нескольких параллельных сканирований:
$ find /home/archie -type f -print0 | xargs -0 -P $(nproc) clamscan
В этом примере параметр
-P
для
xargs
запускает столько одновременных процессов
clamscan
, сколько есть процессоров (по данным
nproc
). Опции
--max-lines
и
--max-args
позволят ещё более тонко контролировать распределение нагрузки по потокам.
Через clamdscan
Если у вас запущен демон
clamd
, то можно использовать
clamdscan
(смотрите раздел
#Запуск демона
):
$ clamdscan --multiscan --fdpass /home/archie
Здесь параметр
--multiscan
позволяет
clamd
сканировать содержимое каталога параллельно, используя доступные потоки. Параметр
--fdpass
необходим для передачи разрешений дескриптора файла в
clamd
, так как демон работает под пользователем и группой
clamav
и может не иметь разрешения на чтение некоторых файлов.
Количество доступных потоков для
clamdscan
определяется в
/etc/clamav/clamd.conf
через параметр
MaxThreads
(смотрите
clamd.conf(5)
). Даже если
MaxThreads
больше единицы (текущее значение по умолчанию равно 10), при запуске
clamdscan
без параметра
--multiscan
всё равно будет использоваться только один поток.
Решение проблем
Примечание
Убедитесь, что пользователь, от имени которого запускается
clamscan
, имеет права на чтение файлов баз
/var/lib/clamav/*.cvd
.
Error: Clamd was NOT notified
Если при запуске freshclam вы получаете сообщение:
WARNING: Clamd was NOT notified: Cannot connect to clamd through 
/var/lib/clamav/clamd.sock connect(): No such file or directory
Создайте отсутствующий sock-файл:
Важно
Обратите внимание на предупреждение о безопасности порта clamd в разделе
#Проверка при обращении
!
# touch /run/clamav/clamd.ctl
# chown clamav:clamav /run/clamav/clamd.ctl
Затем в файле
/etc/clamav/clamd.conf
раскомментируйте строку:
LocalSocket /run/clamav/clamd.ctl
Сохраните файл и
перезапустите
службу
clamav-daemon.service
.
Error: No supported database files found
Если при запуске службы вы получаете сообщение:
LibClamAV Error: cli_loaddb(): No supported database files found
in /var/lib/clamav ERROR: Not supported data format
Это происходит из-за несовпадения опции
DatabaseDirectory
в файлах
/etc/clamav/freshclam.conf
и
/etc/clamav/clamd.conf
. Файл
/etc/clamav/freshclam.conf
указывает на
/var/lib/clamav
, а
/etc/clamav/clamd.conf
(каталог по умолчанию) указывает на
/usr/share/clamav
или другой каталог. Отредактируйте
/etc/clamav/clamd.conf
, указав тот же
DatabaseDirectory
, что и в
/etc/clamav/freshclam.conf
. После этого
clamav
успешно запустится.
Error: Can't create temporary directory
Если вы получили следующую ошибку, содержащую номера UID и GID:
# ERROR: can't create temporary directory
# Hint: The database directory must be writable for UID XXX or GID YYY
Установите правильные права на директорию:
# chown UID:GID /var/lib/clamav && chmod 755 /var/lib/clamav
Смотрите также
Wikipedia:ru:ClamAV