Clamav
Нужен ли антивирус на Linux
Oracle Linux
Oracle Linux 8
# clam есть в репозитории EPEL dnf install oracle-epel-release-el8 # установка антивируса dnf install clamav # установка пакета для обновления баз dnf install clamav-update # список пакетов в репозиториях, связанных с clam dnf list | grep -i clam
Oracle Linux 7
# clam есть в репозитории EPEL yum install oracle-epel-release-el7 # установка антивируса (clamav-update ставится как зависимый) yum install clamav # список пакетов в репозиториях, связанных с clam yum list | grep -i clam
Список исполняемых файлов (OL8)
[root]# ls /bin /sbin | grep clam clambc # ? clamconf # вывод информации о текущей конфигурации clamdscan # исполняемый файл сервиса сканирования clamd (в systemd нужно добавлять вручную) clamdtop # утилита мониторинга одного или нескольких сервисов clamd clamscan # утилита запуска сканирования из командной строки clamsubmit # утилита уведомления поддержки о ложно позитивных срабатываниях freshclam # утилита/сервис автоматического обновления (в systemd имеет имя clamav-freshclam) clamonacc # сервис онлайн сканирования и клиент clamd, отслеживает в ядре события доступа к файлам и передает clamd запрос на сканирование (в systemd нужно добавлять вручную)
Solaris 10
http_proxy=http://172.16.9.77:3128; export http_proxy; https_proxy=http://172.16.9.77:3128; export https_proxy; # установка csw pkgadd -d http://get.opencsw.org/now /opt/csw/bin/pkgutil -U # установка clamav /opt/csw/bin/pkgutil -y -i clamav # список файлов пакета /usr/sbin/pkgchk -L CSWclamav
Конфигурация
# конфигурация обновления vi /etc/opt/csw/freshclam.conf -------------------------- UpdateLogFile /var/log/clamav/freshclam.log -------------------------- mkdir /var/log/clamav chown clamav:bin /var/log/clamav # каталог баз по умолчанию (может зависеть от опций установки) /var/opt/csw/clamav/db # конфигурация сервиса clamd /etc/opt/csw/clamd.conf
Сканирование
Команды
# запуск сканирования текущего каталога clamscan # вывод информации о текущей конфигурации всех компонентов clamav (см. man clamconf) clamconf
Обновление антивирусных баз
Сервис обновления
# антивирусные базы ls -lh /var/lib/clamav/ # настройка обновления через прокси vi /etc/clamav/freshclam.conf ----------------------------------- HTTPProxyServer 192.168.0.100 HTTPProxyPort 3128 ----------------------------------- # запуск обновления вручную freshclam # частота обновления ограничена # если нужно повторить обновление в тестовых целях, то можно удалить рабочий файл rm -f /var/lib/clamav/freshclam.dat # сервис для автоматического обновления systemctl status clamav-freshclam
Обновление антивирусных баз из России
В 2022 году был закрыт доступ из РФ.
# отключите сервис обновления (если включен) systemctl stop clamav-freshclam systemctl disable clamav-freshclam ### Способ 1 (ручной) # скачайте базы через VPN или с альтернативных зеркал # необходимо учитывать, что используемая вами версия clamav должна поддерживать базы, которые вы скачиваете вручную wget http://database.clamav.net/main.cvd wget http://database.clamav.net/daily.cvd wget http://database.clamav.net/bytecode.cvd # положите базы в каталог systemctl stop clamav-freshclam cp -a *.cvd /var/lib/clamav/ chown clamupdate:clamudate /var/lib/clamav/*.cvd chmod 644 /var/lib/clamav/*.cvd ### Способ 2 (платное зеркало) (не проверял) vi /etc/clamav/freshclam.conf ----------------------------------- PrivateMirror https://tendence.ru/clamav ScriptedUpdates no ----------------------------------- ### Способ 3 (бесплатные зеркала) # https://packages.microsoft.com/clamav (проверено 19.09.2023, период обновления более 12 часов) # https://unlix.ru/clamav (проверено 19.09.2023, период обновления более 12 часов) # https://pivotal-clamav-mirror.s3.amazonaws.com (проверено 19.09.2023, период обновления менее 12 часов) # пример замены официального зеркала на альтернативное # альтернативные зеркала обычно не поддерживают ScriptedUpdates vi /etc/clamav/freshclam.conf ----------------------------------- #DatabaseMirror database.clamav.net DatabaseMirror packages.microsoft.com/clamav ScriptedUpdates no -----------------------------------
Настройка логирования обновления
mkdir /var/log/freshclam chwon clamupdate:clamupdate /var/log/freshclam vi /etc/clamav/freshclam.conf ----------------------------------- UpdateLogFile /var/log/freshclam/freshclam.log LogFileMaxSize 2M LogRotate yes -----------------------------------
Процесс обновления
Ссылка по теме
Как freshclam обновляет базы с внешнего зеркала
- при каждом цикле проверки freshclam запрашивает запись типа TXT в домене current.cvd.clamav.net
- локальный резолвер хоста пересылает DNS запрос своему DNS серверу и получает ответ в виде строки
"0.103.10:62:27031:1694755740:1:90:49192:334"
- freshclam парсит строку и получает номера актуальных версий файлов баз
- Обновление
- Если
ScriptedUpdates yes
, то качает последовательно файлы изменений между актуальной и локальной версиямиdaily-<версия>.cdiff
и применяет изменения к локальной базе - Если
ScriptedUpdates no
, то качает весь файл базы - скачанная или собранная по изменениям база проверяется на корректность и только после этого замещает локальную базу
- файлы изменений не сохраняются в каталоге локальной базы
- Если
Пример определения версий clamav из DNS
host -t txt current.cvd.clamav.net current.cvd.clamav.net descriptive text "0.103.10:62:27031:1694755740:1:90:49192:334" "0.103.10:62:27031:1694755740:1:90:49192:334" 1, 0.103.10 - версия clam 2, 62 - версия main.cvd 3, 27031 - версия daily.cvd 4, 1694755740 - ? 5, 1 - ? 6, 90 - f-level (? не знаю что это) 7, 49192 - ? 8, 334 - версия bytecode.cvd
Проблема не актуальной версии базы на внешнем зеркале
- Если версия локальной базы ниже той что возвращает DNS запрос, то запускается скачивание файла базы
- После скачивания, файл проверяется и определяется его фактическая версия
- Если фактическая версия ниже той что была получена из DNS запроса, то обновление считается не успешным
- Если обновление было не успешно, то весь процесс повторяется снова, количество попыток на каждое зеркало определяется параметром MaxAttempts
- При следующем цикле проверки все выше перечисленное повторяется снова
- Таким образом, если на внешнем зеркале лежит не актуальная база, то она будет постоянно скачиваться, пока на зеркало не выложат актуальную базу
Важные параметры
# обновление с внешнего зеркала, актуальная версия определяется по DNS запросу DatabaseMirror https://<mirror_host> # обновление с частного зеркала, выполняется запрос If-Modified-Since для определения необходимости скачивания файла # если этот параметр определен, то параметр DatabaseMirror игнорируется PrivateMirror http://your_mirror.host.local # число проверок в день, по умолчанию 12, т.е. обновление запускается каждые 2 часа Checks <num_checks_per_day> # число повторов на каждое зеркало в случае неудачи MaxAttempts <num>
Локальное зеркало
Как организовать локальное зеркало?
- установить пакеты clamav-update, nginx
- настроить сервис clamav-freshclam на автоматичесокое обновление с внешнего зеркала
- настроить в nginx сайт, чтобы с него были доступны на скачивание файлы антивирусных баз
- на хостах, которые должны обновляться с вашего зеркала, необходимо указать зеркало через параметр
PrivateMirror <your_mirror_url>
, чтобы исключить проблему не актуальной версии
Внешнее зеркало
Для внешнего зеркала желательно предоставление diff файлов. Не знаю, можно ли настроить freshclam так чтобы он сохранял diff файлы. Если нет, то можно на зеркале вместо freshclam использовать собственный скрипт, который должен решать ту же задачу, но с сохраненеием diff файлов.
Пример конфигурации nginx для зеркала
worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; events { worker_connections 1024; } http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; types { application/octet-stream cvd; } default_type application/octet-stream; server { listen 80 default_server; server_name _; root /var/lib/clamav; location / { deny all; location ~ "\.(cvd)$" { allow all; } } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } } }
Обратный кэширующий прокси вместо зеркала
Привожу как идею (не проверял)
- Вместо зеркала можно настроить обратный кэширующий proxy на nginx
- Указать хост обратного прокси вместо зеркала
- Все хосты будут обращаться к обратному прокси как к зеркалу, файлы баз будут качаться из интернета и храниться в кэше некоторый период
- Возможна ситуация, когда хост получит по DNS информацию о выходе новой версии базы, начнет качать ее и получит старый файл из кэша
Графический интерфейс
Графический интерфейс называется ClamTk где взять и как поставить не разбирался.