- ClamAV (Русский)
- Установка
- Обновление баз
- Запуск демона
- Тестирование
- Добавление дополнительных репозиториев баз/сигнатур
- Вариант 1: Настройка Fangfrisch
- Вариант 2: Настройка clamav-unofficial-sigs
- База MalwarePatrol
- Сканирование
- С помощью автономного сканера
- С помощью демона
- Проверка электронной почты
- Проверка при обращении
- Советы и рекомендации
- Использование нескольких потоков
- Через clamscan
- Через clamdscan
- Решение проблем
- Error: Clamd was NOT notified
- Error: No supported database files found
- Error: Can’t create temporary directory
- Смотрите также
ClamAV (Русский)
Состояние перевода: На этой странице представлен перевод статьи ClamAV. Дата последней синхронизации: 11 декабря 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.
Clam AntiVirus это антивирусный инструмент для UNIX с открытым исходным кодом (GPL). Он предоставляет несколько утилит, включая гибкий и масштабируемый многопоточный демон (службу), сканер для командной строки и расширенные средства для автоматического обновления баз. Поскольку ClamAV в основном используется на файловых и почтовых серверах в Windows-сетях, он предназначен для обнаружения Windows-вирусов и вредоносного ПО.
Установка
Обновление баз
Антивирусные базы обновляются при помощи команды:
Если для подключения требуется использовать прокси, в файле /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 и его антивирусные базы корректно установились, просканируйте тестовый файл EICAR (эмуляция вируса, см. Википедию):
В результатах сканирования должна быть строка:
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
Вариант 2: Настройка clamav-unofficial-sigs
Это позволит регулярно обновлять сигнатуры в соответствии с настройками из каталога /etc/clamav-unofficial-sigs .
Чтобы обновить сигнатуры вручную, выполните:
Изменить настройки по умолчанию можно в файле /etc/clamav-unofficial-sigs/user.conf .
База MalwarePatrol
Если вы хотите использовать базу MalwarePatrol, зарегистрируйтесь на сайте https://www.malwarepatrol.net/free-guard-upgrade-option.
В файле /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.
Сканирование
Есть два варианта сканирования по запросу:
С помощью автономного сканера
Команда 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
[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 :
smtpd_milters = unix:/tmp/clamav-milter.socket milter_default_action = tempfail
Проверьте журнал. Если есть ошибки доступа к clamav-milter.socket , попробуйте добавить пользователя postfix в группу clamav .
Проверка при обращении
Проверка при обращении (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.
# Отслеживать события во всей точке монтирования 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 от имени любого пользователя и с любыми переменными окружения:
clamav ALL = (ALL) NOPASSWD: SETENV: /usr/bin/notify-send
Теперь создайте файл /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=$ /usr/bin/sudo -u "#$USERID" DBUS_SESSION_BUS_ADDRESS="unix:path=$ADDRESS/bus" PATH=$ \ /usr/bin/notify-send -i dialog-warning "Virus found!" "$ALERT" done
Этот скрипт прописан в опции VirusEvent и будет запускаться демоном clamd при обнаружении вируса. Можно отредактировать текст отображаемых сообщений на свой вкус.
По умолчанию 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:
Советы и рекомендации
Использование нескольких потоков
Через 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