ClamAV (Русский)
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
.
Проверка при обращении
Проверка при обращении (on-access scanning) сканирует файл, когда с ним выполняются операции чтения, записи или выполнения.
Для работы требуется ядро, скомпилированное с модулем fanotify (ядро >= 3.8); в официальных ядрах Arch Linux он присутствует. Проверьте, включен ли fanotify, перед включением проверки при обращении.
$ zgrep FANOTIFY /proc/config.gz
Сначала отредактируйте файл настроек /etc/clamav/clamd.conf
, добавив следующее в конец файла (вы также можете изменить отдельные параметры).
/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-файл:
# 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