ClamAV (Русский)

From ArchWiki
Состояние перевода: На этой странице представлен перевод статьи 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-sigsAUR (описание на GitHub), либо python-fangfrischAUR (онлайн-документация). Они добавляют сигнатуры/базы данных от популярных провайдеров, например, 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

Смотрите также