ClamAV (Русский) - ArchWiki

Jump to content
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

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

- Wikipedia:ru:ClamAV

Category:

- Security (Русский)

Hidden category:

- Pages with dead links